Beispiel #1
0
        public async Task <ActionResult <ActiveCompanyResult> > ValidateForDepartment([FromBody] SetActiveComapnyInput authInput)
        {
            if (this.ModelState.IsValid)
            {
                if (authInput == null)
                {
                    return(BadRequest());
                }

                var signInResult = await _signInManager.PasswordSignInAsync(authInput.Usr, authInput.Pass, true, lockoutOnFailure : false);

                if (signInResult.Succeeded)
                {
                    if (await _usersService.DoesUserHaveAnyActiveDepartments(authInput.Usr))
                    {
                        var user = await _usersService.GetUserByNameAsync(authInput.Usr);

                        if (await _departmentsService.IsMemberOfDepartmentAsync(authInput.Did, user.Id))
                        {
                            Department department = await _departmentsService.GetDepartmentForUserAsync(authInput.Usr);

                            var result = new ActiveCompanyResult
                            {
                                Eml = user.Email,
                                Uid = user.Id,
                                Dnm = department.Name,
                                Did = department.DepartmentId
                            };

                            if (department.CreatedOn.HasValue)
                            {
                                result.Dcd = (department.CreatedOn.Value - new DateTime(1970, 1, 1).ToLocalTime())
                                             .TotalSeconds.ToString();
                            }
                            else
                            {
                                result.Dcd = new DateTime(1970, 1, 1).ToLocalTime().ToString();
                            }

                            result.Tkn = V3AuthToken.Create(authInput.Usr, authInput.Did);
                            result.Txd = DateTime.UtcNow.AddMonths(Config.SystemBehaviorConfig.APITokenMonthsTTL)
                                         .ToShortDateString();

                            var profile = await _userProfileService.GetProfileByUserIdAsync(user.Id);

                            result.Nme = profile.FullName.AsFirstNameLastName;

                            return(Ok(result));
                        }
                    }
                }

                return(Unauthorized());
            }

            return(BadRequest());
        }
Beispiel #2
0
        public ActiveCompanyResult ValidateForDepartment([FromBody] SetActiveComapnyInput authInput)
        {
            if (this.ModelState.IsValid)
            {
                if (authInput == null)
                {
                    throw HttpStatusCode.BadRequest.AsException();
                }

                // Hack while services is migrated to DotNetCore and can utilize the underlying calls
                var client  = new RestClient(Config.SystemBehaviorConfig.ResgridBaseUrl);
                var request = new RestRequest($"/CoreBridge/ValidateLogIn", Method.POST);
                request.AddJsonBody(authInput);
                var response = client.Execute <Model.Results.ValidateLogInResult>(request);

                if (response.Data == null || !response.Data.Successful)
                {
                    throw HttpStatusCode.Unauthorized.AsException();
                }

                var user = _usersService.GetUserByName(authInput.Usr);

                if (_departmentsService.IsMemberOfDepartment(authInput.Did, user.Id))
                {
                    Department department = _departmentsService.GetDepartmentForUser(authInput.Usr);

                    var result = new ActiveCompanyResult
                    {
                        Eml = user.Email,
                        Uid = user.Id,
                        Dnm = department.Name,
                        Did = department.DepartmentId
                    };

                    if (department.CreatedOn.HasValue)
                    {
                        result.Dcd = (department.CreatedOn.Value - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds.ToString();
                    }
                    else
                    {
                        result.Dcd = new DateTime(1970, 1, 1).ToLocalTime().ToString();
                    }

                    result.Tkn = V3AuthToken.Create(authInput.Usr, authInput.Did);
                    result.Txd = DateTime.UtcNow.AddMonths(Config.SystemBehaviorConfig.APITokenMonthsTTL).ToShortDateString();

                    var profile = _userProfileService.GetProfileByUserId(user.Id);
                    result.Nme = profile.FullName.AsFirstNameLastName;

                    return(result);
                }

                throw HttpStatusCode.Unauthorized.AsException();
            }

            throw HttpStatusCode.BadRequest.AsException();
        }
Beispiel #3
0
        public static async Task <bool> AuthAndSetPrinciple(ICacheProvider cacheProvider, IDepartmentsRepository departmentsRepository, string authTokenString)
        {
            if (string.IsNullOrWhiteSpace(authTokenString))
            {
                return(false);
            }

            var encodedUserPass = authTokenString.Trim();

            var authToken = V3AuthToken.Decode(encodedUserPass);

            if (authToken != null)
            {
                string userId;

                if (Config.SecurityConfig.SystemLoginCredentials.ContainsKey(authToken.UserName))
                {
                    if (Config.SecurityConfig.SystemLoginCredentials[authToken.UserName] != encodedUserPass)
                    {
                        return(false);
                    }

                    authToken.UserId = authToken.UserName;
                }
                else
                {
                    var result = await ValidateUserAndDepartmentByUser(cacheProvider, departmentsRepository, authToken.UserName, authToken.DepartmentId, null);

                    if (!result.IsValid)
                    {
                        return(false);
                    }

                    authToken.UserId = result.UserId;
                }

                //var principal = new ResgridPrincipleV3(authToken);
                //Thread.CurrentPrincipal = principal;
                //if (context != null)
                //{
                //	context.User = new System.Security.Claims.ClaimsPrincipal(principal);
                //}
            }

            return(true);
        }
Beispiel #4
0
        protected override async Task <AuthenticateResult> HandleAuthenticateAsync()
        {
            var endpoint = Context.GetEndpoint();

            if (endpoint?.Metadata?.GetMetadata <IAllowAnonymous>() != null)
            {
                return(AuthenticateResult.NoResult());
            }

            if (!Request.Headers.ContainsKey("Authorization"))
            {
                return(AuthenticateResult.Fail("Missing Authorization Header"));
            }

            try
            {
                var authHeader = AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]);
                var result     = await AuthAndSetPrinciple(_cacheProvider, _departmentRepository, authHeader.Parameter);

                if (!result)
                {
                    return(AuthenticateResult.Fail("Invalid Authorization Header"));
                }

                var authToken = V3AuthToken.Decode(authHeader.Parameter);
                var user      = await _usersService.GetUserByNameAsync(authToken.UserName);

                var principal = await _claimsPrincipalFactory.CreateAsync(user);

                Thread.CurrentPrincipal = principal;
                Context.User            = principal;

                var ticket = new AuthenticationTicket(principal, Scheme.Name);
                return(AuthenticateResult.Success(ticket));
            }
            catch
            {
                return(AuthenticateResult.Fail("Invalid Authorization Header"));
            }
        }