示例#1
0
        public async Task <ActionResult <HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes> > > SigninFacialRecognition([FromBody] LoginFacialRequestModel input)
        {
            HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes> response = await _authServices.FacialRecognition(input);

            if (response.Success == true)
            {
                return(Ok(response));
            }

            ClientsApiErrorCodes val = response.Error.ErrorCode;

            switch (val)
            {
            case ClientsApiErrorCodes.NotExistingUser:
                goto NotExistingUserCase;

            case ClientsApiErrorCodes.BiometricAuthenticationFailure:
                goto BiometricAuthenticationFailureCase;

            case ClientsApiErrorCodes.FlaskFaceAuthInternalError:
                goto FlaskInternalErrorCase;
            }

            NotExistingUserCase : return(StatusCode(StatusCodes.Status500InternalServerError, new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.NotExistingUser)));

            BiometricAuthenticationFailureCase : return(StatusCode(StatusCodes.Status500InternalServerError, new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.BiometricAuthenticationFailure)));

            FlaskInternalErrorCase : return(StatusCode(StatusCodes.Status500InternalServerError, new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.FlaskFaceAuthInternalError)));
        }
        public async Task <HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes> > FacialRecognition(LoginFacialRequestModel Input)
        {
            //Check if the hash thats was in headers returns null
            if (_requestValidatorPartsHelper.RetrieveValidateDiscardHash(Input.X_seq))
            {
                List <string> hashValues = _requestValidatorPartsHelper.RetrieveHashValues(Input.X_seq);

                if (hashValues == null)
                {
                    return(new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.Unauthorized));
                }

                string?id = hashValues[0];

                if (id != null)
                {
                    //Do Facial stuff
                    _logger.LogInformation("User logged in.");
                    var existingUser = await _userManager.FindByIdAsync(id);

                    if (existingUser == null)
                    {
                        return(new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.Unauthorized));
                    }

                    var base64Img = Input.Base64Img.Replace("data:image/jpeg;base64,", "");

                    var response = await _flaskFaceAuthServices.IdentifyUser(new FlaskFaceAuthIdentifyUserRequestModel()
                    {
                        Base64Img = base64Img
                    });

                    if (response.Success == false)
                    {
                        return(new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.FlaskFaceAuthInternalError));
                    }

                    if (response.Success == true && response.Data.IsMatch == false)
                    {
                        return(new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.BiometricAuthenticationFailure));
                    }

                    AuthModel userAuth = new AuthModel();
                    userAuth.ID = existingUser.Id.ToString();

                    //its wrong not hours but days 30 default TODO: Change It
                    userAuth.ValidUntil = DateTime.Now.AddMinutes(30);

                    var finalEncrypted = _encrypterDecrypter.EncryptObject <AuthModel>(userAuth);

                    _actionContext.HttpContext.Response.Headers.Add("X-AUTH-DASH", finalEncrypted);

                    var internalRequest = new SuccessfulLoginRespModel()
                    {
                        AuthToken   = finalEncrypted,
                        Id          = existingUser.Id,
                        DateCreated = DateTime.Now,
                        DateExpired = DateTime.Now.AddMinutes(30)
                    };

                    return(new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(internalRequest));
                }
                else
                {
                    return(new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.Unauthorized));
                }
            }
            else
            {
                return(new HttpResponseData <SuccessfulLoginRespModel, ClientsApiErrorCodes>(ClientsApiErrorCodes.UnauthorizedApplication));
            }
        }