Esempio n. 1
0
        private async Task <TblIdentityCredential> ValidatePassword(AuthenticateIdentityQuery request, AuthorizeBy authorizeBy, TblIdentityCredential credential, CancellationToken cancellationToken)
        {
            SHA512 shaM             = new SHA512Managed();
            var    passwordByte     = Encoding.ASCII.GetBytes(request.Password);
            var    hashPasswordByte = shaM.ComputeHash(passwordByte);

            if (authorizeBy == AuthorizeBy.Token)
            {
                return(credential);
            }

            credential = await _dataLayer.TblIdentityCredentials
                         .Include(i => i.IdentityInfo)
                         .FirstOrDefaultAsync(i => i.Id == credential.Id & i.PasswordByte == hashPasswordByte, cancellationToken: cancellationToken);

            return(credential);
        }
Esempio n. 2
0
        public async Task <QueryResponseBO <AuthorizeIdentityContract> > Handle(AuthenticateIdentityQuery request, CancellationToken cancellationToken)
        {
            var credential = await ValidateAuthorization(request, cancellationToken, request.AuthorizeBy);

            if (credential == null)
            {
                return(new()
                {
                    Message = $"Identity does not exist",
                    HttpStatusCode = HttpStatusCode.NotFound
                });
            }

            credential = await ValidatePassword(request, request.AuthorizeBy, credential, cancellationToken);

            if (credential == null)
            {
                return(new()
                {
                    Message = $"Identity Authentication Failed",
                    HttpStatusCode = HttpStatusCode.BadRequest
                });
            }

            var token = await _jwtService.GenerateToken(request.Username, new Guid(credential.Cuid));

            return(new()
            {
                Message = $"Identity Authorized",
                HttpStatusCode = HttpStatusCode.Accepted,
                Response = new()
                {
                    AccessToken = token.AccessToken,
                    RefreshToken = token.RefreshToken,
                    UserAuthId = credential.Id,
                    UserName = credential.UserName
                }
            });
        }
Esempio n. 3
0
        public async Task <QueryResponse <AuthorizeIdentityResponse> > Handle(AuthenticateIdentityQuery request, CancellationToken cancellationToken)
        {
            var response = await IdentityServiceWrapper.AuthenticateCredential(request.Adapt <AuthenticateCredentialRequest>());

            return(response.Adapt <QueryResponse <AuthorizeIdentityResponse> >());
        }
Esempio n. 4
0
        private async Task <TblIdentityCredential> ValidateAuthorization(AuthenticateIdentityQuery request, CancellationToken cancellationToken, AuthorizeBy authorizeBy)
        {
            TblIdentityCredential result;

reAuth:
            switch (authorizeBy)
            {
            case AuthorizeBy.Default:
                var getDefaults = await _dataLayer.TblConfigurations
                                  .AsNoTracking()
                                  .FirstOrDefaultAsync(i => i.ApplicationId == request.RequestServer.ApplicationId & i.Key == "DefaultAuthorizeBy", cancellationToken: cancellationToken);

                authorizeBy = (AuthorizeBy)int.Parse(getDefaults.Value);
                goto reAuth;

            case AuthorizeBy.UsernameEmailPhone:
                result = await _dataLayer.TblIdentityCredentials
                         .AsNoTracking()
                         .FirstOrDefaultAsync(i => i.UserName == request.Username,
                                              cancellationToken: cancellationToken);

                result ??= _dataLayer.TblIdentityContacts
                .AsNoTracking()
                .FirstOrDefault(i => i.Value == request.Username & i.UcentitiesId == 1)?.UserCredential;
                result ??= _dataLayer.TblIdentityContacts
                .FirstOrDefault(i => i.Value == request.Username & i.UcentitiesId == 2)?.UserCredential;
                break;

            case AuthorizeBy.Username:
                result = await _dataLayer.TblIdentityCredentials
                         .AsNoTracking()
                         .FirstOrDefaultAsync(i => i.UserName == request.Username,
                                              cancellationToken: cancellationToken);

                break;

            case AuthorizeBy.Email:
                result = _dataLayer.TblIdentityContacts
                         .AsNoTracking()
                         .FirstOrDefault(i => i.Value == request.Username & i.UcentitiesId == 1)?.UserCredential;
                break;

            case AuthorizeBy.Phone:
                result = _dataLayer.TblIdentityContacts
                         .AsNoTracking()
                         .FirstOrDefault(i => i.Value == request.Username & i.UcentitiesId == 2)?.UserCredential;
                break;

            case AuthorizeBy.Token:
                result = await _dataLayer.TblIdentityCredentials
                         .AsNoTracking()
                         .FirstOrDefaultAsync(i => i.UserName == request.Username,
                                              cancellationToken: cancellationToken);

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(result);
        }
Esempio n. 5
0
        public async Task <JsonResult> Authenticate([FromBody] AuthenticateIdentityQuery request)
        {
            var result = await _mediator.Send(request);

            return(new JsonResult(result));
        }