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() 
 | 
						|
		{
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 |