public bool LoginUseToken(string token, out LoginTokenDTO loginToken)
        {
            loginToken = new LoginTokenDTO();

            if (string.IsNullOrEmpty(token))
            {
                return(false);
            }

            var decryptedString = string.Empty;

            using (var decrypter = new TripleDESEncryption(appConfig.TripleDESEncryptionKey))
            {
                decryptedString = decrypter.Decrypt(token);
            }

            var paramsFromUrl = StringHelper.SplitString(decryptedString, "&")
                                .Select(p => { var m = p.Split('='); return(new { key = m[0], value = m[1] }); })
                                .ToDictionary(x => x.key, x => x.value);

            //Encode the password user input
            var encodedPassword = SimpleTextEncodeHelper.EncodeText(paramsFromUrl["pwd"]);
            var username        = paramsFromUrl["uid"];
            //Retrieve user information from concierge login table
            var user = conciergeLoginloginRepo.Get(x => x.ConciergeID == username && x.password == encodedPassword);

            if (user != null)
            {
                string arrivalDate, status;
                paramsFromUrl.TryGetValue("arrivaldate", out arrivalDate);
                paramsFromUrl.TryGetValue("status", out status);

                //Set Info
                loginToken.UserName    = user.ConciergeID;
                loginToken.ArrivalDate = arrivalDate;
                loginToken.Status      = status;

                return(true);
            }

            return(false);
        }
        public async Task <IActionResult> SignIn(UserToSignInDTO model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ResponseMessage.Message("Bad request", errors: new { message = ModelState })));
                }

                var user = _userManager.Users.FirstOrDefault(x => x.Email == model.Email);

                if (user == null)
                {
                    return(Unauthorized(ResponseMessage.Message("Unauthorized", errors: new { message = "Invalid credentials" })));
                }

                var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);

                var userRoles = await _userManager.GetRolesAsync(user);

                if (result.Succeeded)
                {
                    LoginTokenDTO loginToken = new LoginTokenDTO();
                    loginToken.UserId = user.Id;
                    loginToken.Token  = JwtTokenCreator.GetToken(user, _configuration, userRoles[0]);
                    return(Ok(ResponseMessage.Message("Success", data: new { loginToken })));
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e.Message);
                return(BadRequest(ResponseMessage.Message("Bad request", errors: new { message = "Data processing error" })));
            }

            return(Unauthorized(ResponseMessage.Message("Unauthorized", errors: new { message = "Invalid credentials" })));
        }
Exemple #3
0
        public async Task <IActionResult> GetToken(string email, string senha,
                                                   [FromServices] UserManager <MilenioRadartonaAPIUser> userManager,
                                                   [FromServices] SignInManager <MilenioRadartonaAPIUser> signInManager,
                                                   [FromServices] SigningConfigurations signingConfigurations,
                                                   [FromServices] TokenConfigurations tokenConfigurations)
        {
            var watch = new Stopwatch();

            watch.Start();

            bool credenciaisValidas = false;

            // Verifica a existência do usuário nas tabelas do
            // ASP.NET Core Identity
            var userIdentity = userManager
                               .FindByNameAsync(email).Result;

            if (userIdentity != null)
            {
                // Efetua o login com base no Id do usuário e sua senha
                var resultadoLogin = signInManager
                                     .CheckPasswordSignInAsync(userIdentity, senha, false)
                                     .Result;
                if (resultadoLogin.Succeeded)
                {
                    // Verifica se o usuário em questão possui
                    // a role Acesso-APIAlturas
                    credenciaisValidas = userManager.IsInRoleAsync(
                        userIdentity, Roles.ROLE_API_RADAR).Result;
                }
            }

            if (credenciaisValidas)
            {
                Chave chave = _ctx.Usuarios.Where(u => u.Email.Equals(email)).FirstOrDefault().Chave;

                if (chave == null || chave.Token == "")
                {
                    ClaimsIdentity identity = new ClaimsIdentity(
                        new GenericIdentity(email, "Login"),
                        new[] {
                        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")),
                        new Claim(JwtRegisteredClaimNames.UniqueName, email)
                    }
                        );

                    DateTime dataCriacao   = DateTime.Now;
                    DateTime dataExpiracao = dataCriacao +
                                             TimeSpan.FromDays(tokenConfigurations.Days);

                    var handler       = new JwtSecurityTokenHandler();
                    var securityToken = handler.CreateToken(new SecurityTokenDescriptor
                    {
                        Issuer             = tokenConfigurations.Issuer,
                        Audience           = tokenConfigurations.Audience,
                        SigningCredentials = signingConfigurations.SigningCredentials,
                        Subject            = identity,
                        NotBefore          = dataCriacao,
                        Expires            = dataExpiracao
                    });

                    var token = handler.WriteToken(securityToken);

                    Chave novaChave = new Chave()
                    {
                        Authenticated = true,
                        Created       = dataCriacao,
                        Expiration    = dataExpiracao,
                        Token         = token,
                        Message       = "OK",
                    };

                    var usuario = _ctx.Usuarios.Where(u => u.Email.Equals(email))
                                  .Include(a => a.Chave)
                                  .FirstOrDefault();

                    if (usuario.Chave == null)
                    {
                        usuario.Chave = novaChave;
                        _ctx.Attach(usuario).State = EntityState.Modified;
                        _ctx.SaveChanges();
                    }

                    if (novaChave.Token != usuario.Chave.Token)
                    {
                        usuario.Chave = novaChave;
                        _ctx.Attach(usuario).State = EntityState.Modified;
                        _ctx.SaveChanges();
                    }

                    chave = novaChave;
                }

                LoginTokenDTO loginToken = new LoginTokenDTO
                {
                    DataCriacao   = chave.Created,
                    DataExpiracao = chave.Expiration,
                    Token         = chave.Token
                };

                watch.Stop();
                var TempoRequisicao = watch.ElapsedMilliseconds;
                await LogRequest(email, "/Login/GetToken", TempoRequisicao);

                return(Ok(loginToken));
            }
            else
            {
                watch.Stop();
                var TempoRequisicao = watch.ElapsedMilliseconds;

                if (email != null)
                {
                    await LogRequest(email, "/Login/GetToken", TempoRequisicao);
                }
                else
                {
                    await LogRequest("", "/Login/GetToken", TempoRequisicao);
                }

                return(StatusCode(401, "Usuario ou senha invalidas"));
            }
        }
Exemple #4
0
        public async Task <object> LoginByJWT([FromBody] LoginTokenDTO model)
        {
            var responseModel = new SumProfileResponseDTO();

            responseModel.Profile       = new ProfileReponse();
            responseModel.ListRole      = new List <ListRole>();
            responseModel.Profile.Email = model.Email;
            if (model.Jwt == null)
            {
                responseModel.ErrorCode = "001";
                responseModel.Message   = "Token không hợp lệ";
            }
            else
            {
                CheckExpireToken response = await GetPrincipalFromExpiredToken(model.Jwt);

                if (response.ErrorCode == "00")
                {
                    //Check exists User
                    var user = await _userManager.FindByNameAsync(response.Email);

                    if (user != null)
                    {
                        var aspNetUserLogin =
                            _repositoryWrapper.AspNetUserProfiles.FirstOrDefault(p => p.UserId == user.Id);
                        responseModel.Profile                 = _mapper.Map <ProfileReponse>(user);
                        responseModel.Profile.FullName        = aspNetUserLogin.FullName;
                        responseModel.Profile.RegType         = aspNetUserLogin.RegType;
                        responseModel.Profile.AvartarFileName = aspNetUserLogin.AvatarUrl ?? "noimage.png";
                        responseModel.Profile.AvartarFullUrl  =
                            _configuration["Cloud_Path"] + $"/user/avatar/original/{aspNetUserLogin.AvatarUrl ?? "noimage.png"}";

                        //List Role
                        var lstRole = await _repositoryWrapper.AspNetUsers.GetListRole(user.Id);

                        responseModel.ListRole = _mapper.Map <List <ListRole> >(lstRole);
                        //ProductBrandId
                        var userProfiler = await _repositoryWrapper.AspNetUserProfiles.FirstOrDefaultAsync(p => p.UserId == user.Id);

                        if (userProfiler != null)
                        {
                            responseModel.ProductBrandId = userProfiler.ProductBrand_ID ?? 0;
                            if (responseModel.ProductBrandId != 0)
                            {
                                var brand = await _repositoryWrapper.Brand.FirstOrDefaultAsync(p => p.ProductBrand_ID == responseModel.ProductBrandId);

                                if (brand != null)
                                {
                                    responseModel.ProductBrandTypeId   = brand.ProductBrandType_ID ?? 1;
                                    responseModel.ProductBrandYearJoin = (int)(DateTime.Now.Year - brand.CreateDate?.Year);
                                    responseModel.ReferralCode         = brand.ReferralCode;
                                }
                            }
                        }
                        else
                        {
                            responseModel.ProductBrandId = 0;
                        }

                        // responseModel.Role = lstRole.Count > 0 ? string.Join(",", lstRole) : "";
                        //var jwt = await GenerateJwtToken(model.Email, user);
                        responseModel.JWT       = model.Jwt;
                        responseModel.UserId    = user.Id;
                        responseModel.ErrorCode = "00";
                        responseModel.Message   = "Đăng nhập thành công";
                        //Total UnRead
                        responseModel.NumberFCMUnread = await _repositoryWrapper.FCMMessage.GetNumberFCMUnread(user.Id);

                        return(responseModel);
                    }
                }
                else if (response.ErrorCode == "003")
                {
                    //Call refresh token
                    var user = await _userManager.FindByNameAsync(model.Email);

                    if (user != null)
                    {
                        return(await RefreshToken(model.Email, user));
                    }
                    else
                    {
                        responseModel.ErrorCode = response.ErrorCode;
                        responseModel.Message   = response.Message;
                    }
                }
                else
                {
                    responseModel.ErrorCode = response.ErrorCode;
                    responseModel.Message   = response.Message;
                }
            }
            return(responseModel);
        }