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