aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserService.cs
diff options
context:
space:
mode:
authorDavide Polonio <poloniodavide@gmail.com>2020-03-01 21:38:34 +0100
committerDavide Polonio <poloniodavide@gmail.com>2020-03-01 21:46:01 +0100
commit5d760b7ee806d3fb00ac5aa7d0981362526f1d11 (patch)
tree9ca14af31618c2aebeb10b371f7fb52865cf09f1 /MediaBrowser.Api/UserService.cs
parent03a294a706d2610e263fa2621e50b2da0f27f34f (diff)
Fix emby/user/public API leaking private data
This commit fixes the emby/user/public API that was returning more data than necessary. Now only the following information are returned: - the account name - the primary image tag - the field hasPassword - the field hasConfiguredPassword, useful for the first wizard only (see https://github.com/jellyfin/jellyfin/issues/880#issuecomment-465370051) - the primary image aspect ratio A new DTO class, PrivateUserDTO has been created, and the route has been modified in order to return that data object.
Diffstat (limited to 'MediaBrowser.Api/UserService.cs')
-rw-r--r--MediaBrowser.Api/UserService.cs36
1 files changed, 25 insertions, 11 deletions
diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs
index 401514349..b4ab8c974 100644
--- a/MediaBrowser.Api/UserService.cs
+++ b/MediaBrowser.Api/UserService.cs
@@ -35,7 +35,7 @@ namespace MediaBrowser.Api
}
[Route("/Users/Public", "GET", Summary = "Gets a list of publicly visible users for display on a login screen.")]
- public class GetPublicUsers : IReturn<UserDto[]>
+ public class GetPublicUsers : IReturn<PublicUserDto[]>
{
}
@@ -266,22 +266,36 @@ namespace MediaBrowser.Api
_authContext = authContext;
}
+ /// <summary>
+ /// Gets the public available Users information
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns>System.Object.</returns>
public object Get(GetPublicUsers request)
{
- // If the startup wizard hasn't been completed then just return all users
- if (!ServerConfigurationManager.Configuration.IsStartupWizardCompleted)
+ var users = _userManager
+ .Users
+ .Where(item => item.Policy.IsDisabled == false)
+ .Where(item => item.Policy.IsHidden == false);
+
+ var deviceId = _authContext.GetAuthorizationInfo(Request).DeviceId;
+
+ if (!string.IsNullOrWhiteSpace(deviceId))
{
- return Get(new GetUsers
- {
- IsDisabled = false
- });
+ users = users.Where(i => _deviceManager.CanAccessDevice(i, deviceId));
}
- return Get(new GetUsers
+ if (!_networkManager.IsInLocalNetwork(Request.RemoteIp))
{
- IsHidden = false,
- IsDisabled = false
- }, true, true);
+ users = users.Where(i => i.Policy.EnableRemoteAccess);
+ }
+
+ var result = users
+ .OrderBy(u => u.Name)
+ .Select(i => _userManager.GetPublicUserDto(i, Request.RemoteIp))
+ .ToArray();
+
+ return ToOptimizedResult(result);
}
/// <summary>