예제 #1
0
        /// <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)
        {
            var key = prefix + StripUglyBase64(this.GenerateSalt());

            this.VerificationKey     = key;
            this.VerificationPurpose = purpose;
            this.VerificationKeySent = UtcNow;
        }
예제 #4
0
        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;
        }
예제 #5
0
        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);
        }
예제 #6
0
        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;
        }
예제 #7
0
        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);
        }
예제 #8
0
        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;
        }