diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-10-28 19:17:55 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-10-28 19:17:55 -0400 |
| commit | 5ca4d60c34c7ead76c388bd2c3ca192b38aae1f0 (patch) | |
| tree | 9e9bc711c6b422c7f3eabdac5cd3cf2a8e5a11b8 | |
| parent | 67528a07992326472a4e6dfe826ddcc5358a6f67 (diff) | |
connect updates
30 files changed, 190 insertions, 88 deletions
diff --git a/MediaBrowser.Api/System/SystemService.cs b/MediaBrowser.Api/System/SystemService.cs index 3fb17f74e..9d22d8dfa 100644 --- a/MediaBrowser.Api/System/SystemService.cs +++ b/MediaBrowser.Api/System/SystemService.cs @@ -19,7 +19,7 @@ namespace MediaBrowser.Api.System /// Class GetSystemInfo /// </summary> [Route("/System/Info", "GET", Summary = "Gets information about the server")] - [Authenticated] + [Authenticated(EscapeParentalControl = true)] public class GetSystemInfo : IReturn<SystemInfo> { diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index 48bd2fc1e..ec0b853c5 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -43,7 +43,7 @@ namespace MediaBrowser.Api /// Class GetUser /// </summary> [Route("/Users/{Id}", "GET", Summary = "Gets a user by Id")] - [Authenticated] + [Authenticated(EscapeParentalControl = true)] public class GetUser : IReturn<UserDto> { /// <summary> diff --git a/MediaBrowser.Controller/Entities/AdultVideo.cs b/MediaBrowser.Controller/Entities/AdultVideo.cs index 90e54c887..ec2913ab4 100644 --- a/MediaBrowser.Controller/Entities/AdultVideo.cs +++ b/MediaBrowser.Controller/Entities/AdultVideo.cs @@ -5,19 +5,8 @@ using System.Collections.Generic; namespace MediaBrowser.Controller.Entities { [Obsolete] - public class AdultVideo : Video, IHasProductionLocations, IHasPreferredMetadataLanguage, IHasTaglines + public class AdultVideo : Video, IHasProductionLocations, IHasTaglines { - /// <summary> - /// Gets or sets the preferred metadata language. - /// </summary> - /// <value>The preferred metadata language.</value> - public string PreferredMetadataLanguage { get; set; } - - /// <summary> - /// Gets or sets the preferred metadata country code. - /// </summary> - /// <value>The preferred metadata country code.</value> - public string PreferredMetadataCountryCode { get; set; } public List<string> ProductionLocations { get; set; } public List<string> Taglines { get; set; } diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index 8d2f19d4c..c0afe3df9 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Entities.Movies /// <summary> /// Class Movie /// </summary> - public class Movie : Video, IHasCriticRating, IHasSoundtracks, IHasSpecialFeatures, IHasProductionLocations, IHasBudget, IHasKeywords, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasPreferredMetadataLanguage, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping + public class Movie : Video, IHasCriticRating, IHasSoundtracks, IHasSpecialFeatures, IHasProductionLocations, IHasBudget, IHasKeywords, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping { public List<Guid> SpecialFeatureIds { get; set; } @@ -30,14 +30,6 @@ namespace MediaBrowser.Controller.Entities.Movies [IgnoreDataMember] public List<Guid> BoxSetIdList { get; set; } - /// <summary> - /// Gets or sets the preferred metadata country code. - /// </summary> - /// <value>The preferred metadata country code.</value> - public string PreferredMetadataCountryCode { get; set; } - - public string PreferredMetadataLanguage { get; set; } - public Movie() { SpecialFeatureIds = new List<Guid>(); diff --git a/MediaBrowser.Controller/Entities/Trailer.cs b/MediaBrowser.Controller/Entities/Trailer.cs index 450555b3d..bbbf2358f 100644 --- a/MediaBrowser.Controller/Entities/Trailer.cs +++ b/MediaBrowser.Controller/Entities/Trailer.cs @@ -12,19 +12,12 @@ namespace MediaBrowser.Controller.Entities /// <summary> /// Class Trailer /// </summary> - public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasProductionLocations, IHasBudget, IHasTrailers, IHasKeywords, IHasTaglines, IHasPreferredMetadataLanguage, IHasMetascore, IHasLookupInfo<TrailerInfo> + public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasProductionLocations, IHasBudget, IHasTrailers, IHasKeywords, IHasTaglines, IHasMetascore, IHasLookupInfo<TrailerInfo> { public List<Guid> SoundtrackIds { get; set; } - public string PreferredMetadataLanguage { get; set; } public List<string> ProductionLocations { get; set; } - /// <summary> - /// Gets or sets the preferred metadata country code. - /// </summary> - /// <value>The preferred metadata country code.</value> - public string PreferredMetadataCountryCode { get; set; } - public Trailer() { RemoteTrailers = new List<MediaUrl>(); diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 0b22d639e..6550f43b4 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -25,6 +25,7 @@ namespace MediaBrowser.Controller.Entities ISupportsPlaceHolders, IHasMediaSources, IHasShortOverview, + IHasPreferredMetadataLanguage, IThemeMedia { public bool IsMultiPart { get; set; } @@ -44,6 +45,13 @@ namespace MediaBrowser.Controller.Entities public ExtraType ExtraType { get; set; } /// <summary> + /// Gets or sets the preferred metadata country code. + /// </summary> + /// <value>The preferred metadata country code.</value> + public string PreferredMetadataCountryCode { get; set; } + public string PreferredMetadataLanguage { get; set; } + + /// <summary> /// Gets or sets the timestamp. /// </summary> /// <value>The timestamp.</value> diff --git a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs index f2fa912ca..df118b25f 100644 --- a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs +++ b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs @@ -50,6 +50,11 @@ namespace MediaBrowser.Controller.LiveTv } } + public override bool IsSaveLocalMetadataEnabled() + { + return true; + } + /// <summary> /// Gets or sets the number. /// </summary> diff --git a/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs b/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs index 31bb7c66b..83e404dfc 100644 --- a/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs +++ b/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs @@ -1,10 +1,11 @@ using ServiceStack.Web; using System; +using System.Collections.Generic; using System.Linq; namespace MediaBrowser.Controller.Net { - public class AuthenticatedAttribute : Attribute, IHasRequestFilter + public class AuthenticatedAttribute : Attribute, IHasRequestFilter, IAuthenticated { public IAuthService AuthService { get; set; } @@ -14,9 +15,19 @@ namespace MediaBrowser.Controller.Net /// <value><c>true</c> if [allow local]; otherwise, <c>false</c>.</value> public bool AllowLocal { get; set; } + /// <summary> + /// Gets or sets the roles. + /// </summary> + /// <value>The roles.</value> public string Roles { get; set; } /// <summary> + /// Gets or sets a value indicating whether [escape parental control]. + /// </summary> + /// <value><c>true</c> if [escape parental control]; otherwise, <c>false</c>.</value> + public bool EscapeParentalControl { get; set; } + + /// <summary> /// The request filter is executed before the service. /// </summary> /// <param name="request">The http request wrapper</param> @@ -24,11 +35,7 @@ namespace MediaBrowser.Controller.Net /// <param name="requestDto">The request DTO</param> public void RequestFilter(IRequest request, IResponse response, object requestDto) { - var roles = (Roles ?? string.Empty).Split(',') - .Where(i => !string.IsNullOrWhiteSpace(i)) - .ToArray(); - - AuthService.Authenticate(request, response, requestDto, AllowLocal, roles); + AuthService.Authenticate(request, response, requestDto, this); } /// <summary> @@ -50,5 +57,20 @@ namespace MediaBrowser.Controller.Net { get { return 0; } } + + + public IEnumerable<string> GetRoles() + { + return (Roles ?? string.Empty).Split(',') + .Where(i => !string.IsNullOrWhiteSpace(i)); + } + } + + public interface IAuthenticated + { + bool EscapeParentalControl { get; } + + bool AllowLocal { get; } + IEnumerable<string> GetRoles(); } } diff --git a/MediaBrowser.Controller/Net/IAuthService.cs b/MediaBrowser.Controller/Net/IAuthService.cs index 69014d0ff..9d335566f 100644 --- a/MediaBrowser.Controller/Net/IAuthService.cs +++ b/MediaBrowser.Controller/Net/IAuthService.cs @@ -1,5 +1,4 @@ using ServiceStack.Web; -using System.Collections.Generic; namespace MediaBrowser.Controller.Net { @@ -8,7 +7,6 @@ namespace MediaBrowser.Controller.Net void Authenticate(IRequest request, IResponse response, object requestDto, - bool allowLocal, - string[] roles); + IAuthenticated authAttribtues); } } diff --git a/MediaBrowser.Controller/Playlists/Playlist.cs b/MediaBrowser.Controller/Playlists/Playlist.cs index f7bd439a3..75e1bbde7 100644 --- a/MediaBrowser.Controller/Playlists/Playlist.cs +++ b/MediaBrowser.Controller/Playlists/Playlist.cs @@ -33,6 +33,11 @@ namespace MediaBrowser.Controller.Playlists } } + public override bool IsSaveLocalMetadataEnabled() + { + return true; + } + public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren) { return GetPlayableItems(user); diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index a24f0cd2c..627b7a266 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -74,6 +74,9 @@ <Compile Include="..\MediaBrowser.Model\ApiClient\ApiClientExtensions.cs"> <Link>ApiClient\ApiClientExtensions.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\ApiClient\ApiHelpers.cs"> + <Link>ApiClient\ApiHelpers.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\ApiClient\ConnectionMode.cs"> <Link>ApiClient\ConnectionMode.cs</Link> </Compile> @@ -104,6 +107,9 @@ <Compile Include="..\MediaBrowser.Model\ApiClient\IServerEvents.cs"> <Link>ApiClient\IServerEvents.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\ApiClient\RemoteLogoutReason.cs"> + <Link>ApiClient\RemoteLogoutReason.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\ApiClient\ServerCredentials.cs"> <Link>ApiClient\ServerCredentials.cs</Link> </Compile> diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index d03672966..7c3235eed 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -54,6 +54,9 @@ <Compile Include="..\mediabrowser.model\activity\ActivityLogEntry.cs"> <Link>Activity\ActivityLogEntry.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\ApiClient\ApiHelpers.cs"> + <Link>ApiClient\ApiHelpers.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\ApiClient\ConnectionMode.cs"> <Link>ApiClient\ConnectionMode.cs</Link> </Compile> @@ -69,6 +72,9 @@ <Compile Include="..\MediaBrowser.Model\ApiClient\IServerEvents.cs"> <Link>ApiClient\IServerEvents.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\ApiClient\RemoteLogoutReason.cs"> + <Link>ApiClient\RemoteLogoutReason.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\ApiClient\ServerCredentials.cs"> <Link>ApiClient\ServerCredentials.cs</Link> </Compile> diff --git a/MediaBrowser.Model/ApiClient/ApiHelpers.cs b/MediaBrowser.Model/ApiClient/ApiHelpers.cs new file mode 100644 index 000000000..65b6495ab --- /dev/null +++ b/MediaBrowser.Model/ApiClient/ApiHelpers.cs @@ -0,0 +1,22 @@ +using System; + +namespace MediaBrowser.Model.ApiClient +{ + public static class ApiHelpers + { + /// <summary> + /// Gets the name of the slug. + /// </summary> + /// <param name="name">The name.</param> + /// <returns>System.String.</returns> + public static string GetSlugName(string name) + { + if (string.IsNullOrEmpty(name)) + { + throw new ArgumentNullException("name"); + } + + return name.Replace('/', '-').Replace('?', '-').Replace('&', '-'); + } + } +} diff --git a/MediaBrowser.Model/ApiClient/ConnectionState.cs b/MediaBrowser.Model/ApiClient/ConnectionState.cs index 63e156eb1..5e47d688e 100644 --- a/MediaBrowser.Model/ApiClient/ConnectionState.cs +++ b/MediaBrowser.Model/ApiClient/ConnectionState.cs @@ -5,6 +5,7 @@ namespace MediaBrowser.Model.ApiClient Unavailable = 1, ServerSignIn = 2, SignedIn = 3, - ServerSelection = 4 + ServerSelection = 4, + ConnectSignIn = 5 } }
\ No newline at end of file diff --git a/MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs b/MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs index 417db404f..b1c19f056 100644 --- a/MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs +++ b/MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Net; namespace MediaBrowser.Model.ApiClient @@ -18,5 +19,15 @@ namespace MediaBrowser.Model.ApiClient /// </summary> /// <value>The status code.</value> public HttpStatusCode StatusCode { get; set; } + /// <summary> + /// Gets or sets the headers. + /// </summary> + /// <value>The headers.</value> + public Dictionary<string, string> Headers { get; set; } + + public HttpResponseEventArgs() + { + Headers = new Dictionary<string, string>(); + } } } diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index bc909284b..89c731223 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -32,7 +32,7 @@ namespace MediaBrowser.Model.ApiClient /// <summary> /// Occurs when [remote logged out]. /// </summary> - event EventHandler<EventArgs> RemoteLoggedOut; + event EventHandler<GenericEventArgs<RemoteLogoutReason>> RemoteLoggedOut; /// <summary> /// Occurs when [authenticated]. diff --git a/MediaBrowser.Model/ApiClient/RemoteLogoutReason.cs b/MediaBrowser.Model/ApiClient/RemoteLogoutReason.cs new file mode 100644 index 000000000..237949c69 --- /dev/null +++ b/MediaBrowser.Model/ApiClient/RemoteLogoutReason.cs @@ -0,0 +1,9 @@ + +namespace MediaBrowser.Model.ApiClient +{ + public enum RemoteLogoutReason + { + GeneralAccesError = 0, + ParentalControlRestriction = 1 + } +} diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 549023303..24bf2c93c 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -60,6 +60,7 @@ <Link>Properties\SharedVersion.cs</Link> </Compile> <Compile Include="Activity\ActivityLogEntry.cs" /> + <Compile Include="ApiClient\ApiHelpers.cs" /> <Compile Include="ApiClient\ConnectionMode.cs" /> <Compile Include="ApiClient\ConnectionResult.cs" /> <Compile Include="ApiClient\ConnectionState.cs" /> @@ -71,6 +72,7 @@ <Compile Include="ApiClient\IDevice.cs" /> <Compile Include="ApiClient\IServerEvents.cs" /> <Compile Include="ApiClient\GeneralCommandEventArgs.cs" /> + <Compile Include="ApiClient\RemoteLogoutReason.cs" /> <Compile Include="ApiClient\ServerCredentials.cs" /> <Compile Include="ApiClient\ServerDiscoveryInfo.cs" /> <Compile Include="ApiClient\ServerInfo.cs" /> diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 1f46ee488..e27c39df1 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -350,6 +350,7 @@ namespace MediaBrowser.Providers.Manager { var remoteResult = await ExecuteRemoteProviders(item, temp, logName, id, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), cancellationToken) .ConfigureAwait(false); + refreshResult.UpdateType = refreshResult.UpdateType | remoteResult.UpdateType; refreshResult.Status = remoteResult.Status; refreshResult.ErrorMessage = remoteResult.ErrorMessage; @@ -359,8 +360,9 @@ namespace MediaBrowser.Providers.Manager var hasLocalMetadata = false; var userDataList = new List<UserItemData>(); + var localProviders = providers.OfType<ILocalMetadataProvider<TItemType>>().ToList(); - foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>()) + foreach (var provider in localProviders) { var providerName = provider.GetType().Name; Logger.Debug("Running {0} for {1}", providerName, logName); @@ -428,6 +430,16 @@ namespace MediaBrowser.Providers.Manager successfulProviderCount += remoteResult.Successes; } + // If no local providers and doing a full refresh, take data from item itself + if (options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh && + localProviders.Count == 0 && + refreshResult.UpdateType > ItemUpdateType.None) + { + // TODO: If the new metadata from above has some blank data, this + // can cause old data to get filled into those empty fields + MergeData(item, temp, new List<MetadataFields>(), false, true); + } + if (refreshResult.UpdateType > ItemUpdateType.None) { MergeData(temp, item, item.LockedFields, true, true); @@ -598,7 +610,11 @@ namespace MediaBrowser.Providers.Manager } } - protected abstract void MergeData(TItemType source, TItemType target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings); + protected abstract void MergeData(TItemType source, + TItemType target, + List<MetadataFields> lockedFields, + bool replaceData, + bool mergeMetadataSettings); public virtual int Order { diff --git a/MediaBrowser.Providers/Manager/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs index 2c19c3312..155cd208f 100644 --- a/MediaBrowser.Providers/Manager/ProviderUtils.cs +++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs @@ -8,7 +8,11 @@ namespace MediaBrowser.Providers.Manager { public static class ProviderUtils { - public static void MergeBaseItemData(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings) + public static void MergeBaseItemData(BaseItem source, + BaseItem target, + List<MetadataFields> lockedFields, + bool replaceData, + bool mergeMetadataSettings) { if (!lockedFields.Contains(MetadataFields.Name)) { @@ -191,36 +195,42 @@ namespace MediaBrowser.Providers.Manager if (mergeMetadataSettings) { - target.ForcedSortName = source.ForcedSortName; - target.LockedFields = source.LockedFields; - target.IsLocked = source.IsLocked; - target.DisplayMediaType = source.DisplayMediaType; + MergeMetadataSettings(source, target); + } + } - // Grab the value if it's there, but if not then don't overwrite the default - if (source.DateCreated != default(DateTime)) - { - target.DateCreated = source.DateCreated; - } + public static void MergeMetadataSettings(BaseItem source, + BaseItem target) + { + target.ForcedSortName = source.ForcedSortName; + target.LockedFields = source.LockedFields; + target.IsLocked = source.IsLocked; + target.DisplayMediaType = source.DisplayMediaType; - var sourceHasLanguageSettings = source as IHasPreferredMetadataLanguage; - var targetHasLanguageSettings = target as IHasPreferredMetadataLanguage; + // Grab the value if it's there, but if not then don't overwrite the default + if (source.DateCreated != default(DateTime)) + { + target.DateCreated = source.DateCreated; + } - if (sourceHasLanguageSettings != null && targetHasLanguageSettings != null) - { - targetHasLanguageSettings.PreferredMetadataCountryCode = sourceHasLanguageSettings.PreferredMetadataCountryCode; - targetHasLanguageSettings.PreferredMetadataLanguage = sourceHasLanguageSettings.PreferredMetadataLanguage; - } + var sourceHasLanguageSettings = source as IHasPreferredMetadataLanguage; + var targetHasLanguageSettings = target as IHasPreferredMetadataLanguage; - var sourceHasDisplayOrder = source as IHasDisplayOrder; - var targetHasDisplayOrder = target as IHasDisplayOrder; + if (sourceHasLanguageSettings != null && targetHasLanguageSettings != null) + { + targetHasLanguageSettings.PreferredMetadataCountryCode = sourceHasLanguageSettings.PreferredMetadataCountryCode; + targetHasLanguageSettings.PreferredMetadataLanguage = sourceHasLanguageSettings.PreferredMetadataLanguage; + } - if (sourceHasDisplayOrder != null && targetHasDisplayOrder != null) - { - targetHasDisplayOrder.DisplayOrder = sourceHasDisplayOrder.DisplayOrder; - } + var sourceHasDisplayOrder = source as IHasDisplayOrder; + var targetHasDisplayOrder = target as IHasDisplayOrder; + + if (sourceHasDisplayOrder != null && targetHasDisplayOrder != null) + { + targetHasDisplayOrder.DisplayOrder = sourceHasDisplayOrder.DisplayOrder; } } - + private static void MergeShortOverview(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData) { var sourceHasShortOverview = source as IHasShortOverview; diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs index 4972736ef..a750dd82e 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -235,14 +235,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer { return; } - + var errorResponse = new ErrorResponse { ResponseStatus = new ResponseStatus { ErrorCode = ex.GetType().GetOperationName(), Message = ex.Message, - StackTrace = ex.StackTrace, + StackTrace = ex.StackTrace } }; diff --git a/MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs b/MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs index e0a5764d5..23ecde191 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs @@ -94,7 +94,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer /// </summary> /// <param name="inString">The in string.</param> /// <returns>System.String.</returns> - private static string RemoveControlCharacters(string inString) + public static string RemoveControlCharacters(string inString) { if (inString == null) return null; diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs index a1a68586b..3a2bd7b75 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Session; @@ -45,8 +44,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security public void Authenticate(IRequest request, IResponse response, object requestDto, - bool allowLocal, - string[] roles) + IAuthenticated authAttribtues) { if (HostContext.HasValidAuthSecret(request)) return; @@ -54,16 +52,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security //ExecuteBasic(req, res, requestDto); //first check if session is authenticated //if (res.IsClosed) return; //AuthenticateAttribute already closed the request (ie auth failed) - ValidateUser(request, allowLocal, roles); + ValidateUser(request, response, authAttribtues); } - private void ValidateUser(IRequest req, bool allowLocal, - IEnumerable<string> roles) + private void ValidateUser(IRequest req, IResponse response, IAuthenticated authAttribtues) { // This code is executed before the service var auth = AuthorizationContext.GetAuthorizationInfo(req); - if (!allowLocal || !req.IsLocal) + if (!authAttribtues.AllowLocal || !req.IsLocal) { if (!string.IsNullOrWhiteSpace(auth.Token) || !_config.Configuration.InsecureApps2.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase)) @@ -91,12 +88,17 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security throw new AuthenticationException("User account has been disabled."); } - if (!user.Configuration.IsAdministrator && !user.IsParentalScheduleAllowed()) + if (!user.Configuration.IsAdministrator && + !authAttribtues.EscapeParentalControl && + !user.IsParentalScheduleAllowed()) { + response.AddHeader("X-Application-Error-Code", "ParentalControl"); throw new AuthenticationException("This user account is not allowed access at this time."); } } + var roles = authAttribtues.GetRoles().ToList(); + if (roles.Contains("admin", StringComparer.OrdinalIgnoreCase)) { if (user == null || !user.Configuration.IsAdministrator) diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index 7b5fd2da6..9a7d24a70 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -619,6 +619,7 @@ "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.", "HeaderConnectionFailure": "Connection Failure", "MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later.", - "ButtonSelectServer": "Select server", - "MessagePluginConfigurationRequiresLocalAccess": "To configure this plugin please sign in to your local server directly." + "ButtonSelectServer": "Select server", + "MessagePluginConfigurationRequiresLocalAccess": "To configure this plugin please sign in to your local server directly.", + "MessageLoggedOutParentalControl": "Access is currently restricted. Please try again later." } diff --git a/MediaBrowser.WebDashboard/Api/PackageCreator.cs b/MediaBrowser.WebDashboard/Api/PackageCreator.cs index 09bda8efe..e835f6d49 100644 --- a/MediaBrowser.WebDashboard/Api/PackageCreator.cs +++ b/MediaBrowser.WebDashboard/Api/PackageCreator.cs @@ -265,6 +265,7 @@ namespace MediaBrowser.WebDashboard.Api "thirdparty/apiclient/md5.js", "thirdparty/apiclient/sha1.js", "thirdparty/apiclient/store.js", + "thirdparty/apiclient/network.js", "thirdparty/apiclient/device.js", "thirdparty/apiclient/credentials.js", "thirdparty/apiclient/mediabrowser.apiclient.js", diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index dddf9c631..b657acc65 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -920,6 +920,9 @@ <Content Include="dashboard-ui\thirdparty\apiclient\credentials.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\thirdparty\apiclient\network.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\thirdparty\apiclient\sha1.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 23d51c9f5..e1aec93a3 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common.Internal</id> - <version>3.0.501</version> + <version>3.0.502</version> <title>MediaBrowser.Common.Internal</title> <authors>Luke</authors> <owners>ebr,Luke,scottisafool</owners> @@ -12,7 +12,7 @@ <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> - <dependency id="MediaBrowser.Common" version="3.0.501" /> + <dependency id="MediaBrowser.Common" version="3.0.502" /> <dependency id="NLog" version="3.1.0.0" /> <dependency id="SimpleInjector" version="2.6.0" /> <dependency id="sharpcompress" version="0.10.2" /> diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 41a81d816..e467bae2d 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common</id> - <version>3.0.501</version> + <version>3.0.502</version> <title>MediaBrowser.Common</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index afd9c64a7..093eb066e 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Model.Signed</id> - <version>3.0.501</version> + <version>3.0.502</version> <title>MediaBrowser.Model - Signed Edition</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 5e9b013d0..ca8aa13fa 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>MediaBrowser.Server.Core</id> - <version>3.0.501</version> + <version>3.0.502</version> <title>Media Browser.Server.Core</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> @@ -12,7 +12,7 @@ <description>Contains core components required to build plugins for Media Browser Server.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> - <dependency id="MediaBrowser.Common" version="3.0.501" /> + <dependency id="MediaBrowser.Common" version="3.0.502" /> </dependencies> </metadata> <files> |
