示例#1
0
        public async Task <SsoResponse> Login([FromBody] LoginPost data)
        {
            try
            {
                Identity.AccessToken      = new AccessToken(data.Token);
                Identity.ServerIdentifier = _serverIdentifier;

                if (!Identity.IsAuthenticated)
                {
                    Identity.AccessTier = await _plexClient.GetAccessTier(_serverIdentifier, Identity.AccessToken);
                }

                if (Identity.AccessTier == AccessTier.Failure)
                {
                    Identity.AccessTier      = AccessTier.NoAccess;
                    Identity.IsAuthenticated = false;
                    return(GetErrorResponse());
                }

                var user = await _plexClient.GetUserInfo(Identity.AccessToken);

                Identity.Email     = user.Email;
                Identity.Username  = user.Username;
                Identity.Thumbnail = user.Thumbnail;

                Identity.IsAuthenticated = true;

                var identity = new ClaimsIdentity(
                    Identity.AsClaims(),
                    CookieAuthenticationDefaults.AuthenticationScheme
                    );

                var authProperties = new AuthenticationProperties
                {
                    AllowRefresh = true,
                    IsPersistent = true
                };

                await HttpContext.SignInAsync(
                    CookieAuthenticationDefaults.AuthenticationScheme,
                    new ClaimsPrincipal(identity),
                    authProperties
                    );

                var response = _authValidator.ValidateAuthenticationStatus(Identity, ServiceName, ServiceUri);
                Response.StatusCode = response.Status;
                return(response);
            }
            catch (Exception e)
            {
                _logger.LogError("Failed to log user in", e);
                Identity.AccessTier      = AccessTier.NoAccess;
                Identity.IsAuthenticated = false;
                return(GetErrorResponse());
            }
        }