222 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.ComponentModel;
 | |
| using System.Diagnostics;
 | |
| using System.Security.Cryptography;
 | |
| using System.Windows.Forms;
 | |
| namespace DevComponents.DotNetBar
 | |
| {
 | |
| 	[System.ComponentModel.ToolboxItem(false),System.ComponentModel.DesignTimeVisible(false)]
 | |
| 	public class DevCoLicenseProvider:LicenseProvider
 | |
| 	{
 | |
| 		const string DOTNETBAR="dotnetbar";
 | |
| 		public DevCoLicenseProvider()
 | |
| 		{
 | |
| 		}
 | |
| 		public override License GetLicense(LicenseContext context,Type type,object instance,bool allowExceptions)
 | |
| 		{
 | |
| 			DevCoLicense lic = null;
 | |
| 			Debug.Assert(context!=null, "No context provided!");
 | |
| 			#if !TRIAL
 | |
| 			//if no context is provided, do nothing
 | |
| 			if (context != null) 
 | |
| 			{
 | |
| 				//if this control is in runtime mode
 | |
| 				if (context.UsageMode == LicenseUsageMode.Runtime) 
 | |
| 				{
 | |
| 					//retreive the stored license key
 | |
| 					string key = context.GetSavedLicenseKey(type, null);
 | |
| 					//check if the stored license key is null
 | |
| 					// and call IsKeyValid to make sure its valid
 | |
| 					if (key != null && IsKeyValid2(key, type)) 
 | |
| 					{
 | |
| 						//if the key is valid create a new license
 | |
| 						lic = new DevCoLicense(key);
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						try
 | |
| 						{
 | |
| 							System.Reflection.Assembly[] assemblies=System.AppDomain.CurrentDomain.GetAssemblies();
 | |
| 							foreach(System.Reflection.Assembly a in assemblies)
 | |
| 							{
 | |
| 								string codeBase = a.CodeBase;
 | |
| 								codeBase = codeBase.Substring(codeBase.LastIndexOf("/") + 1)+".licenses";
 | |
| 								System.IO.Stream stream=this.GetManifestResourceStream(a,codeBase);
 | |
| 								if(stream==null)
 | |
| 									codeBase=codeBase.Replace(".DLL.",".dll.");
 | |
| 								stream=this.GetManifestResourceStream(a,codeBase);
 | |
| 								if(stream!=null)
 | |
| 								{
 | |
| 									key=DeserializeLicenseKey(stream);
 | |
| 									if (key != null && key!="") //IsKeyValid2(key, type)) 
 | |
| 									{
 | |
| 										lic = new DevCoLicense(key);
 | |
| 										break;
 | |
| 									}
 | |
| 								}
 | |
| 							}
 | |
| 						}
 | |
| 						catch
 | |
| 						{
 | |
| 							lic=new DevCoLicense("");
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					string sKey="";
 | |
| 					Microsoft.Win32.RegistryKey regkey=Microsoft.Win32.Registry.LocalMachine;
 | |
| 					regkey=regkey.OpenSubKey("Software\\DevComponents\\Licenses",false);
 | |
| 					if(regkey!=null)
 | |
| 					{
 | |
| 						sKey=regkey.GetValue("DevComponents.DotNetBar.DotNetBarManager2").ToString();
 | |
| 					}
 | |
| 					//check if the key is valid
 | |
| 					if (IsKeyValid(sKey, type)) 
 | |
| 					{
 | |
| 						//valid key so create a new License
 | |
| 						lic = new DevCoLicense(Key(type));
 | |
| 					}
 | |
| 
 | |
| 					//if we managed to create a license, stuff it into the context
 | |
| 					if (lic != null) 
 | |
| 					{
 | |
| 						context.SetSavedLicenseKey(type, lic.LicenseKey);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			#else
 | |
| 			if (context != null) 
 | |
| 			{
 | |
| 				lic=new DevCoLicense("");
 | |
| 				//if this control is in runtime mode
 | |
| 				if (context.UsageMode == LicenseUsageMode.Runtime) 
 | |
| 				{
 | |
| 					RemindForm frm=new RemindForm();
 | |
| 					frm.ShowDialog();
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					context.SetSavedLicenseKey(type, lic.LicenseKey);
 | |
| 				}
 | |
| 			}
 | |
| 			#endif
 | |
| 
 | |
| 			if(lic==null && context!=null)
 | |
| 			{
 | |
| 				RemindForm frm=new RemindForm();
 | |
| 				frm.ShowDialog();
 | |
| 				lic=new DevCoLicense("");
 | |
| 			}
 | |
| 			return lic;
 | |
| 			
 | |
| 		}
 | |
| 
 | |
| 		private System.IO.Stream GetManifestResourceStream(System.Reflection.Assembly a, string resourceName)
 | |
| 		{
 | |
| 			resourceName=resourceName.ToLower();
 | |
| 			string[] resources=a.GetManifestResourceNames();
 | |
| 			foreach(string name in resources)
 | |
| 			{
 | |
| 				if(name.ToLower()==resourceName)
 | |
| 				{
 | |
| 					return a.GetManifestResourceStream(name);
 | |
| 					//break;
 | |
| 				}
 | |
| 			}
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		private string DeserializeLicenseKey(System.IO.Stream o)
 | |
| 		{
 | |
| 			System.Runtime.Serialization.IFormatter formatter1;
 | |
| 			object obj1=null;
 | |
| 			object[] array1;
 | |
| 			formatter1 = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
 | |
| 			try
 | |
| 			{
 | |
| 				obj1 = formatter1.Deserialize(o);
 | |
| 			
 | |
| 				if((obj1 as object[]) == null)
 | |
| 					return null;
 | |
| 				array1 = ((object[]) obj1);
 | |
| 				if((array1[0] as string) == null)
 | |
| 					return null;
 | |
| 				
 | |
| 				System.Collections.Hashtable h=((System.Collections.Hashtable)array1[1]);
 | |
| 				
 | |
| 				//Type t=typeof(DotNetBarManager);
 | |
| 				string s=DOTNETBAR;
 | |
| 				foreach(System.Collections.DictionaryEntry entry in h)
 | |
| 				{
 | |
| 					string key=entry.Key.ToString().ToLower();
 | |
| 					if(key.IndexOf(s)>=0)
 | |
| 						return entry.Value as string;
 | |
| 				}
 | |
| 			}
 | |
| 			catch{}
 | |
| 			return null;
 | |
|  		}
 | |
| 
 | |
| 		#if !TRIAL
 | |
| 		private bool IsKeyValid2(string key, Type type)
 | |
| 		{
 | |
| 			if(key==null || key=="")
 | |
| 				return false;
 | |
| 			
 | |
| 			return (Key(type)==key);
 | |
| 		}
 | |
| 
 | |
| 		internal static string Key(Type type)
 | |
| 		{
 | |
| 			Byte[] bi=(new System.Text.UnicodeEncoding()).GetBytes(type.ToString());
 | |
| 			byte[] res;
 | |
| 			SHA256 shaM = new SHA256Managed(); 
 | |
| 			res = shaM.ComputeHash(bi);
 | |
| 			System.Text.StringBuilder sb=new System.Text.StringBuilder();
 | |
| 			System.IO.StringWriter sw=new System.IO.StringWriter(sb);
 | |
| 			System.Xml.XmlTextWriter xt=new System.Xml.XmlTextWriter(sw);
 | |
| 			xt.WriteBase64(res,0,(int)res.Length);
 | |
| 			xt.Close();
 | |
| 			return sb.ToString();
 | |
| 		}
 | |
| 
 | |
| 		private bool IsKeyValid(string key, Type type)
 | |
| 		{
 | |
| 			if(key==null || key=="")
 | |
| 				return false;
 | |
| //			Byte[] bi=(new System.Text.UnicodeEncoding()).GetBytes(type.ToString()+System.Windows.Forms.SystemInformation.ComputerName);
 | |
| //			byte[] res;
 | |
| //			SHA256 shaM = new SHA256Managed(); 
 | |
| //			res = shaM.ComputeHash(bi);
 | |
| //
 | |
| //			System.Text.StringBuilder sb=new System.Text.StringBuilder();
 | |
| //			System.IO.StringWriter sw=new System.IO.StringWriter(sb);
 | |
| //			System.Xml.XmlTextWriter xt=new System.Xml.XmlTextWriter(sw);
 | |
| //			xt.WriteBase64(res,0,(int)res.Length);
 | |
| //			xt.Close();
 | |
| 			return ("F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"==key);
 | |
| 		}
 | |
| 		#endif
 | |
| 	}
 | |
| 	internal class DevCoLicense:License 
 | |
| 	{
 | |
| 		private string key;        
 | |
| 		public DevCoLicense(string key) 
 | |
| 		{
 | |
| 			this.key = key;
 | |
| 		}
 | |
| 		public override string LicenseKey 
 | |
| 		{ 
 | |
| 			get 
 | |
| 			{
 | |
| 				return key;
 | |
| 			}
 | |
| 		}
 | |
| 		public override void Dispose() 
 | |
| 		{
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| }
 |