コード例 #1
0
ファイル: OmbiUserManager.cs プロジェクト: uncleiven/Ombi
        /// <summary>
        /// Sign the user into plex and make sure we can get the authentication token.
        /// <remarks>We do not check if the user is in the owners "friends" since they must have a local user account to get this far</remarks>
        /// </summary>
        /// <param name="user"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        private async Task <bool> CheckPlexPasswordAsync(OmbiUser user, string password)
        {
            var result = await _plexApi.SignIn(new UserRequest { password = password, login = user.UserName });

            if (result.user?.authentication_token != null)
            {
                return(true);
            }
            return(false);
        }
コード例 #2
0
        /// <summary>
        /// Sign the user into plex and make sure we can get the authentication token.
        /// <remarks>We do not check if the user is in the owners "friends" since they must have a local user account to get this far</remarks>
        /// </summary>
        /// <param name="user"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        private async Task <bool> CheckPlexPasswordAsync(OmbiUser user, string password)
        {
            var login  = user.EmailLogin ? user.Email : user.UserName;
            var result = await _plexApi.SignIn(new UserRequest { password = password, login = login });

            if (result.user?.authentication_token != null)
            {
                // Update ombi user with the token
                user.MediaServerToken = result.user?.authentication_token;
                await UpdateAsync(user);

                return(true);
            }
            return(false);
        }
コード例 #3
0
        private async Task UpdatePlexData()
        {
            if (AuthToken == null)
            {
                AuthToken = (await _plexApi.SignIn()).user.authentication_token;
            }

            Libraries       = (await _plexApi.GetLibrarySections(AuthToken)).MediaContainer.Directory;
            LibraryMetadata = new Dictionary <string, Metadata[]>();

            for (int i = 0; i < Libraries.Count; i++)
            {
                LibraryMetadata.Add(Libraries[i].key, (await _plexApi.GetLibrary(AuthToken, Libraries[i].key)).MediaContainer.Metadata);
            }
        }
コード例 #4
0
        public async Task <ValidationContext <UserLoginCommandResult> > Handle(UserLoginCommand request, CancellationToken cancellationToken)
        {
            _logger.LogDebug("Attempting Plex SignIn");

            var result = new ValidationContext <UserLoginCommandResult>();

            PlexRequests.Plex.Models.User plexUser;
            try
            {
                plexUser = await _plexApi.SignIn(request.Username, request.Password);
            }
            catch (PlexRequestException)
            {
                result.AddError("Invalid Plex Credentials", "Unable to login to Plex with the given credentials");
                _logger.LogInformation("Unable to login to Plex with the given credentials");
                return(result);
            }

            _logger.LogDebug("Plex SignIn Successful");
            _logger.LogDebug("Getting PlexRequests User from PlexAccountId");

            var plexRequestsUser = await _userService.GetUserFromPlexId(plexUser.Id);

            if (plexRequestsUser == null || plexRequestsUser.IsDisabled)
            {
                result.AddError("Unrecognised user", "The user is not recognised or has been disabled.");
                _logger.LogInformation($"Successful login from a Plex account that was either not found within our users list or has been disabled [IsDisabled={plexRequestsUser?.IsDisabled}]");
                return(result);
            }

            _logger.LogDebug("Found matching PlexRequests User");

            var refreshToken = _tokenService.CreateRefreshToken();
            var accessToken  = _tokenService.CreateToken(plexRequestsUser);

            plexRequestsUser.LastLoginUtc = DateTime.UtcNow;
            plexRequestsUser.UserRefreshTokens.Add(refreshToken);

            await _unitOfWork.CommitAsync();

            result.Data = new UserLoginCommandResult
            {
                AccessToken  = accessToken,
                RefreshToken = refreshToken.Token
            };

            return(result);
        }
コード例 #5
0
        public async Task <ValidationContext <UserLoginCommandResult> > Handle(AddAdminCommand request, CancellationToken cancellationToken)
        {
            var result = new ValidationContext <UserLoginCommandResult>();

            _logger.LogDebug("Attempting to create first Admin account");

            if (await result.AddErrorIf(HasAdminAlreadyBeenCreated, "Unable to add Plex Admin", "An Admin account has already been created"))
            {
                return(result);
            }

            _logger.LogDebug("No existing Admin account, attempting Plex SignIn");
            var plexUser = await _plexApi.SignIn(request.Username, request.Password);

            if (result.AddErrorIf(() => plexUser == null, "Invalid PlexCredentials", "The Login credentials for Plex were invalid"))
            {
                _logger.LogDebug("Invalid PlexCredentials");
                return(result);
            }

            if (!result.IsSuccessful)
            {
                return(result);
            }

            _logger.LogDebug("Plex SignIn Successful");

            var refreshToken = _tokenService.CreateRefreshToken();

            var adminUser = await AddAdminUser(plexUser, refreshToken);

            await CreateAdminServer(plexUser);

            adminUser.LastLoginUtc = DateTime.UtcNow;

            await _unitOfWork.CommitAsync();

            result.Data = new UserLoginCommandResult
            {
                AccessToken  = _tokenService.CreateToken(adminUser),
                RefreshToken = refreshToken.Token
            };

            return(result);
        }
コード例 #6
0
 private void GivenInvalidPlexCredentialsThrowsException()
 {
     _plexApi.SignIn(Arg.Any <string>(), Arg.Any <string>()).Throws(new PlexRequestException("", "", HttpStatusCode.FailedDependency));
 }
コード例 #7
0
 private void GivenInvalidPlexCredentials()
 {
     _plexApi.SignIn(Arg.Any <string>(), Arg.Any <string>()).ReturnsNull();
 }