Exemplo n.º 1
0
        public ReturnKey Post([FromBody] Signin signin)
        {
            var rtnKey = new ReturnKey();

            if (signin?.UserName != null && signin.Password != null)
            {
                var salt = (from i in _db.TbSubscriptions
                            where string.Equals(i.Email, signin.UserName, StringComparison.CurrentCultureIgnoreCase)
                            select i.Salt).FirstOrDefault();

                var subscription = (from i in _db.TbSubscriptions
                                    where i.SubscriptionStatusId == 2 && i.Email == signin.UserName && i.Password == Security.EncryptPassword(signin.Password, salt)
                                    select i).FirstOrDefault();

                if (subscription != null)
                {
                    var token = (from i in _db.TbSubscriptionTokens
                                 where i.Email == subscription.Email && i.ExpiresOn > DateTime.Now
                                 select i).FirstOrDefault();
                    if (token == null)
                    {
                        double.TryParse(_configuration["Setting:AuthTokenExpiry"], out var authTokenExpiry);

                        token = new TbSubscriptionTokens
                        {
                            Email     = subscription.Email,
                            AuthToken = Guid.NewGuid().ToString(),
                            IssuedOn  = DateTime.Now,
                            ExpiresOn = DateTime.Now.AddSeconds(authTokenExpiry)
                        };

                        _db.TbSubscriptionTokens.Add(token);
                        _db.SaveChanges();
                    }

                    rtnKey.UID       = subscription.UniqueId.ToString();
                    rtnKey.AuthToken = token.AuthToken;
                    rtnKey.Message   = "success!!!";
                    rtnKey.Role      = subscription.GroupId;
                }
                else
                {
                    rtnKey.Message = _localizer["NotValid"];
                }
            }
            else
            {
                rtnKey.Message = _localizer["NotValid"];
            }
            return(rtnKey);
        }
        public User Authenticate(string username, string password)
        {
            if (username == null || password == null)
            {
                return(null);
            }
            var salt = (from i in _db.TbSubscriptions
                        where string.Equals(i.Email, username, StringComparison.OrdinalIgnoreCase)
                        select i.Salt).FirstOrDefault();

            if (salt == null)
            {
                return(null);
            }
            var subscription = (from i in _db.TbSubscriptions
                                where i.SubscriptionStatusId == (int)UserStatus.SubscriptionStatusActive &&
                                i.Email == username &&
                                i.Password == Security.EncryptPassword(password, salt)
                                select i).FirstOrDefault();

            if (subscription == null)
            {
                return(null);
            }
            var token = (from i in _db.TbSubscriptionTokens
                         where i.Email == subscription.Email && i.ExpiresOn > DateTime.Now
                         select i).FirstOrDefault();

            if (token != null)
            {
                return new User
                       {
                           UniqueId  = subscription.UniqueId,
                           FirstName = subscription.FirstName,
                           LastName  = subscription.LastName,
                           Username  = subscription.Email,
                           Role      = subscription.GroupId,
                           Token     = token.AuthToken
                       }
            }
            ;

            // Generate JWT Token
            double.TryParse(_configuration["Settings:AuthTokenExpiry"], out var authTokenExpiry);
            var tokenHandler    = new JwtSecurityTokenHandler();
            var key             = Encoding.ASCII.GetBytes(_configuration["Settings:Secret"]);
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Name, subscription.UniqueId.ToString())
                }),
                Expires            = DateTime.UtcNow.AddSeconds(authTokenExpiry),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var jwtToken = tokenHandler.CreateToken(tokenDescriptor);

            // Add Token in Database
            var tbSubscriptionTokens = new TbSubscriptionTokens
            {
                AuthToken = tokenHandler.WriteToken(jwtToken),
                Email     = subscription.Email,
                Id        = subscription.UniqueId.ToString(),
                IssuedOn  = DateTime.Now,
                ExpiresOn = DateTime.Now.AddSeconds(authTokenExpiry)
            };

            _db.TbSubscriptionTokens.Add(tbSubscriptionTokens);
            _db.SaveChanges();

            token = new TbSubscriptionTokens()
            {
                AuthToken = tbSubscriptionTokens.AuthToken
            };

            return(new User
            {
                UniqueId = subscription.UniqueId,
                FirstName = subscription.FirstName,
                LastName = subscription.LastName,
                Username = subscription.Email,
                Role = subscription.GroupId,
                Token = token.AuthToken
            });
        }
    }