public string ActivateLicense(string token, string payload) { ActivationResult result = new ActivationResult(); KeyPair keyPair = _keyPairService.GetClientKeyPair(); Debug.WriteLine(keyPair.PrivateKey); Debug.WriteLine(keyPair.PublicKey); if (!_controlService.ValidateClientToken(token)) { result.WasOperationSuccessful = false; result.WasRequestValid = false; result.ActivationSuccessful = false; return(SerializeAndEncryptResult(result, keyPair)); } result.WasRequestValid = true; result.ServiceId = _masterService.GetMasterServiceData().ServiceId; string decryptedPayload = _asymmetricEncryptionProvider.DecryptPublic(payload, keyPair); LicenseActivationPayload activationPayload = _serializationProvider.Deserialize <LicenseActivationPayload>(decryptedPayload); if (!_keyService.AuthorizeLicenseForActivation(activationPayload.LicenseKey, activationPayload.ServiceLicense, activationPayload.HardwareFingerprint)) { result.WasOperationSuccessful = false; result.ActivationSuccessful = false; } else { Guid?activiationtoken = _keyService.ActivateLicenseKey(activationPayload.LicenseKey, activationPayload.Token, activationPayload.ServiceLicense, activationPayload.HardwareFingerprint); if (activiationtoken.HasValue) { _activationLogService.LogActiviation(activationPayload.LicenseKey, ActivationResults.Success, GetIpAddress()); result.ActivationToken = activiationtoken; result.WasOperationSuccessful = true; result.ActivationSuccessful = true; } else { _activationLogService.LogActiviation(activationPayload.LicenseKey, ActivationResults.ActivationFailure, GetIpAddress()); result.WasOperationSuccessful = false; result.ActivationSuccessful = false; } } return(SerializeAndEncryptResult(result, keyPair)); }
/// <summary> /// Authorizes a license key to check to see if it can be activated. If not, logs the failure reason and /// returns false. /// </summary> /// <param name="licenseKey"></param> /// <param name="licenseBase"></param> /// <param name="hardwareFingerprint"></param> /// <returns></returns> public bool AuthorizeLicenseForActivation(string licenseKey, ServiceLicense licenseBase, string hardwareFingerprint) { KeyData keyData = _licenseKeyService.GetLicenseKeyData(licenseKey, licenseBase, true); // Step 1: Validate the physical key bool keyValid = _licenseKeyService.ValidateLicenseKey(licenseKey, licenseBase, true); if (!keyValid) { _activationLogService.LogActiviation(licenseKey, ActivationResults.ValidationFailure, null); return(false); } SecureString hashedLicenseKey = SecureStringHelper.StringToSecureString(_hashingProvider.ComputeHash(licenseKey, Resources.KeyHashAlgo)); hashedLicenseKey.MakeReadOnly(); // Step 2: Validate the key against the service if (!DoesKeyExistForLicenseSet(SecureStringHelper.SecureStringToString(hashedLicenseKey), keyData.LicenseSetId)) { _activationLogService.LogActiviation(licenseKey, ActivationResults.UnknownKeyFailure, null); return(false); } // Step 3: Is this key used already if (!IsKeyAvialable(SecureStringHelper.SecureStringToString(hashedLicenseKey), keyData.LicenseSetId, hardwareFingerprint)) { _activationLogService.LogActiviation(licenseKey, ActivationResults.TooManyFailure, null); return(false); } return(true); }