#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;
// Validate web content path
string webContentPath = DashboardUIPath;
bool webContentPathValid = appConfig.NoWebContent() || (Directory.Exists(webContentPath) && Directory.GetFiles(webContentPath).Any());
if (!webContentPathValid)
{
throw new InvalidOperationException(
"The server is expected to host web content, but the provided content directory is either " +
$"invalid or empty: {webContentPath}. If you do not want to host web content with the server, " +
$"you may set the '{Controller.Extensions.ConfigurationExtensions.NoWebContentKey}' flag.");
}
}
///
/// 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 static web content.
///
public string DashboardUIPath
{
get
{
if (_appConfig.NoWebContent())
{
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