/// <summary> /// Gets the authorization. /// </summary> /// <param name="httpReq">The HTTP req.</param> /// <returns>Dictionary{System.StringSystem.String}.</returns> private AuthorizationInfo GetAuthorization(IRequest httpReq) { var auth = GetAuthorizationDictionary(httpReq); string deviceId = null; string device = null; string client = null; string version = null; string token = null; if (auth != null) { auth.TryGetValue("DeviceId", out deviceId); auth.TryGetValue("Device", out device); auth.TryGetValue("Client", out client); auth.TryGetValue("Version", out version); auth.TryGetValue("Token", out token); } if (string.IsNullOrWhiteSpace(token)) { token = httpReq.Headers["X-Emby-Token"]; } if (string.IsNullOrWhiteSpace(token)) { token = httpReq.Headers["X-MediaBrowser-Token"]; } if (string.IsNullOrWhiteSpace(token)) { token = httpReq.QueryString["api_key"]; } var info = new AuthorizationInfo { Client = client, Device = device, DeviceId = deviceId, Version = version, Token = token }; if (!string.IsNullOrWhiteSpace(token)) { var result = _authRepo.Get(new AuthenticationInfoQuery { AccessToken = token }); var tokenInfo = result.Items.Length > 0 ? result.Items[0] : null; if (tokenInfo != null) { info.UserId = tokenInfo.UserId; var updateToken = false; // TODO: Remove these checks for IsNullOrWhiteSpace if (string.IsNullOrWhiteSpace(info.Client)) { info.Client = tokenInfo.AppName; } if (string.IsNullOrWhiteSpace(info.DeviceId)) { info.DeviceId = tokenInfo.DeviceId; } if (string.IsNullOrWhiteSpace(info.Device)) { info.Device = tokenInfo.DeviceName; } else if (!string.Equals(info.Device, tokenInfo.DeviceName, StringComparison.OrdinalIgnoreCase)) { updateToken = true; tokenInfo.DeviceName = info.Device; } if (string.IsNullOrWhiteSpace(info.Version)) { info.Version = tokenInfo.AppVersion; } else if (!string.Equals(info.Version, tokenInfo.AppVersion, StringComparison.OrdinalIgnoreCase)) { updateToken = true; tokenInfo.AppVersion = info.Version; } if (updateToken) { _authRepo.Update(tokenInfo, CancellationToken.None); } } else { var user = _connectManager.GetUserFromExchangeToken(token); if (user != null) { info.UserId = user.Id.ToString("N"); } } httpReq.Items["OriginalAuthenticationInfo"] = tokenInfo; } httpReq.Items["AuthorizationInfo"] = info; return(info); }
/// <summary> /// Gets the authorization. /// </summary> /// <param name="httpReq">The HTTP req.</param> /// <returns>Dictionary{System.StringSystem.String}.</returns> private AuthorizationInfo GetAuthorization(IServiceRequest httpReq) { var auth = GetAuthorizationDictionary(httpReq); string deviceId = null; string device = null; string client = null; string version = null; if (auth != null) { auth.TryGetValue("DeviceId", out deviceId); auth.TryGetValue("Device", out device); auth.TryGetValue("Client", out client); auth.TryGetValue("Version", out version); } var token = httpReq.Headers["X-Emby-Token"]; if (string.IsNullOrWhiteSpace(token)) { token = httpReq.Headers["X-MediaBrowser-Token"]; } if (string.IsNullOrWhiteSpace(token)) { token = httpReq.QueryString["api_key"]; } var info = new AuthorizationInfo { Client = client, Device = device, DeviceId = deviceId, Version = version, Token = token }; if (!string.IsNullOrWhiteSpace(token)) { var result = _authRepo.Get(new AuthenticationInfoQuery { AccessToken = token }); var tokenInfo = result.Items.FirstOrDefault(); if (tokenInfo != null) { info.UserId = tokenInfo.UserId; // TODO: Remove these checks for IsNullOrWhiteSpace if (string.IsNullOrWhiteSpace(info.Client)) { info.Client = tokenInfo.AppName; } if (string.IsNullOrWhiteSpace(info.Device)) { info.Device = tokenInfo.DeviceName; } if (string.IsNullOrWhiteSpace(info.DeviceId)) { info.DeviceId = tokenInfo.DeviceId; } if (string.IsNullOrWhiteSpace(info.Version)) { info.Version = tokenInfo.AppVersion; } } else { var user = _connectManager.GetUserFromExchangeToken(token); if (user != null) { info.UserId = user.Id.ToString("N"); } } httpReq.Items["OriginalAuthenticationInfo"] = tokenInfo; } httpReq.Items["AuthorizationInfo"] = info; return(info); }
/// <summary> /// Gets the authorization. /// </summary> /// <param name="httpReq">The HTTP req.</param> /// <returns>Dictionary{System.StringSystem.String}.</returns> private AuthorizationInfo GetAuthorization(IServiceRequest httpReq) { var auth = GetAuthorizationDictionary(httpReq); string userId = null; string deviceId = null; string device = null; string client = null; string version = null; if (auth != null) { // TODO: Remove this auth.TryGetValue("UserId", out userId); auth.TryGetValue("DeviceId", out deviceId); auth.TryGetValue("Device", out device); auth.TryGetValue("Client", out client); auth.TryGetValue("Version", out version); } var token = httpReq.Headers["X-MediaBrowser-Token"]; if (string.IsNullOrWhiteSpace(token)) { token = httpReq.QueryString["api_key"]; } // Hack until iOS is updated // TODO: Remove if (string.IsNullOrWhiteSpace(client)) { var userAgent = httpReq.Headers["User-Agent"] ?? string.Empty; if (userAgent.IndexOf("mediabrowserios", StringComparison.OrdinalIgnoreCase) != -1 || userAgent.IndexOf("iphone", StringComparison.OrdinalIgnoreCase) != -1 || userAgent.IndexOf("ipad", StringComparison.OrdinalIgnoreCase) != -1) { client = "iOS"; } else if (userAgent.IndexOf("crKey", StringComparison.OrdinalIgnoreCase) != -1) { client = "Chromecast"; } } // Hack until iOS is updated // TODO: Remove if (string.IsNullOrWhiteSpace(device)) { var userAgent = httpReq.Headers["User-Agent"] ?? string.Empty; if (userAgent.IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) != -1) { device = "iPhone"; } else if (userAgent.IndexOf("iPad", StringComparison.OrdinalIgnoreCase) != -1) { device = "iPad"; } else if (userAgent.IndexOf("crKey", StringComparison.OrdinalIgnoreCase) != -1) { device = "Chromecast"; } } var info = new AuthorizationInfo { Client = client, Device = device, DeviceId = deviceId, UserId = userId, Version = version, Token = token }; if (!string.IsNullOrWhiteSpace(token)) { var result = _authRepo.Get(new AuthenticationInfoQuery { AccessToken = token }); var tokenInfo = result.Items.FirstOrDefault(); if (tokenInfo != null) { info.UserId = tokenInfo.UserId; // TODO: Remove these checks for IsNullOrWhiteSpace if (string.IsNullOrWhiteSpace(info.Client)) { info.Client = tokenInfo.AppName; } if (string.IsNullOrWhiteSpace(info.Device)) { info.Device = tokenInfo.DeviceName; } if (string.IsNullOrWhiteSpace(info.DeviceId)) { info.DeviceId = tokenInfo.DeviceId; } } else { var user = _connectManager.GetUserFromExchangeToken(token); if (user != null) { info.UserId = user.Id.ToString("N"); } } httpReq.Items["OriginalAuthenticationInfo"] = tokenInfo; } httpReq.Items["AuthorizationInfo"] = info; return(info); }
/// <summary> /// Gets the authorization. /// </summary> /// <param name="httpReq">The HTTP req.</param> /// <returns>Dictionary{System.StringSystem.String}.</returns> private AuthorizationInfo GetAuthorization(IRequest httpReq) { var auth = GetAuthorizationDictionary(httpReq); string deviceId = null; string device = null; string client = null; string version = null; string token = null; if (auth != null) { auth.TryGetValue("DeviceId", out deviceId); auth.TryGetValue("Device", out device); auth.TryGetValue("Client", out client); auth.TryGetValue("Version", out version); auth.TryGetValue("Token", out token); } if (string.IsNullOrEmpty(token)) { token = httpReq.Headers["X-Emby-Token"]; } if (string.IsNullOrEmpty(token)) { token = httpReq.Headers["X-MediaBrowser-Token"]; } if (string.IsNullOrEmpty(token)) { token = httpReq.QueryString["api_key"]; } var info = new AuthorizationInfo { Client = client, Device = device, DeviceId = deviceId, Version = version, Token = token }; if (!string.IsNullOrWhiteSpace(token)) { var result = _authRepo.Get(new AuthenticationInfoQuery { AccessToken = token }); var tokenInfo = result.Items.Length > 0 ? result.Items[0] : null; if (tokenInfo != null) { var updateToken = false; // TODO: Remove these checks for IsNullOrWhiteSpace if (string.IsNullOrWhiteSpace(info.Client)) { info.Client = tokenInfo.AppName; } if (string.IsNullOrWhiteSpace(info.DeviceId)) { info.DeviceId = tokenInfo.DeviceId; } // Temporary. TODO - allow clients to specify that the token has been shared with a casting device var allowTokenInfoUpdate = info.Client == null || info.Client.IndexOf("chromecast", StringComparison.OrdinalIgnoreCase) == -1; if (string.IsNullOrWhiteSpace(info.Device)) { info.Device = tokenInfo.DeviceName; } else if (!string.Equals(info.Device, tokenInfo.DeviceName, StringComparison.OrdinalIgnoreCase)) { if (allowTokenInfoUpdate) { updateToken = true; tokenInfo.DeviceName = info.Device; } } if (string.IsNullOrWhiteSpace(info.Version)) { info.Version = tokenInfo.AppVersion; } else if (!string.Equals(info.Version, tokenInfo.AppVersion, StringComparison.OrdinalIgnoreCase)) { if (allowTokenInfoUpdate) { updateToken = true; tokenInfo.AppVersion = info.Version; } } if ((DateTime.UtcNow - tokenInfo.DateLastActivity).TotalMinutes > 3) { tokenInfo.DateLastActivity = DateTime.UtcNow; updateToken = true; } if (!tokenInfo.UserId.Equals(Guid.Empty)) { info.User = _userManager.GetUserById(tokenInfo.UserId); if (info.User != null && !string.Equals(info.User.Name, tokenInfo.UserName, StringComparison.OrdinalIgnoreCase)) { tokenInfo.UserName = info.User.Name; updateToken = true; } } if (updateToken) { _authRepo.Update(tokenInfo, CancellationToken.None); } } else { info.User = _connectManager.GetUserFromExchangeToken(token); } httpReq.Items["OriginalAuthenticationInfo"] = tokenInfo; } httpReq.Items["AuthorizationInfo"] = info; return(info); }