/// <summary> /// Validate if verification key is valid, if yes it will load a corresponding <see cref="UserAccount"/> /// </summary> /// <param name="key">Verification key</param> /// <param name="purpose"><see cref="VerificationKeyPurpose"/></param> /// <returns></returns> public async Task <TokenVerificationResult> HandleVerificationKey( string key, VerificationKeyPurpose purpose) { var result = new TokenVerificationResult(); var userAccount = await _userAccountStore.LoadByVerificationKeyAsync(key); if (userAccount == null) { return(result); } result.UserAccount = userAccount; result.PurposeValid = userAccount.VerificationPurpose == (int)purpose; if (userAccount.VerificationKeySentAt.HasValue) { var validTill = userAccount.VerificationKeySentAt.Value + TimeSpan.FromMinutes(_applicationOptions.VerificationKeyLifetime); var now = DateTime.Now; result.TokenExpired = now > validTill; } return(result); }
internal void SetVerificationKey(VerificationKeyPurpose purpose, string prefix = null) { var key = prefix + StripUglyBase64(this.GenerateSalt()); this.VerificationKey = key; this.VerificationPurpose = purpose; this.VerificationKeySent = UtcNow; }
internal void SetVerificationKey(VerificationKeyPurpose purpose, string prefix = null, bool generateSalt = true) { var key = prefix; if (generateSalt) { key += StripUglyBase64(this.GenerateSalt()); } this.VerificationKey = key; this.VerificationPurpose = purpose; this.VerificationKeySent = UtcNow; }
protected virtual string SetVerificationKey(UserAccount account, VerificationKeyPurpose purpose, string key = null, string state = null) { if (key == null) { key = StripUglyBase64(_crypto.GenerateSalt()); } account.VerificationKey = _crypto.Hash(key); account.VerificationPurpose = purpose; account.VerificationKeySent = UtcNow; account.VerificationStorage = state; return(key); }
public void SetVerification( UserAccount userAccount, VerificationKeyPurpose purpose, string storage = null, DateTime?sentAt = null) { userAccount.VerificationKey = crypto .Hash(crypto.GenerateSalt()) .StripUglyBase64() .ToLowerInvariant(); userAccount.VerificationPurpose = (int)purpose; userAccount.VerificationKeySentAt = sentAt ?? DateTime.UtcNow; userAccount.VerificationStorage = storage; }
protected virtual bool IsVerificationPurposeValid(UserAccount account, VerificationKeyPurpose purpose) { if (account.VerificationPurpose != purpose) { _logger.LogWarning(GetLogMessage("failed - verification purpose invalid")); return(false); } if (IsVerificationKeyStale(account)) { _logger.LogWarning(GetLogMessage("failed - verification key stale")); return(false); } _logger.LogTrace(GetLogMessage(" success - verification purpose valid")); return(true); }
protected virtual bool IsVerificationKeyValid(UserAccount account, VerificationKeyPurpose purpose, string key) { if (!IsVerificationPurposeValid(account, purpose)) { return(false); } var result = _crypto.VerifyHash(key, account.VerificationKey); if (!result) { _logger.LogWarning(GetLogMessage("failed -verification key doesn\'t match")); return(false); } _logger.LogTrace(GetLogMessage("Success -- verification key valid")); return(true); }
public static void SetVerification(this UserAccount userAccount, string key, VerificationKeyPurpose purpose, string storage = null, DateTime?sentAt = null) { if (userAccount == null) { throw new ArgumentException(nameof(userAccount)); } if (key == null) { throw new ArgumentException(nameof(key)); } userAccount.VerificationKey = key; userAccount.VerificationPurpose = (int)purpose; userAccount.VerificationKeySentAt = sentAt ?? DateTime.UtcNow; userAccount.VerificationStorage = storage; }