aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/BaseApiService.cs118
-rw-r--r--MediaBrowser.Api/EnvironmentService.cs2
-rw-r--r--MediaBrowser.Api/Images/ImageService.cs2
-rw-r--r--MediaBrowser.Api/Library/LibraryService.cs2
-rw-r--r--MediaBrowser.Api/Library/LibraryStructureService.cs2
-rw-r--r--MediaBrowser.Api/LocalizationService.cs2
-rw-r--r--MediaBrowser.Api/MediaBrowser.Api.csproj1
-rw-r--r--MediaBrowser.Api/PackageService.cs2
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs2
-rw-r--r--MediaBrowser.Api/PluginService.cs2
-rw-r--r--MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs2
-rw-r--r--MediaBrowser.Api/SystemService.cs3
-rw-r--r--MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs2
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs2
-rw-r--r--MediaBrowser.Api/UserLibrary/UserLibraryService.cs40
-rw-r--r--MediaBrowser.Api/UserService.cs2
-rw-r--r--MediaBrowser.Api/WeatherService.cs2
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.
+ /// &lt;0 Executed before global request filters
+ /// &gt;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.