예제 #1
0
        private bool CheckIfUserIsInPlexFriends(string username, string authToken)
        {
            var users    = PlexApi.GetUsers(authToken);
            var allUsers = users?.User?.Where(x => !string.IsNullOrEmpty(x.Title));

            return(allUsers != null && allUsers.Any(x => x.Title.Equals(username, StringComparison.CurrentCultureIgnoreCase)));
        }
예제 #2
0
        private string GetUserIdIsInPlexFriends(string username, string authToken)
        {
            var users    = PlexApi.GetUsers(authToken);
            var allUsers = users?.User?.Where(x => !string.IsNullOrEmpty(x.Title));

            return(allUsers?.Where(x => x.Title.Equals(username, StringComparison.CurrentCultureIgnoreCase)).Select(x => x.Id).FirstOrDefault());
        }
예제 #3
0
        public async Task <PlexLibrariesLiteResponse> GetPlexLibraries(string machineId)
        {
            try
            {
                var s = await PlexSettings.GetSettingsAsync();

                var settings = s.Servers.FirstOrDefault(x => x.MachineIdentifier == machineId);
                var libs     = await PlexApi.GetLibrariesForMachineId(settings.PlexAuthToken, machineId);

                return(new PlexLibrariesLiteResponse
                {
                    Successful = true,
                    Data = libs.Server.Section
                });
            }
            catch (Exception e)
            {
                _log.LogWarning(e, "Error thrown when attempting to obtain the plex libs");

                var message = e.InnerException != null ? $"{e.Message} - {e.InnerException.Message}" : e.Message;
                return(new PlexLibrariesLiteResponse
                {
                    Successful = false,
                    Message = message
                });
            }
        }
예제 #4
0
        private Response RequestAuthToken()
        {
            var user = this.Bind <PlexAuth>();

            if (string.IsNullOrEmpty(user.username) || string.IsNullOrEmpty(user.password))
            {
                return(Response.AsJson(new { Result = false, Message = "Please provide a valid username and password" }));
            }

            var model = PlexApi.SignIn(user.username, user.password);

            if (model?.user == null)
            {
                return(Response.AsJson(new { Result = false, Message = "Incorrect username or password!" }));
            }

            var oldSettings = AuthService.GetSettings();

            if (oldSettings != null)
            {
                oldSettings.PlexAuthToken = model.user.authentication_token;
                AuthService.SaveSettings(oldSettings);
            }
            else
            {
                var newModel = new AuthenticationSettings
                {
                    PlexAuthToken = model.user.authentication_token
                };
                AuthService.SaveSettings(newModel);
            }

            return(Response.AsJson(new { Result = true, AuthToken = model.user.authentication_token }));
        }
예제 #5
0
        private Response GetUsers()
        {
            var settings = AuthService.GetSettings();

            var token = settings?.PlexAuthToken;

            if (token == null)
            {
                return(Response.AsJson(new { Result = true, Users = string.Empty }));
            }

            try {
                var users = PlexApi.GetUsers(token);
                if (users == null)
                {
                    return(Response.AsJson(string.Empty));
                }
                if (users.User == null || users.User?.Length == 0)
                {
                    return(Response.AsJson(string.Empty));
                }

                var usernames = users.User.Select(x => x.Title);
                return(Response.AsJson(new { Result = true, Users = usernames }));
            } catch (Exception ex) {
                Log.Error(ex);
                if (ex is WebException || ex is ApiRequestException)
                {
                    return(Response.AsJson(new { Result = false, Message = "Could not load the user list! We have connectivity problems connecting to Plex, Please ensure we can access Plex.Tv, The error has been logged." }));
                }

                return(Response.AsJson(new { Result = false, Message = ex.Message }));
            }
        }
        private Response GetUsers()
        {
            var settings = AuthService.GetSettings();

            var token = settings?.PlexAuthToken;

            if (token == null)
            {
                return(Response.AsJson(string.Empty));
            }

            var users = PlexApi.GetUsers(token);

            if (users == null)
            {
                return(Response.AsJson(string.Empty));
            }
            if (users.User == null || users.User?.Length == 0)
            {
                return(Response.AsJson(string.Empty));
            }

            var usernames = users.User.Select(x => x.Username);

            return(Response.AsJson(usernames));
        }
        private Response PlexTest()
        {
            var plexSettings = this.Bind<PlexSettings>();
            var valid = this.Validate(plexSettings);
            if (!valid.IsValid)
            {
                return Response.AsJson(valid.SendJsonError());
            }
            var settings = AuthSettings.GetSettings();
            if (settings?.PlexAuthToken == null)
            {
                return Response.AsJson(new JsonResponseModel { Result = false, Message = "Plex is not setup yet, you need to update your Authentication settings" });
            }
            try
            {
                var status = PlexApi.GetStatus(settings.PlexAuthToken, plexSettings.FullUri);
                return status != null
               ? Response.AsJson(new JsonResponseModel { Result = true, Message = "Connected to Plex successfully!" })
               : Response.AsJson(new JsonResponseModel { Result = false, Message = "Could not connect to Plex, please check your settings." });

            }
			catch (Exception e) // Exceptions are expected, if we cannot connect so we will just log and swallow them.
            {
                Log.Warn("Exception thrown when attempting to get Plex's status: ");
                Log.Warn(e);
                var message = $"Could not connect to Plex, please check your settings. <strong>Exception Message:</strong> {e.Message}";
                if (e.InnerException != null)
                {
                    message = $"Could not connect to Plex, please check your settings. <strong>Exception Message:</strong> {e.InnerException.Message}";
                }
                return Response.AsJson(new JsonResponseModel { Result = false, Message = message });
            }
        }
        private Response PlexAuth()
        {
            var user = this.Bind <PlexAuth>();

            if (string.IsNullOrEmpty(user.username) || string.IsNullOrEmpty(user.password))
            {
                return(Response.AsJson(new JsonResponseModel {
                    Result = false, Message = "Please provide a valid username and password"
                }));
            }

            var model = PlexApi.SignIn(user.username, user.password);

            if (model?.user == null)
            {
                return(Response.AsJson(new JsonResponseModel {
                    Result = false, Message = "Incorrect username or password!"
                }));
            }

            // Set the auth token in the session so we can use it in the next form
            Session[SessionKeys.UserWizardPlexAuth] = model.user.authentication_token;

            var servers     = PlexApi.GetServer(model.user.authentication_token);
            var firstServer = servers.Server.FirstOrDefault();

            return(Response.AsJson(new { Result = true, firstServer?.Port, Ip = firstServer?.LocalAddresses, firstServer?.Scheme }));
        }
예제 #9
0
        private async Task <Response> SavePlex()
        {
            var plexSettings = this.Bind <PlexSettings>();
            var valid        = this.Validate(plexSettings);

            if (!valid.IsValid)
            {
                return(Response.AsJson(valid.SendJsonError()));
            }

            //Lookup identifier
            var server = PlexApi.GetServer(plexSettings.PlexAuthToken);

            plexSettings.MachineIdentifier = server.Server.FirstOrDefault(x => x.AccessToken == plexSettings.PlexAuthToken)?.MachineIdentifier;

            var result = await PlexService.SaveSettingsAsync(plexSettings);

            return(Response.AsJson(result
                ? new JsonResponseModel {
                Result = true, Message = "Successfully Updated the Settings for Plex!"
            }
                : new JsonResponseModel {
                Result = false, Message = "Could not update the settings, take a look at the logs."
            }));
        }
예제 #10
0
        public async Task NotifyUsers(IEnumerable <RequestedModel> modelChanged, string apiKey, NotificationType type)
        {
            try
            {
                var plexUser    = PlexApi.GetUsers(apiKey);
                var userAccount = PlexApi.GetAccount(apiKey);

                var adminUsername = userAccount.Username ?? string.Empty;

                var users = UserHelper.GetUsersWithFeature(Features.RequestAddedNotification).ToList();
                Log.Debug("Notifying Users Count {0}", users.Count);
                foreach (var model in modelChanged)
                {
                    var selectedUsers = new List <string>();

                    foreach (var u in users)
                    {
                        var requestUser = model.RequestedUsers.FirstOrDefault(
                            x => x.Equals(u.Username, StringComparison.CurrentCultureIgnoreCase) || x.Equals(u.UserAlias, StringComparison.CurrentCultureIgnoreCase));
                        if (string.IsNullOrEmpty(requestUser))
                        {
                            continue;
                        }

                        selectedUsers.Add(requestUser);
                    }

                    //var selectedUsers = users.Select(x => x.Username).Intersect(model.RequestedUsers, StringComparer.CurrentCultureIgnoreCase);
                    foreach (var user in selectedUsers)
                    {
                        Log.Info("Notifying user {0}", user);
                        if (user.Equals(adminUsername, StringComparison.CurrentCultureIgnoreCase))
                        {
                            Log.Info("This user is the Plex server owner");
                            await PublishUserNotification(userAccount.Username, userAccount.Email, model.Title, model.PosterPath, type);

                            return;
                        }

                        var email = plexUser.User.FirstOrDefault(x => x.Username.Equals(user, StringComparison.CurrentCultureIgnoreCase));
                        if (string.IsNullOrEmpty(email?.Email))
                        {
                            Log.Info("There is no email address for this Plex user, cannot send notification");
                            // We do not have a plex user that requested this!
                            continue;
                        }

                        Log.Info("Sending notification to: {0} at: {1}, for title: {2}", email.Username, email.Email, model.Title);
                        await PublishUserNotification(email.Username, email.Email, model.Title, model.PosterPath, type);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
예제 #11
0
        public async Task <PlexAuthentication> SignIn([FromBody] UserRequest request)
        {
            try
            {
                // Do we already have settings?
                _log.LogDebug("OK, signing into Plex");
                var settings = await PlexSettings.GetSettingsAsync();

                if (!settings.Servers?.Any() ?? false)
                {
                    return(null);
                }

                _log.LogDebug("This is our first time, good to go!");

                var result = await PlexApi.SignIn(request);

                _log.LogDebug("Attempting to sign in to Plex.Tv");
                if (!string.IsNullOrEmpty(result.user?.authentication_token))
                {
                    _log.LogDebug("Sign in successful");
                    _log.LogDebug("Getting servers");
                    var server = await PlexApi.GetServer(result.user.authentication_token);

                    var servers = server.Server.FirstOrDefault();
                    if (servers == null)
                    {
                        _log.LogWarning("Looks like we can't find any Plex Servers");
                    }
                    _log.LogDebug("Adding first server");

                    settings.Enable  = true;
                    settings.Servers = new List <PlexServers> {
                        new PlexServers
                        {
                            PlexAuthToken     = result.user.authentication_token,
                            Id                = new Random().Next(),
                            Ip                = servers?.LocalAddresses?.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries)?.FirstOrDefault() ?? string.Empty,
                            MachineIdentifier = servers?.MachineIdentifier ?? string.Empty,
                            Port              = int.Parse(servers?.Port ?? "0"),
                            Ssl               = (servers?.Scheme ?? "http") != "http",
                            Name              = "Server 1",
                        }
                    };

                    await PlexSettings.SaveSettingsAsync(settings);
                }

                _log.LogDebug("Finished");
                return(result);
            }
            catch (Exception e)
            {
                _log.LogCritical(e, "Error when trying to sign into Plex.tv");
                throw;
            }
        }
예제 #12
0
        private bool CheckIfUserIsOwner(string authToken, string userName)
        {
            var userAccount = PlexApi.GetAccount(authToken);

            if (userAccount == null)
            {
                return(false);
            }
            return(userAccount.Username != null && userAccount.Username.Equals(userName, StringComparison.CurrentCultureIgnoreCase));
        }
예제 #13
0
        private string GetOwnerId(string authToken, string userName)
        {
            var userAccount = PlexApi.GetAccount(authToken);

            if (userAccount == null)
            {
                return(string.Empty);
            }
            return(userAccount.Id);
        }
예제 #14
0
        private async Task <Response> LoadUsers()
        {
            var localUsers = await UserMapper.GetUsersAsync();

            var plexDbUsers = await PlexUsersRepository.GetAllAsync();

            var model = new List <UserManagementUsersViewModel>();

            var userLogins = UserLoginsRepo.GetAll().ToList();

            foreach (var user in localUsers)
            {
                var userDb = userLogins.FirstOrDefault(x => x.UserId == user.UserGuid);
                model.Add(MapLocalUser(user, userDb?.LastLoggedIn ?? DateTime.MinValue));
            }

            var plexSettings = await PlexSettings.GetSettingsAsync();

            if (!string.IsNullOrEmpty(plexSettings.PlexAuthToken))
            {
                //Get Plex Users
                var plexUsers = PlexApi.GetUsers(plexSettings.PlexAuthToken);
                if (plexUsers != null && plexUsers.User != null)
                {
                    foreach (var u in plexUsers.User)
                    {
                        var dbUser = plexDbUsers.FirstOrDefault(x => x.PlexUserId == u.Id);
                        var userDb = userLogins.FirstOrDefault(x => x.UserId == u.Id);

                        // We don't have the user in the database yet
                        if (dbUser == null)
                        {
                            model.Add(MapPlexUser(u, null, userDb?.LastLoggedIn ?? DateTime.MinValue));
                        }
                        else
                        {
                            // The Plex User is in the database
                            model.Add(MapPlexUser(u, dbUser, userDb?.LastLoggedIn ?? DateTime.MinValue));
                        }
                    }
                }

                // Also get the server admin
                var account = PlexApi.GetAccount(plexSettings.PlexAuthToken);
                if (account != null)
                {
                    var dbUser = plexDbUsers.FirstOrDefault(x => x.PlexUserId == account.Id);
                    var userDb = userLogins.FirstOrDefault(x => x.UserId == account.Id);
                    model.Add(MapPlexAdmin(account, dbUser, userDb?.LastLoggedIn ?? DateTime.MinValue));
                }
            }
            return(Response.AsJson(model));
        }
예제 #15
0
        public async Task <bool> Plex([FromBody] PlexServers settings)
        {
            try
            {
                var result = await PlexApi.GetStatus(settings.PlexAuthToken, settings.FullUri);

                return(result?.MediaContainer?.version != null);
            }
            catch (Exception e)
            {
                Log.LogError(LoggingEvents.Api, e, "Could not test Plex");
                return(false);
            }
        }
예제 #16
0
        /// <summary>
        /// Gets all the library sections.
        /// If the user has specified only certain libraries then we will only look for those
        /// If they have not set the settings then we will monitor them all
        /// </summary>
        /// <param name="plexSettings">The plex settings.</param>
        /// <param name="recentlyAddedSearch"></param>
        /// <returns></returns>
        private async Task <List <Mediacontainer> > GetAllContent(PlexServers plexSettings, bool recentlyAddedSearch)
        {
            var sections = await PlexApi.GetLibrarySections(plexSettings.PlexAuthToken, plexSettings.FullUri);

            var libs = new List <Mediacontainer>();

            if (sections != null)
            {
                foreach (var dir in sections.MediaContainer.Directory ?? new List <Directory>())
                {
                    if (plexSettings.PlexSelectedLibraries.Any())
                    {
                        if (plexSettings.PlexSelectedLibraries.Any(x => x.Enabled))
                        {
                            // Only get the enabled libs
                            var keys = plexSettings.PlexSelectedLibraries.Where(x => x.Enabled)
                                       .Select(x => x.Key.ToString()).ToList();
                            if (!keys.Contains(dir.key))
                            {
                                Logger.LogDebug("Lib {0} is not monitored, so skipping", dir.key);
                                // We are not monitoring this lib
                                continue;
                            }
                        }
                    }

                    if (recentlyAddedSearch)
                    {
                        var container = await PlexApi.GetRecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri,
                                                                       dir.key);

                        if (container != null)
                        {
                            libs.Add(container.MediaContainer);
                        }
                    }
                    else
                    {
                        var lib = await PlexApi.GetLibrary(plexSettings.PlexAuthToken, plexSettings.FullUri, dir.key);

                        if (lib != null)
                        {
                            libs.Add(lib.MediaContainer);
                        }
                    }
                }
            }

            return(libs);
        }
        private async Task<Response> LoadUsers()
        {
            var localUsers = await UserMapper.GetUsersAsync();
            var model = new List<UserManagementUsersViewModel>();
            foreach (var user in localUsers)
            {
                var claims = ByteConverterHelper.ReturnObject<string[]>(user.Claims);
                var claimsString = string.Join(", ", claims);

                var userProps = ByteConverterHelper.ReturnObject<UserProperties>(user.UserProperties);

                model.Add(new UserManagementUsersViewModel
                {
                    Id = user.UserGuid,
                    Claims = claimsString,
                    Username = user.UserName,
                    Type = UserType.LocalUser,
                    EmailAddress = userProps.EmailAddress,
                    ClaimsArray = claims
                });
            }

            var plexSettings = await PlexSettings.GetSettingsAsync();
            if (!string.IsNullOrEmpty(plexSettings.PlexAuthToken))
            {
                //Get Plex Users
                var plexUsers = PlexApi.GetUsers(plexSettings.PlexAuthToken);

                foreach (var u in plexUsers.User)
                {

                    model.Add(new UserManagementUsersViewModel
                    {
                        Username = u.Username,
                        Type = UserType.PlexUser,
                        Id = u.Id,
                        Claims = "Requestor",
                        EmailAddress = u.Email,
                        PlexInfo = new UserManagementPlexInformation
                        {
                            Thumb = u.Thumb
                        }
                    });
                }
            }
            return Response.AsJson(model);
        }
예제 #18
0
        public async Task CheckPassword_PlexUser_UserNameLogin_InvalidPassword()
        {
            var user = new OmbiUser
            {
                UserType   = UserType.PlexUser,
                EmailLogin = false,
                Email      = "*****@*****.**",
                UserName   = "******"
            };

            PlexApi.Setup(x => x.SignIn(It.IsAny <UserRequest>()))
            .ReturnsAsync(new PlexAuthentication());
            var result = await _um.CheckPasswordAsync(user, "pass");

            Assert.That(result, Is.False);
            PlexApi.Verify(x => x.SignIn(It.Is <UserRequest>(c => c.login == "heyhey")), Times.Once);
        }
예제 #19
0
        private async Task <Response> PlexDetails(string id)
        {
            var plexSettings = await PlexSettings.GetSettingsAsync();

            if (!string.IsNullOrEmpty(plexSettings.PlexAuthToken))
            {
                //Get Plex Users
                var plexUsers = PlexApi.GetUsers(plexSettings.PlexAuthToken);

                var selectedUser = plexUsers.User?.FirstOrDefault(x => x.Id.ToString() == id);
                if (selectedUser != null)
                {
                    return(Response.AsJson(selectedUser));
                }
            }

            return(Nancy.Response.NoBody);
        }
예제 #20
0
        private async Task <Response> CheckStatus()
        {
            var plexSettings = await PlexSettings.GetSettingsAsync();

            if (string.IsNullOrEmpty(plexSettings.PlexAuthToken) || string.IsNullOrEmpty(plexSettings.Ip))
            {
                return(Response.AsJson(false));
            }
            try
            {
                var status = PlexApi.GetStatus(plexSettings.PlexAuthToken, plexSettings.FullUri);
                return(Response.AsJson(status != null));
            }
            catch (Exception)
            {
                return(Response.AsJson(false));
            }
        }
        private void NotifyUsers(IEnumerable <RequestedModel> modelChanged, string apiKey)
        {
            try
            {
                var plexUser    = PlexApi.GetUsers(apiKey);
                var userAccount = PlexApi.GetAccount(apiKey);

                var adminUsername = userAccount.Username ?? string.Empty;

                var users = UserNotifyRepo.GetAll().ToList();
                Log.Debug("Notifying Users Count {0}", users.Count);
                foreach (var model in modelChanged)
                {
                    var selectedUsers = users.Select(x => x.Username).Intersect(model.RequestedUsers);
                    Log.Debug("Selected Users {0}", selectedUsers.DumpJson());
                    foreach (var user in selectedUsers)
                    {
                        Log.Info("Notifying user {0}", user);
                        if (user == adminUsername)
                        {
                            Log.Info("This user is the Plex server owner");
                            PublishUserNotification(userAccount.Username, userAccount.Email, model.Title);
                            return;
                        }

                        var email = plexUser.User.FirstOrDefault(x => x.Username == user);
                        if (email == null)
                        {
                            Log.Info("There is no email address for this Plex user, cannot send notification");
                            // We do not have a plex user that requested this!
                            continue;
                        }

                        Log.Info("Sending notification to: {0} at: {1}, for title: {2}", email.Username, email.Email, model.Title);
                        PublishUserNotification(email.Username, email.Email, model.Title);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
예제 #22
0
        private async Task <Response> Plex()
        {
            var form  = this.Bind <PlexSettings>();
            var valid = this.Validate(form);

            if (!valid.IsValid)
            {
                return(Response.AsJson(valid.SendJsonError()));
            }
            form.PlexAuthToken = Session[SessionKeys.UserWizardPlexAuth].ToString();
            // Set the auth token from the previous form

            // Get the machine ID from the settings (This could have changed)
            try
            {
                var servers     = PlexApi.GetServer(form.PlexAuthToken);
                var firstServer = servers.Server.FirstOrDefault(x => x.AccessToken == form.PlexAuthToken);

                Session[SessionKeys.UserWizardMachineId] = firstServer?.MachineIdentifier;
                form.MachineIdentifier = firstServer?.MachineIdentifier;
            }
            catch (Exception e)
            {
                // Probably bad settings, just continue
                Log.Error(e);
            }

            var result = await PlexSettings.SaveSettingsAsync(form);

            if (result)
            {
                return(Response.AsJson(new JsonResponseModel {
                    Result = true
                }));
            }
            return
                (Response.AsJson(new JsonResponseModel
            {
                Result = false,
                Message = "Could not save the settings to the database, please try again."
            }));
        }
예제 #23
0
        private List <PlexSearch> GetLibraries(PlexSettings plexSettings)
        {
            var sections = PlexApi.GetLibrarySections(plexSettings.PlexAuthToken, plexSettings.FullUri);

            var libs = new List <PlexSearch>();

            if (sections != null)
            {
                foreach (var dir in sections.Directories ?? new List <Directory>())
                {
                    var lib = PlexApi.GetLibrary(plexSettings.PlexAuthToken, plexSettings.FullUri, dir.Key);
                    if (lib != null)
                    {
                        libs.Add(lib);
                    }
                }
            }

            return(libs);
        }
        private async Task <Response> LoadUsers()
        {
            var localUsers = await UserMapper.GetUsersAsync();

            var model = new List <UserManagementUsersViewModel>();

            var usersDb = UserLoginsRepo.GetAll().ToList();

            foreach (var user in localUsers)
            {
                var userDb = usersDb.FirstOrDefault(x => x.UserId == user.UserGuid);
                model.Add(MapLocalUser(user, userDb?.LastLoggedIn ?? DateTime.MinValue));
            }

            var plexSettings = await PlexSettings.GetSettingsAsync();

            if (!string.IsNullOrEmpty(plexSettings.PlexAuthToken))
            {
                //Get Plex Users
                var plexUsers = PlexApi.GetUsers(plexSettings.PlexAuthToken);

                foreach (var u in plexUsers.User)
                {
                    var userDb = usersDb.FirstOrDefault(x => x.UserId == u.Id);
                    model.Add(new UserManagementUsersViewModel
                    {
                        Username     = u.Username,
                        Type         = UserType.PlexUser,
                        Id           = u.Id,
                        Claims       = "Requestor",
                        EmailAddress = u.Email,
                        PlexInfo     = new UserManagementPlexInformation
                        {
                            Thumb = u.Thumb
                        },
                        LastLoggedIn = userDb?.LastLoggedIn ?? DateTime.MinValue,
                    });
                }
            }
            return(Response.AsJson(model));
        }
예제 #25
0
        private async Task <Response> CheckStatus()
        {
            var plexSettings = await PlexSettings.GetSettingsAsync();

            if (plexSettings.Enable)
            {
                if (string.IsNullOrEmpty(plexSettings.PlexAuthToken) || string.IsNullOrEmpty(plexSettings.Ip))
                {
                    return(Response.AsJson(false));
                }
                try
                {
                    var status = PlexApi.GetStatus(plexSettings.PlexAuthToken, plexSettings.FullUri);
                    return(Response.AsJson(status != null));
                }
                catch (Exception)
                {
                    return(Response.AsJson(false));
                }
            }

            var emby = await EmbySettings.GetSettingsAsync();

            if (emby.Enable)
            {
                if (string.IsNullOrEmpty(emby.AdministratorId) || string.IsNullOrEmpty(emby.Ip))
                {
                    return(Response.AsJson(false));
                }
                try
                {
                    var status = EmbyApi.GetSystemInformation(emby.ApiKey, emby.FullUri);
                    return(Response.AsJson(status?.Version != null));
                }
                catch (Exception)
                {
                    return(Response.AsJson(false));
                }
            }
            return(Response.AsJson(false));
        }
예제 #26
0
        public async Task NotifyUsers(RequestedModel model, string apiKey)
        {
            try
            {
                var plexUser    = PlexApi.GetUsers(apiKey);
                var userAccount = PlexApi.GetAccount(apiKey);

                var adminUsername = userAccount.Username ?? string.Empty;

                var users = UserNotifyRepo.GetAll().ToList();
                Log.Debug("Notifying Users Count {0}", users.Count);

                var selectedUsers = users.Select(x => x.Username).Intersect(model.RequestedUsers, StringComparer.CurrentCultureIgnoreCase);
                foreach (var user in selectedUsers)
                {
                    Log.Info("Notifying user {0}", user);
                    if (user.Equals(adminUsername, StringComparison.CurrentCultureIgnoreCase))
                    {
                        Log.Info("This user is the Plex server owner");
                        await PublishUserNotification(userAccount.Username, userAccount.Email, model.Title, model.PosterPath);

                        return;
                    }

                    var email = plexUser.User.FirstOrDefault(x => x.Username.Equals(user, StringComparison.CurrentCultureIgnoreCase));
                    if (email == null)
                    {
                        Log.Info("There is no email address for this Plex user, cannot send notification");
                        // We do not have a plex user that requested this!
                        continue;
                    }

                    Log.Info("Sending notification to: {0} at: {1}, for title: {2}", email.Username, email.Email, model.Title);
                    await PublishUserNotification(email.Username, email.Email, model.Title, model.PosterPath);
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
예제 #27
0
        public async Task <PlexServersViewModel> GetServers([FromBody] UserRequest u)
        {
            try
            {
                var signIn = await PlexApi.SignIn(u);

                var servers = await PlexApi.GetServer(signIn?.user?.authentication_token);

                return(new PlexServersViewModel {
                    Servers = servers, Success = true
                });
            }
            catch (Exception e)
            {
                return(new PlexServersViewModel
                {
                    Success = false,
                    Message = e.Message
                });
            }
        }
예제 #28
0
        /// <summary>
        /// Migrates to version1910.
        /// </summary>
        public void MigrateToVersion1910()
        {
            try
            {
                // Get the new machine Identifier
                var settings = new SettingsServiceV2 <PlexSettings>(new SettingsJsonRepository(Db, new MemoryCacheProvider()));
                var plex     = settings.GetSettings();
                if (!string.IsNullOrEmpty(plex.PlexAuthToken))
                {
                    var api    = new PlexApi(new ApiRequest());
                    var server = api.GetServer(plex.PlexAuthToken); // Get the server info
                    plex.MachineIdentifier = server.Server.FirstOrDefault(x => x.AccessToken == plex.PlexAuthToken)?.MachineIdentifier;

                    settings.SaveSettings(plex); // Save the new settings
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
        private List<PlexSearch> GetLibraries(AuthenticationSettings authSettings, PlexSettings plexSettings)
        {
            var sections = PlexApi.GetLibrarySections(authSettings.PlexAuthToken, plexSettings.FullUri);

            List<PlexSearch> libs = new List<PlexSearch>();
            if (sections != null)
            {
                foreach (var dir in sections.Directories)
                {
                    Log.Trace("Obtaining results from Plex for the following library section: {0}", dir.Title);
                    var lib = PlexApi.GetLibrary(authSettings.PlexAuthToken, plexSettings.FullUri, dir.Key);
                    if (lib != null)
                    {
                        libs.Add(lib);
                    }
                }
            }

            Log.Trace("Returning Plex Libs");
            return libs;
        }
        private void NotifyUsers(IEnumerable<RequestedModel> modelChanged, string apiKey)
        {
            try
            {
                var plexUser = PlexApi.GetUsers(apiKey);
                if (plexUser?.User == null || plexUser.User.Length == 0)
                {
                    return;
                }

                var users = UserNotifyRepo.GetAll().ToList();
                foreach (var model in modelChanged)
                {
                    var selectedUsers = users.Select(x => x.Username).Intersect(model.RequestedUsers);
                    foreach (var user in selectedUsers)
                    {
                        var email = plexUser.User.FirstOrDefault(x => x.Username == user);
                        if (email == null)
                        {
                            // We do not have a plex user that requested this!
                            continue;
                        }
                        var notificationModel = new NotificationModel
                        {
                            User = email.Username,
                            UserEmail = email.Email,
                            NotificationType = NotificationType.RequestAvailable,
                            Title = model.Title
                        };

                        // Send the notification to the user.
                        Notification.Publish(notificationModel);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }