Example #1
0
        private async Task <IEnumerable <UserManagementUsersViewModel> > LoadEmbyUsers()
        {
            var embyDbUsers = await EmbyRepository.GetAllAsync();

            var model = new List <UserManagementUsersViewModel>();

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

            var embySettings = await EmbySettings.GetSettingsAsync();

            if (!string.IsNullOrEmpty(embySettings.ApiKey))
            {
                //Get Plex Users
                var embyUsers = EmbyApi.GetUsers(embySettings.FullUri, embySettings.ApiKey);
                if (embyUsers != null)
                {
                    foreach (var u in embyUsers)
                    {
                        var dbUser = embyDbUsers.FirstOrDefault(x => x.EmbyUserId == u.Id);
                        var userDb = userLogins.FirstOrDefault(x => x.UserId == u.Id);

                        // We don't have the user in the database yet
                        model.Add(dbUser == null
                            ? MapEmbyUser(u, null, userDb?.LastLoggedIn ?? DateTime.MinValue)
                            : MapEmbyUser(u, dbUser, userDb?.LastLoggedIn ?? DateTime.MinValue));
                    }
                }
            }
            return(model);
        }
Example #2
0
        private async Task <Response> UpdateUser()
        {
            Analytics.TrackEventAsync(Category.UserManagement, Action.Update, "Updated User", Username, CookieHelper.GetAnalyticClientId(Cookies));
            var body = Request.Body.AsString();

            if (string.IsNullOrEmpty(body))
            {
                return(Response.AsJson(new JsonResponseModel {
                    Result = false, Message = "Could not save user, invalid JSON body"
                }));
            }

            var model = JsonConvert.DeserializeObject <UserManagementUpdateModel>(body);

            if (string.IsNullOrWhiteSpace(model.Id))
            {
                return(Response.AsJson(new JsonResponseModel
                {
                    Result = true,
                    Message = "Couldn't find the user"
                }));
            }

            var permissionsValue = model.Permissions.Where(c => c.Selected).Sum(c => c.Value);
            var featuresValue    = model.Features.Where(c => c.Selected).Sum(c => c.Value);

            Guid outId;

            Guid.TryParse(model.Id, out outId);
            var localUser = UserMapper.GetUser(outId);

            // Update Local User
            if (localUser != null)
            {
                localUser.Permissions = permissionsValue;
                localUser.Features    = featuresValue;

                var currentProps = ByteConverterHelper.ReturnObject <UserProperties>(localUser.UserProperties);

                // Let's check if the alias has changed, if so we need to change all the requests associated with this
                await UpdateRequests(localUser.UserName, currentProps.UserAlias, model.Alias);

                currentProps.UserAlias    = model.Alias;
                currentProps.EmailAddress = model.EmailAddress;

                localUser.UserProperties = ByteConverterHelper.ReturnBytes(currentProps);

                var user    = UserMapper.EditUser(localUser);
                var dbUser  = UserLoginsRepo.GetAll().FirstOrDefault(x => x.UserId == user.UserGuid);
                var retUser = MapLocalUser(user, dbUser?.LastLoggedIn ?? DateTime.MinValue);
                return(Response.AsJson(retUser));
            }

            var plexSettings = await PlexSettings.GetSettingsAsync();

            if (plexSettings.Enable)
            {
                var plexDbUsers = await PlexUsersRepository.GetAllAsync();

                var plexUsers  = PlexApi.GetUsers(plexSettings.PlexAuthToken);
                var plexDbUser = plexDbUsers.FirstOrDefault(x => x.PlexUserId == model.Id);
                var plexUser   = plexUsers.User.FirstOrDefault(x => x.Id == model.Id);
                var userLogin  = UserLoginsRepo.GetAll().FirstOrDefault(x => x.UserId == model.Id);
                if (plexDbUser != null && plexUser != null)
                {
                    // We have a user in the DB for this Plex Account
                    plexDbUser.Permissions = permissionsValue;
                    plexDbUser.Features    = featuresValue;

                    await UpdateRequests(plexDbUser.Username, plexDbUser.UserAlias, model.Alias);

                    plexDbUser.UserAlias    = model.Alias;
                    plexDbUser.EmailAddress = model.EmailAddress;

                    await PlexUsersRepository.UpdateAsync(plexDbUser);

                    var retUser = MapPlexUser(plexUser, plexDbUser, userLogin?.LastLoggedIn ?? DateTime.MinValue);
                    return(Response.AsJson(retUser));
                }

                // So it could actually be the admin
                var account = PlexApi.GetAccount(plexSettings.PlexAuthToken);
                if (plexDbUser != null && account != null)
                {
                    // We have a user in the DB for this Plex Account
                    plexDbUser.Permissions = permissionsValue;
                    plexDbUser.Features    = featuresValue;

                    await UpdateRequests(plexDbUser.Username, plexDbUser.UserAlias, model.Alias);

                    plexDbUser.UserAlias = model.Alias;

                    await PlexUsersRepository.UpdateAsync(plexDbUser);

                    var retUser = MapPlexAdmin(account, plexDbUser, userLogin?.LastLoggedIn ?? DateTime.MinValue);
                    return(Response.AsJson(retUser));
                }

                // We have a Plex Account but he's not in the DB
                if (plexUser != null)
                {
                    var user = new PlexUsers
                    {
                        Permissions  = permissionsValue,
                        Features     = featuresValue,
                        UserAlias    = model.Alias,
                        PlexUserId   = plexUser.Id,
                        EmailAddress = plexUser.Email,
                        Username     = plexUser.Title,
                        LoginId      = Guid.NewGuid().ToString()
                    };

                    await PlexUsersRepository.InsertAsync(user);

                    var retUser = MapPlexUser(plexUser, user, userLogin?.LastLoggedIn ?? DateTime.MinValue);
                    return(Response.AsJson(retUser));
                }
            }

            var embySettings = await EmbySettings.GetSettingsAsync();

            if (embySettings.Enable)
            {
                var embyDbUsers = await EmbyRepository.GetAllAsync();

                var embyUsers      = EmbyApi.GetUsers(embySettings.FullUri, embySettings.ApiKey);
                var selectedDbUser = embyDbUsers.FirstOrDefault(x => x.EmbyUserId == model.Id);
                var embyUser       = embyUsers.FirstOrDefault(x => x.Id == model.Id);

                var userLogin = UserLoginsRepo.GetAll().FirstOrDefault(x => x.UserId == model.Id);
                if (selectedDbUser != null && embyUser != null)
                {
                    // We have a user in the DB for this Plex Account
                    selectedDbUser.Permissions = permissionsValue;
                    selectedDbUser.Features    = featuresValue;

                    await UpdateRequests(selectedDbUser.Username, selectedDbUser.UserAlias, model.Alias);

                    selectedDbUser.UserAlias    = model.Alias;
                    selectedDbUser.EmailAddress = model.EmailAddress;

                    await EmbyRepository.UpdateAsync(selectedDbUser);

                    var retUser = MapEmbyUser(embyUser, selectedDbUser, userLogin?.LastLoggedIn ?? DateTime.MinValue);
                    return(Response.AsJson(retUser));
                }
            }
            return(null); // We should never end up here.
        }