145 lines
4.2 KiB
Plaintext
145 lines
4.2 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| License.mqh |
|
|
//| Copyright 2023, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2023, MetaQuotes Ltd."
|
|
#property link "https://www.mql5.com"
|
|
#property version "1.00"
|
|
|
|
#property strict
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| defines |
|
|
//+------------------------------------------------------------------+
|
|
|
|
#define LICENSED_TRADE_MODES {ACCOUNT_TRADE_MODE_DEMO}//{ACCOUNT_TRADE_MODE_CONTEST,ACCOUNT_TRADE_MODE_DEMO}
|
|
#define LICENSED_EXPIRY_DATE D'2025.06.01'
|
|
#define LICENSED_EXPIRY_DAYS 30
|
|
#define LICENSED_EXPIRY_DATE_START D'2025.05.01'
|
|
#define LICENSED_EXPIRY_DATE_START_COMPILE_TIME __DATETIME__
|
|
#define LICENSED_PRIVATE_KEY "Activation Key E"
|
|
|
|
class License
|
|
{
|
|
protected:
|
|
string M_ProductName;
|
|
long m_AccountLogin;
|
|
int m_UserID;
|
|
datetime m_Expiry;
|
|
virtual string LicencePath();
|
|
bool FileGen(string data);
|
|
|
|
public:
|
|
License();
|
|
~License();
|
|
|
|
string GeneratePasscode(string data);
|
|
void ClinetProgram(string NameExpert, int UserID, datetime Expiry, long LoginAccount = -1);
|
|
};
|
|
|
|
License::License()
|
|
{
|
|
}
|
|
|
|
License::~License()
|
|
{
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| DLL imports |
|
|
//+------------------------------------------------------------------+
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| EX5 imports |
|
|
//+------------------------------------------------------------------+
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| create hash |
|
|
//+------------------------------------------------------------------+
|
|
string License::GeneratePasscode(string data)
|
|
{
|
|
uchar dataChar[];
|
|
StringToCharArray( data, dataChar, 0, StringLen( data ) );
|
|
|
|
uchar cryptChar[];
|
|
CryptEncode( CRYPT_HASH_SHA256, dataChar, dataChar, cryptChar );
|
|
|
|
uchar resCharArray[];
|
|
ArrayResize(resCharArray, ArraySize(cryptChar));
|
|
ArrayCopy(resCharArray, cryptChar, 0, 0, ArraySize(cryptChar));
|
|
|
|
uchar base64Result[];
|
|
CryptEncode(CRYPT_BASE64, resCharArray, resCharArray, base64Result);
|
|
|
|
string result = CharArrayToString(base64Result);
|
|
|
|
return result;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| create file name to hash |
|
|
//+------------------------------------------------------------------+
|
|
string License::LicencePath() {return ("License\\"+M_ProductName+"\\"+GeneratePasscode(IntegerToString(m_AccountLogin)+"_"+IntegerToString(m_UserID))+"lic");}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| set to name prognam, login number, expirytion, user id |
|
|
//+------------------------------------------------------------------+
|
|
void License::ClinetProgram(string NameExpert, int UserID, datetime Expiry, long LoginAccount = -1)
|
|
{
|
|
if(LoginAccount < 0) {LoginAccount = AccountInfoInteger(ACCOUNT_LOGIN);}
|
|
m_AccountLogin = LoginAccount;
|
|
M_ProductName = NameExpert;
|
|
m_UserID = UserID;
|
|
m_Expiry = Expiry;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| create file to hash |
|
|
//+------------------------------------------------------------------+
|
|
bool License::FileGen(string data)
|
|
{
|
|
string licencePath = LicencePath();
|
|
int handle = FileOpen( licencePath, FILE_WRITE | FILE_BIN | FILE_ANSI );
|
|
if ( handle == INVALID_HANDLE ) {
|
|
PrintFormat( "Could not create licence file %s", licencePath );
|
|
return ( false );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|