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); }
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)); }
private async Task <IEnumerable <UserManagementUsersViewModel> > LoadLocalUsers() { var localUsers = await UserMapper.GetUsersAsync(); var userLogins = UserLoginsRepo.GetAll().ToList(); var model = new List <UserManagementUsersViewModel>(); foreach (var user in localUsers) { var userDb = userLogins.FirstOrDefault(x => x.UserId == user.UserGuid); model.Add(MapLocalUser(user, userDb?.LastLoggedIn ?? DateTime.MinValue)); } return(model); }
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(); 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)); } return(null); // We should never end up here. }