diff options
Diffstat (limited to 'MediaBrowser.Api')
| -rw-r--r-- | MediaBrowser.Api/BaseApiService.cs | 118 | ||||
| -rw-r--r-- | MediaBrowser.Api/EnvironmentService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/Images/ImageService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/Library/LibraryService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/Library/LibraryStructureService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/LocalizationService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/MediaBrowser.Api.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.Api/PackageService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/BaseStreamingService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/PluginService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/SystemService.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ItemsService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/UserLibraryService.cs | 40 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/WeatherService.cs | 2 |
17 files changed, 167 insertions, 21 deletions
diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs new file mode 100644 index 0000000000..d3e8339c58 --- /dev/null +++ b/MediaBrowser.Api/BaseApiService.cs @@ -0,0 +1,118 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Connectivity; +using MediaBrowser.Model.Logging; +using MediaBrowser.Server.Implementations.HttpServer; +using ServiceStack.Common.Web; +using ServiceStack.ServiceHost; +using System; + +namespace MediaBrowser.Api +{ + /// <summary> + /// Class BaseApiService + /// </summary> + [RequestFilter] + public class BaseApiService : BaseRestService + { + } + + /// <summary> + /// Class RequestFilterAttribute + /// </summary> + public class RequestFilterAttribute : Attribute, IHasRequestFilter + { + //This property will be resolved by the IoC container + /// <summary> + /// Gets or sets the user manager. + /// </summary> + /// <value>The user manager.</value> + public IUserManager UserManager { get; set; } + + /// <summary> + /// Gets or sets the logger. + /// </summary> + /// <value>The logger.</value> + public ILogger Logger { get; set; } + + /// <summary> + /// The request filter is executed before the service. + /// </summary> + /// <param name="request">The http request wrapper</param> + /// <param name="response">The http response wrapper</param> + /// <param name="requestDto">The request DTO</param> + public void RequestFilter(IHttpRequest request, IHttpResponse response, object requestDto) + { + //This code is executed before the service + + var auth = GetAuthorization(request); + + if (auth != null) + { + var user = UserManager.GetUserById(new Guid(auth["UserId"])); + + ClientType clientType; + + Enum.TryParse(auth["Client"] ?? string.Empty, out clientType); + + UserManager.LogUserActivity(user, clientType, auth["DeviceId"], auth["Device"] ?? string.Empty); + } + } + + /// <summary> + /// Gets the auth. + /// </summary> + /// <param name="httpReq">The HTTP req.</param> + /// <returns>Dictionary{System.StringSystem.String}.</returns> + public static Dictionary<string, string> GetAuthorization(IHttpRequest httpReq) + { + var auth = httpReq.Headers[HttpHeaders.Authorization]; + if (auth == null) return null; + + var parts = auth.Split(' '); + + // There should be at least to parts + if (parts.Length < 2) return null; + + // It has to be a digest request + if (!string.Equals(parts[0], "MediaBrowser", StringComparison.OrdinalIgnoreCase)) + { + return null; + } + + // Remove uptil the first space + auth = auth.Substring(auth.IndexOf(' ')); + parts = auth.Split(','); + + var result = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); + + foreach (var item in parts) + { + var param = item.Trim().Split(new[] { '=' }, 2); + result.Add(param[0], param[1].Trim(new[] { '"' })); + } + + return result; + } + + /// <summary> + /// A new shallow copy of this filter is used on every request. + /// </summary> + /// <returns>IHasRequestFilter.</returns> + public IHasRequestFilter Copy() + { + return this; + } + + /// <summary> + /// Order in which Request Filters are executed. + /// <0 Executed before global request filters + /// >0 Executed after global request filters + /// </summary> + /// <value>The priority.</value> + public int Priority + { + get { return 0; } + } + } +} diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs index b65162cfa2..d35d485360 100644 --- a/MediaBrowser.Api/EnvironmentService.cs +++ b/MediaBrowser.Api/EnvironmentService.cs @@ -75,7 +75,7 @@ namespace MediaBrowser.Api /// <summary> /// Class EnvironmentService /// </summary> - public class EnvironmentService : BaseRestService + public class EnvironmentService : BaseApiService { /// <summary> /// The _network manager diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index c854c47f51..90100dfa7a 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -150,7 +150,7 @@ namespace MediaBrowser.Api.Images /// <summary> /// Class ImageService /// </summary> - public class ImageService : BaseRestService + public class ImageService : BaseApiService { /// <summary> /// The _user manager diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index 9d1df4ccba..73f2243f2e 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -98,7 +98,7 @@ namespace MediaBrowser.Api.Library /// <summary> /// Class LibraryService /// </summary> - public class LibraryService : BaseRestService + public class LibraryService : BaseApiService { /// <summary> /// The _app host diff --git a/MediaBrowser.Api/Library/LibraryStructureService.cs b/MediaBrowser.Api/Library/LibraryStructureService.cs index 0ae73ed457..072e37e683 100644 --- a/MediaBrowser.Api/Library/LibraryStructureService.cs +++ b/MediaBrowser.Api/Library/LibraryStructureService.cs @@ -129,7 +129,7 @@ namespace MediaBrowser.Api.Library /// <summary> /// Class LibraryStructureService /// </summary> - public class LibraryStructureService : BaseRestService + public class LibraryStructureService : BaseApiService { /// <summary> /// The _app paths diff --git a/MediaBrowser.Api/LocalizationService.cs b/MediaBrowser.Api/LocalizationService.cs index ed5de76835..b7788326e6 100644 --- a/MediaBrowser.Api/LocalizationService.cs +++ b/MediaBrowser.Api/LocalizationService.cs @@ -40,7 +40,7 @@ namespace MediaBrowser.Api /// <summary> /// Class CulturesService /// </summary> - public class LocalizationService : BaseRestService + public class LocalizationService : BaseApiService { /// <summary> /// Gets the specified request. diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 58564fc900..fe5004f87a 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -81,6 +81,7 @@ <Compile Include="..\SharedVersion.cs"> <Link>Properties\SharedVersion.cs</Link> </Compile> + <Compile Include="BaseApiService.cs" /> <Compile Include="EnvironmentService.cs" /> <Compile Include="Images\ImageRequest.cs" /> <Compile Include="Images\ImageService.cs" /> diff --git a/MediaBrowser.Api/PackageService.cs b/MediaBrowser.Api/PackageService.cs index b09830c546..a741eff410 100644 --- a/MediaBrowser.Api/PackageService.cs +++ b/MediaBrowser.Api/PackageService.cs @@ -104,7 +104,7 @@ namespace MediaBrowser.Api /// <summary> /// Class PackageService /// </summary> - public class PackageService : BaseRestService + public class PackageService : BaseApiService { private readonly IInstallationManager _installationManager; private readonly IApplicationHost _appHost; diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 570c6eea05..03068c4c7f 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -21,7 +21,7 @@ namespace MediaBrowser.Api.Playback /// <summary> /// Class BaseStreamingService /// </summary> - public abstract class BaseStreamingService : BaseRestService + public abstract class BaseStreamingService : BaseApiService { /// <summary> /// Gets or sets the application paths. diff --git a/MediaBrowser.Api/PluginService.cs b/MediaBrowser.Api/PluginService.cs index 3f41460203..074d51b447 100644 --- a/MediaBrowser.Api/PluginService.cs +++ b/MediaBrowser.Api/PluginService.cs @@ -126,7 +126,7 @@ namespace MediaBrowser.Api /// <summary> /// Class PluginsService /// </summary> - public class PluginService : BaseRestService + public class PluginService : BaseApiService { /// <summary> /// The _json serializer diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs index 204610cddf..a20013b128 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs @@ -83,7 +83,7 @@ namespace MediaBrowser.Api.ScheduledTasks /// <summary> /// Class ScheduledTasksService /// </summary> - public class ScheduledTaskService : BaseRestService + public class ScheduledTaskService : BaseApiService { /// <summary> /// Gets or sets the task manager. diff --git a/MediaBrowser.Api/SystemService.cs b/MediaBrowser.Api/SystemService.cs index a0137652e9..cddcd199c9 100644 --- a/MediaBrowser.Api/SystemService.cs +++ b/MediaBrowser.Api/SystemService.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.System; -using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.IO; @@ -59,7 +58,7 @@ namespace MediaBrowser.Api /// <summary> /// Class SystemInfoService /// </summary> - public class SystemService : BaseRestService + public class SystemService : BaseApiService { /// <summary> /// The _json serializer diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 0a013e90a8..ff914c8c54 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -16,7 +16,7 @@ namespace MediaBrowser.Api.UserLibrary /// Class BaseItemsByNameService /// </summary> /// <typeparam name="TItemType">The type of the T item type.</typeparam> - public abstract class BaseItemsByNameService<TItemType> : BaseRestService + public abstract class BaseItemsByNameService<TItemType> : BaseApiService where TItemType : BaseItem { /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index e5e88b4388..09796c67f1 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -112,7 +112,7 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Class ItemsService /// </summary> - public class ItemsService : BaseRestService + public class ItemsService : BaseApiService { /// <summary> /// The _user manager diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 9e2d54448c..3e0c2a960f 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -6,6 +6,7 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; using MediaBrowser.Server.Implementations.HttpServer; +using MediaBrowser.Server.Implementations.Library; using ServiceStack.ServiceHost; using ServiceStack.Text.Controller; using System; @@ -347,7 +348,7 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Class UserLibraryService /// </summary> - public class UserLibraryService : BaseRestService + public class UserLibraryService : BaseApiService { /// <summary> /// The _user manager @@ -592,7 +593,16 @@ namespace MediaBrowser.Api.UserLibrary var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); - _userManager.OnPlaybackStart(user, item, ClientType.Other, string.Empty); + var auth = RequestFilterAttribute.GetAuthorization(Request); + + if (auth != null) + { + ClientType clientType; + + Enum.TryParse(auth["Client"] ?? string.Empty, out clientType); + + _userManager.OnPlaybackStart(user, item, clientType, auth["DeviceId"], auth["Device"] ?? string.Empty); + } } /// <summary> @@ -605,9 +615,18 @@ namespace MediaBrowser.Api.UserLibrary var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); - var task = _userManager.OnPlaybackProgress(user, item, request.PositionTicks, ClientType.Other, string.Empty); + var auth = RequestFilterAttribute.GetAuthorization(Request); - Task.WaitAll(task); + if (auth != null) + { + ClientType clientType; + + Enum.TryParse(auth["Client"] ?? string.Empty, out clientType); + + var task = _userManager.OnPlaybackProgress(user, item, request.PositionTicks, clientType, auth["DeviceId"], auth["Device"] ?? string.Empty); + + Task.WaitAll(task); + } } /// <summary> @@ -620,9 +639,18 @@ namespace MediaBrowser.Api.UserLibrary var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); - var task = _userManager.OnPlaybackStopped(user, item, request.PositionTicks, ClientType.Other, string.Empty); + var auth = RequestFilterAttribute.GetAuthorization(Request); - Task.WaitAll(task); + if (auth != null) + { + ClientType clientType; + + Enum.TryParse(auth["Client"] ?? string.Empty, out clientType); + + var task = _userManager.OnPlaybackStopped(user, item, request.PositionTicks, clientType, auth["DeviceId"], auth["Device"] ?? string.Empty); + + Task.WaitAll(task); + } } /// <summary> diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index 1bb1f2e412..b0a5bf4ebb 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -126,7 +126,7 @@ namespace MediaBrowser.Api /// <summary> /// Class UsersService /// </summary> - public class UserService : BaseRestService + public class UserService : BaseApiService { /// <summary> /// The _XML serializer diff --git a/MediaBrowser.Api/WeatherService.cs b/MediaBrowser.Api/WeatherService.cs index f2ba68113e..2b1eb53b74 100644 --- a/MediaBrowser.Api/WeatherService.cs +++ b/MediaBrowser.Api/WeatherService.cs @@ -25,7 +25,7 @@ namespace MediaBrowser.Api /// <summary> /// Class WeatherService /// </summary> - public class WeatherService : BaseRestService + public class WeatherService : BaseApiService { /// <summary> /// Gets the specified request. |
