Ejemplo n.º 1
0
        public async Task <IActionResult> Issue([FromBody] TokenIssueRequest request)
        {
            var token = await _issuer.Issue(request);

            if (token != null)
            {
                return(Ok(token));
            }
            return(StatusCode(401));
        }
        public async Task <AuthorizedUser> AuthorizeWithLoginAndPasswordAsync(TokenIssueRequest issueRequest)
        {
            var user = await _serveUsers.GetUserByName(issueRequest.Username);

            if (user != null && _checkPasswordService.IsPasswordValidForUser(user, issueRequest.Password))
            {
                var result = new AuthorizedUser(user);
                return(result);
            }
            return(null);
        }
        private async Task <IdentityUser> FindValideUserAsync(TokenIssueRequest request)
        {
            var user = await FindWithRefreshToken(request.RefreshToken);

            if (user == null && request.Username != null)
            {
                user = await FindWithUsernamePassword(request.Username, request.Password);
            }

            return(user);
        }
        public async Task <Token> Issue(TokenIssueRequest request)
        {
            var user = await FindValideUserAsync(request);

            if (user != null)
            {
                var roles = await _userManager.GetRolesAsync(user);

                var token = _tokenBuilder.Build(user, roles);

                await UpsertRefreshTokenAsync(token);

                return(token);
            }
            return(null);
        }
        public async Task AuthorizeWithLoginAndPasswordAsync_noUser_null()
        {
            // setup
            _ifPass = false;
            _user   = null;
            var request = new TokenIssueRequest()
            {
                Username = "******", Password = "******"
            };

            // act
            var result = await _authorizeService.AuthorizeWithLoginAndPasswordAsync(request);

            // verify
            Assert.Null(result);
        }
        public async Task AuthorizeWithLoginAndPasswordAsync_valid_authorizedUser()
        {
            // setup
            _ifPass = true;
            _user   = new User {
                Name = _username
            };
            var request = new TokenIssueRequest()
            {
                Username = _username, Password = "******"
            };

            // act
            var result = await _authorizeService.AuthorizeWithLoginAndPasswordAsync(request);

            // verify
            result.Should().NotBeNull();
            result.Name.Should().Be(_username);
        }
        public async Task <IActionResult> PostTokenRequest([FromBody] TokenIssueRequest request)
        {
            try
            {
                var user = await _authService.AuthorizeWithLoginAndPasswordAsync(request);

                if (user != null)
                {
                    return(AuthTokenResponse(user));
                }

                return(NotFound("Błędny login lub hasło"));
            }
            catch (Exception ex)
            {
                if (ex is InvalidOperationException && ex.InnerException is TimeoutException)
                {
                    _logger.LogError("TimeoutException when trying to connect with DB");
                    return(StatusCode(500, "Serwer nie otrzymał odpowiedzi z bazy danych, skontaktuj się z administratorem"));
                }
                return(BadRequest("Hasło jest nieprawidłowe, skontaktuj się z administratorem"));
            }
        }
        public async Task <TokenIssueResponse> IssueToken(TokenIssueRequest request)
        {
            // Login to CaaS
            IAccount account = await _computeClient.LoginAsync(
                new NetworkCredential(
                    request.Message.Credentials.UserName,
                    request.Message.Credentials.Password));

            // Get available clouds
            IEnumerable <DatacenterWithMaintenanceStatusType> dataCenters =
                await _computeClient.GetDataCentersWithMaintenanceStatuses();

            string loginToken = request.Message.Credentials.UserName + ":" + request.Message.Credentials.Password;

            byte[] buffer            = new byte[loginToken.Length];
            string loginTokenEncoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(loginToken));

            List <Endpoint> endPoints = new List <Endpoint>();

            endPoints.Add(new Endpoint()
            {
                Url         = ConfigurationHelpers.GetTenantUrl(Request.RequestUri.Host, request.Message.TenantName),
                Id          = "AU1",                // TODO: Map to cloud id?
                InternalURL = ConfigurationHelpers.GetTenantUrl(Request.RequestUri.Host, request.Message.TenantName),
                PublicURL   = ConfigurationHelpers.GetTenantUrl(Request.RequestUri.Host, request.Message.TenantName),
                Region      = "RegionOne"
            });
            foreach (var dataCenter in dataCenters)
            {
                endPoints.Add(new Endpoint()
                {
                    Url         = ConfigurationHelpers.GetTenantUrl(Request.RequestUri.Host, request.Message.TenantName),
                    Id          = dataCenter.location,            // TODO: Map to cloud id?
                    InternalURL = ConfigurationHelpers.GetTenantUrl(Request.RequestUri.Host, request.Message.TenantName),
                    PublicURL   = ConfigurationHelpers.GetTenantUrl(Request.RequestUri.Host, request.Message.TenantName),
                    Region      = "Dimension Data " + dataCenter.displayName
                });
            }

            TokenIssueResponse response = new TokenIssueResponse()
            {
                AccessToken = new AccessToken()
                {
                    Token   = new Token(request.Message.TenantName, request.Message.TenantName, loginTokenEncoded),
                    Catalog = new ServiceCatalogEntry[]
                    {
                        new ServiceCatalogEntry()
                        {
                            Endpoints      = endPoints.ToArray(),
                            EndpointsLinks = new string[]
                            {
                                ConfigurationHelpers.GetTenantUrl(Request.RequestUri.Host, request.Message.TenantName)
                            },
                            Name = "nova",
                            Type = EndpointType.compute
                        },
                        new ServiceCatalogEntry()
                        {
                            Endpoints      = endPoints.ToArray(),
                            EndpointsLinks = new string[]
                            {
                                ConfigurationHelpers.GetTenantUrl(Request.RequestUri.Host, request.Message.TenantName)
                            },
                            Name = "keystone",
                            Type = EndpointType.identity
                        }
                    },
                    User = new User()
                    {
                        Id         = Guid.NewGuid().ToString(),
                        Name       = account.FullName,
                        Roles      = new User.Role[] { },
                        RolesLinks = new string[] {},
                        UserName   = request.Message.Credentials.UserName
                    }
                }
            };

            return(response);
        }