| 
					
				 | 
			
			
				@@ -13,6 +13,7 @@ using MediaBrowser.Model.Configuration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using MediaBrowser.Model.Dto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using MediaBrowser.Model.Services; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using MediaBrowser.Model.Users; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Microsoft.Extensions.Logging; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 namespace MediaBrowser.Api 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -247,8 +248,9 @@ namespace MediaBrowser.Api 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly INetworkManager _networkManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly IDeviceManager _deviceManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly IAuthorizationContext _authContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private readonly ILogger _logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public UserService(IUserManager userManager, ISessionManager sessionMananger, IServerConfigurationManager config, INetworkManager networkManager, IDeviceManager deviceManager, IAuthorizationContext authContext) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public UserService(IUserManager userManager, ISessionManager sessionMananger, IServerConfigurationManager config, INetworkManager networkManager, IDeviceManager deviceManager, IAuthorizationContext authContext, ILoggerFactory loggerFactory) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _userManager = userManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _sessionMananger = sessionMananger; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -256,6 +258,7 @@ namespace MediaBrowser.Api 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _networkManager = networkManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _deviceManager = deviceManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _authContext = authContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _logger = loggerFactory.CreateLogger(nameof(UserService)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public object Get(GetPublicUsers request) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -399,19 +402,27 @@ namespace MediaBrowser.Api 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var auth = _authContext.GetAuthorizationInfo(Request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var result = await _sessionMananger.AuthenticateNewSession(new AuthenticationRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                App = auth.Client, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                AppVersion = auth.Version, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                DeviceId = auth.DeviceId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                DeviceName = auth.Device, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Password = request.Pw, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                PasswordSha1 = request.Password, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RemoteEndPoint = Request.RemoteIp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Username = request.Username 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }).ConfigureAwait(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return ToOptimizedResult(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var result = await _sessionMananger.AuthenticateNewSession(new AuthenticationRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    App = auth.Client, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    AppVersion = auth.Version, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    DeviceId = auth.DeviceId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    DeviceName = auth.Device, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Password = request.Pw, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    PasswordSha1 = request.Password, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RemoteEndPoint = Request.RemoteIp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Username = request.Username 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }).ConfigureAwait(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return ToOptimizedResult(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catch(SecurityException e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // rethrow adding IP address to message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new SecurityException($"[{Request.RemoteIp}] {e.Message}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 |