public async Task <MediaSeverAvailibilityViewModel> GetMediaServerStatus() { var model = new MediaSeverAvailibilityViewModel(); var plex = await _plexSettings.GetSettingsAsync(); if (plex.Enable) { foreach (var s in plex.Servers) { try { var result = await _plexApi.GetStatus(s.PlexAuthToken, s.FullUri); if (!string.IsNullOrEmpty(result.MediaContainer?.version)) { model.ServersAvailable++; } else { model.ServersUnavailable++; } } catch (Exception) { model.ServersUnavailable++; } } } var emby = await _embySettings.GetSettingsAsync(); if (emby.Enable) { foreach (var server in emby.Servers) { try { var result = await _embyApi.GetUsers(server.FullUri, server.ApiKey); if (result.Any()) { model.ServersAvailable++; } else { model.ServersUnavailable++; } } catch (Exception) { model.ServersUnavailable++; } } } return(model); }
public async Task <bool> EmbySettings([FromBody] EmbySettings emby) { if (emby.Enable) { foreach (var server in emby.Servers) { var users = await _embyApi.GetUsers(server.FullUri, server.ApiKey); var admin = users.FirstOrDefault(x => x.Policy.IsAdministrator); server.AdministratorId = admin?.Id; } } var result = await Save(emby); return(result); }
public async Task Execute(IJobExecutionContext job) { var userManagementSettings = await _userManagementSettings.GetSettingsAsync(); if (!userManagementSettings.ImportEmbyUsers) { return; } var settings = await _embySettings.GetSettingsAsync(); if (!settings.Enable) { return; } var allUsers = await _userManager.Users.Where(x => x.UserType == UserType.EmbyUser).ToListAsync(); foreach (var server in settings.Servers) { if (string.IsNullOrEmpty(server.ApiKey)) { continue; } var embyUsers = await _api.GetUsers(server.FullUri, server.ApiKey); foreach (var embyUser in embyUsers) { // Check if we should import this user if (userManagementSettings.BannedEmbyUserIds.Contains(embyUser.Id)) { // Do not import these, they are not allowed into the country. continue; } // Check if this Plex User already exists // We are using the Plex USERNAME and Not the TITLE, the Title is for HOME USERS var existingEmbyUser = allUsers.FirstOrDefault(x => x.ProviderUserId == embyUser.Id); if (existingEmbyUser == null) { if (!embyUser.ConnectUserName.HasValue() && !embyUser.Name.HasValue()) { _log.LogInformation("Could not create Emby user since the have no username, PlexUserId: {0}", embyUser.Id); continue; } // Create this users // We do not store a password against the user since they will authenticate via Plex var newUser = new OmbiUser { UserType = UserType.EmbyUser, UserName = embyUser.ConnectUserName.HasValue() ? embyUser.ConnectUserName : embyUser.Name, ProviderUserId = embyUser.Id, Alias = string.Empty, EmbyConnectUserId = embyUser.ConnectUserId.HasValue() ? embyUser.ConnectUserId : string.Empty, MovieRequestLimit = userManagementSettings.MovieRequestLimit, EpisodeRequestLimit = userManagementSettings.EpisodeRequestLimit }; var result = await _userManager.CreateAsync(newUser); if (!result.Succeeded) { foreach (var identityError in result.Errors) { _log.LogError(LoggingEvents.EmbyUserImporter, identityError.Description); } continue; } if (userManagementSettings.DefaultRoles.Any()) { foreach (var defaultRole in userManagementSettings.DefaultRoles) { await _userManager.AddToRoleAsync(newUser, defaultRole); } } } else { // Do we need to update this user? existingEmbyUser.UserName = embyUser.Name; existingEmbyUser.EmbyConnectUserId = embyUser.ConnectUserId.HasValue() ? embyUser.ConnectUserId : string.Empty; if (existingEmbyUser.IsEmbyConnect) { // Note: We do not have access to any of the emby connect details e.g. email // Since we need the username and password to connect to emby connect, // We update the email address in the OmbiUserManager when the emby connect user logs in existingEmbyUser.UserName = embyUser.ConnectUserName; } await _userManager.UpdateAsync(existingEmbyUser); } } } }
public async Task Execute(IJobExecutionContext job) { var userManagementSettings = await _userManagementSettings.GetSettingsAsync(); if (!userManagementSettings.ImportEmbyUsers) { return; } var settings = await _embySettings.GetSettingsAsync(); if (!settings.Enable) { return; } Api = _apiFactory.CreateClient(settings); await _notification.Clients.Clients(NotificationHub.AdminConnectionIds) .SendAsync(NotificationHub.NotificationEvent, $"Emby User Importer Started"); var allUsers = await _userManager.Users.Where(x => x.UserType == UserType.EmbyUser || x.UserType == UserType.EmbyConnectUser).ToListAsync(); foreach (var server in settings.Servers) { if (string.IsNullOrEmpty(server.ApiKey)) { continue; } var embyUsers = await Api.GetUsers(server.FullUri, server.ApiKey); foreach (var embyUser in embyUsers) { // Check if we should import this user if (userManagementSettings.BannedEmbyUserIds.Contains(embyUser.Id)) { // Do not import these, they are not allowed into the country. continue; } // Check if this Emby User already exists var existingEmbyUser = allUsers.FirstOrDefault(x => x.ProviderUserId == embyUser.Id); if (existingEmbyUser == null) { if (!embyUser.ConnectUserName.HasValue() && !embyUser.Name.HasValue()) { _log.LogInformation("Could not create Emby user since the have no username, PlexUserId: {0}", embyUser.Id); continue; } var isConnectUser = embyUser.ConnectUserName.HasValue(); // Create this users var newUser = new OmbiUser { UserType = isConnectUser ? UserType.EmbyConnectUser : UserType.EmbyUser, UserName = isConnectUser ? embyUser.ConnectUserName : embyUser.Name, ProviderUserId = embyUser.Id, Alias = isConnectUser ? embyUser.Name : string.Empty, MovieRequestLimit = userManagementSettings.MovieRequestLimit, EpisodeRequestLimit = userManagementSettings.EpisodeRequestLimit, StreamingCountry = userManagementSettings.DefaultStreamingCountry }; var result = await _userManager.CreateAsync(newUser); if (!result.Succeeded) { foreach (var identityError in result.Errors) { _log.LogError(LoggingEvents.EmbyUserImporter, identityError.Description); } continue; } if (userManagementSettings.DefaultRoles.Any()) { foreach (var defaultRole in userManagementSettings.DefaultRoles) { await _userManager.AddToRoleAsync(newUser, defaultRole); } } } else { // Do we need to update this user? existingEmbyUser.UserName = embyUser.Name; if (existingEmbyUser.IsEmbyConnect) { // Note: We do not have access to any of the emby connect details e.g. email // Since we need the username and password to connect to emby connect, // We update the email address in the OmbiUserManager when the emby connect user logs in existingEmbyUser.UserName = embyUser.ConnectUserName; existingEmbyUser.Alias = embyUser.Name; } await _userManager.UpdateAsync(existingEmbyUser); } } } await _notification.Clients.Clients(NotificationHub.AdminConnectionIds) .SendAsync(NotificationHub.NotificationEvent, "Emby User Importer Finished"); }