#pragma warning disable CS1591
#pragma warning disable SA1402
#pragma warning disable SA1649
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Extensions;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Plugins;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Plugins;
using MediaBrowser.Model.Services;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace MediaBrowser.WebDashboard.Api
{
///
/// Class GetDashboardConfigurationPages.
///
[Route("/web/ConfigurationPages", "GET")]
public class GetDashboardConfigurationPages : IReturn>
{
///
/// Gets or sets the type of the page.
///
/// The type of the page.
public ConfigurationPageType? PageType { get; set; }
public bool? EnableInMainMenu { get; set; }
}
///
/// Class GetDashboardConfigurationPage.
///
[Route("/web/ConfigurationPage", "GET")]
public class GetDashboardConfigurationPage
{
///
/// Gets or sets the name.
///
/// The name.
public string Name { get; set; }
}
[Route("/web/Package", "GET", IsHidden = true)]
public class GetDashboardPackage
{
public string Mode { get; set; }
}
[Route("/robots.txt", "GET", IsHidden = true)]
public class GetRobotsTxt
{
}
///
/// Class GetDashboardResource.
///
[Route("/web/{ResourceName*}", "GET", IsHidden = true)]
public class GetDashboardResource
{
///
/// Gets or sets the name.
///
/// The name.
public string ResourceName { get; set; }
///
/// Gets or sets the V.
///
/// The V.
public string V { get; set; }
}
[Route("/favicon.ico", "GET", IsHidden = true)]
public class GetFavIcon
{
}
///
/// Class DashboardService.
///
public class DashboardService : IService, IRequiresRequest
{
///
/// Gets or sets the logger.
///
/// The logger.
private readonly ILogger _logger;
///
/// Gets or sets the HTTP result factory.
///
/// The HTTP result factory.
private readonly IHttpResultFactory _resultFactory;
private readonly IServerApplicationHost _appHost;
private readonly IConfiguration _appConfig;
private readonly IServerConfigurationManager _serverConfigurationManager;
private readonly IFileSystem _fileSystem;
private readonly IResourceFileManager _resourceFileManager;
///
/// Initializes a new instance of the class.
///
/// The logger.
/// The application host.
/// The application configuration.
/// The resource file manager.
/// The server configuration manager.
/// The file system.
/// The result factory.
public DashboardService(
ILogger logger,
IServerApplicationHost appHost,
IConfiguration appConfig,
IResourceFileManager resourceFileManager,
IServerConfigurationManager serverConfigurationManager,
IFileSystem fileSystem,
IHttpResultFactory resultFactory)
{
_logger = logger;
_appHost = appHost;
_appConfig = appConfig;
_resourceFileManager = resourceFileManager;
_serverConfigurationManager = serverConfigurationManager;
_fileSystem = fileSystem;
_resultFactory = resultFactory;
// If hosting the web client, validate the client content path
if (appConfig.HostWebClient())
{
string webContentPath = DashboardUIPath;
if (!Directory.Exists(webContentPath) || Directory.GetFiles(webContentPath).Length == 0)
{
throw new InvalidOperationException(
"The server is expected to host the web client, but the provided content directory is either " +
$"invalid or empty: {webContentPath}. If you do not want to host the web client with the " +
"server, you may set the '--nowebclient' command line flag, or set" +
$"'{Controller.Extensions.ConfigurationExtensions.HostWebClientKey}=false' in your config settings.");
}
}
}
///
/// Gets or sets the request context.
///
/// The request context.
public IRequest Request { get; set; }
///
/// Gets the path of the directory containing the static web interface content, or null if the server is not
/// hosting the web client.
///
public string DashboardUIPath
{
get
{
if (!_appConfig.HostWebClient())
{
return null;
}
if (!string.IsNullOrEmpty(_serverConfigurationManager.Configuration.DashboardSourcePath))
{
return _serverConfigurationManager.Configuration.DashboardSourcePath;
}
return _serverConfigurationManager.ApplicationPaths.WebPath;
}
}
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "request", Justification = "Required for ServiceStack")]
public object Get(GetFavIcon request)
{
return Get(new GetDashboardResource
{
ResourceName = "favicon.ico"
});
}
///
/// Gets the specified request.
///
/// The request.
/// System.Object.
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "request", Justification = "Required for ServiceStack")]
public Task