tgstation-server 6.17.0
The /tg/station 13 server suite
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | Private Attributes | Static Private Attributes | List of all members
Tgstation.Server.Host.Controllers.ControlPanelController Class Reference

Controller for the web control panel. More...

Inheritance diagram for Tgstation.Server.Host.Controllers.ControlPanelController:
Inheritance graph
[legend]
Collaboration diagram for Tgstation.Server.Host.Controllers.ControlPanelController:
Collaboration graph
[legend]

Public Member Functions

 ControlPanelController (IWebHostEnvironment hostEnvironment, IOptions< ControlPanelConfiguration > controlPanelConfigurationOptions, ILogger< ControlPanelController > logger)
 Initializes a new instance of the ControlPanelController class.
 
IActionResult GetChannelJson ()
 Returns the ControlPanelConfiguration.Channel.
 
override Task OnActionExecutionAsync (ActionExecutingContext context, ActionExecutionDelegate next)
 
IActionResult Get ([FromRoute] string appRoute)
 Handle a GET request to the control panel route. Route to static files if they exist, otherwise index.html.
 

Static Public Attributes

const string ControlPanelRoute = "/app"
 Route to the ControlPanelController.
 
const string ChannelJsonRoute = "channel.json"
 The route to the control panel channel .json.
 

Private Attributes

readonly IWebHostEnvironment hostEnvironment
 The IWebHostEnvironment for the ControlPanelController.
 
readonly ILogger< ControlPanelControllerlogger
 The ILogger for the ControlPanelController.
 
readonly ControlPanelConfiguration controlPanelConfiguration
 The ControlPanelConfiguration for the ControlPanelController.
 

Static Private Attributes

const string FetchChannelVaryHeader = "X-Webpanel-Fetch-Channel"
 Header for forcing channel.json to be fetched.
 

Detailed Description

Controller for the web control panel.

Definition at line 26 of file ControlPanelController.cs.

Constructor & Destructor Documentation

◆ ControlPanelController()

Tgstation.Server.Host.Controllers.ControlPanelController.ControlPanelController ( IWebHostEnvironment  hostEnvironment,
IOptions< ControlPanelConfiguration controlPanelConfigurationOptions,
ILogger< ControlPanelController logger 
)

Initializes a new instance of the ControlPanelController class.

Parameters
hostEnvironmentThe value of hostEnvironment.
controlPanelConfigurationOptionsThe IOptions<TOptions> containing the value of controlPanelConfiguration.
loggerThe value of logger.

Definition at line 64 of file ControlPanelController.cs.

68 {
69 this.hostEnvironment = hostEnvironment ?? throw new ArgumentNullException(nameof(hostEnvironment));
70 controlPanelConfiguration = controlPanelConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(controlPanelConfigurationOptions));
71 this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
72 }
readonly IWebHostEnvironment hostEnvironment
The IWebHostEnvironment for the ControlPanelController.
readonly ILogger< ControlPanelController > logger
The ILogger for the ControlPanelController.
readonly ControlPanelConfiguration controlPanelConfiguration
The ControlPanelConfiguration for the ControlPanelController.

References Tgstation.Server.Host.Controllers.ControlPanelController.controlPanelConfiguration, Tgstation.Server.Host.Controllers.ControlPanelController.hostEnvironment, and Tgstation.Server.Host.Controllers.ControlPanelController.logger.

Member Function Documentation

◆ Get()

IActionResult Tgstation.Server.Host.Controllers.ControlPanelController.Get ( [FromRoute] string  appRoute)

Handle a GET request to the control panel route. Route to static files if they exist, otherwise index.html.

Parameters
appRouteThe value of the route.
Returns
The VirtualFileResult to use.

Definition at line 133 of file ControlPanelController.cs.

134 {
136 {
137 logger.LogDebug("Not serving static files as control panel is disabled.");
138 return NotFound();
139 }
140
141 if (Request.Headers.ContainsKey(FetchChannelVaryHeader))
142 return GetChannelJson();
143
144 var foundFile = this.TryServeFile(hostEnvironment, logger, appRoute);
145 if (foundFile != null)
146 return foundFile;
147
148 logger.LogTrace("Requested static file \"{filename}\" does not exist! Redirecting to index...", appRoute);
149
150 return File("index.html", MediaTypeNames.Text.Html);
151 }
IActionResult GetChannelJson()
Returns the ControlPanelConfiguration.Channel.
const string FetchChannelVaryHeader
Header for forcing channel.json to be fetched.

References Tgstation.Server.Host.Controllers.ControlPanelController.controlPanelConfiguration, Tgstation.Server.Host.Configuration.ControlPanelConfiguration.Enable, Tgstation.Server.Host.Controllers.ControlPanelController.FetchChannelVaryHeader, Tgstation.Server.Host.Controllers.ControlPanelController.GetChannelJson(), Tgstation.Server.Host.Controllers.ControlPanelController.hostEnvironment, and Tgstation.Server.Host.Controllers.ControlPanelController.logger.

Here is the call graph for this function:

◆ GetChannelJson()

IActionResult Tgstation.Server.Host.Controllers.ControlPanelController.GetChannelJson ( )

Returns the ControlPanelConfiguration.Channel.

Returns
A JsonResult with the ControlPanelConfiguration.Channel.

Definition at line 80 of file ControlPanelController.cs.

81 {
83 {
84 logger.LogDebug("Not serving channel.json as control panel is disabled.");
85 return NotFound();
86 }
87
88 var controlPanelChannel = controlPanelConfiguration.Channel;
89 logger.LogTrace("Generating channel.json for channel \"{channel}\"...", controlPanelChannel);
90
91 if (controlPanelChannel == "local")
92 controlPanelChannel = ControlPanelRoute;
93 else if (String.IsNullOrWhiteSpace(controlPanelChannel))
94 controlPanelChannel = null;
95 else
96 controlPanelChannel = controlPanelChannel
97 .Replace("${Major}", ApiHeaders.Version.Major.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal)
98 .Replace("${Minor}", ApiHeaders.Version.Minor.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal)
99 .Replace("${Patch}", ApiHeaders.Version.Build.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal);
100
101 return Json(new
102 {
103 FormatVersion = 1,
104 Channel = controlPanelChannel,
106 });
107 }
Represents the header that must be present for every server request.
Definition ApiHeaders.cs:25
static readonly Version Version
Get the version of the Api the caller is using.
Definition ApiHeaders.cs:69
string? PublicPath
The public path to the TGS control panel from a wider network.
string? Channel
The channel to retrieve the webpanel from. "local" uses the bundled version.
const string ControlPanelRoute
Route to the ControlPanelController.

References Tgstation.Server.Host.Configuration.ControlPanelConfiguration.Channel, Tgstation.Server.Host.Controllers.ControlPanelController.controlPanelConfiguration, Tgstation.Server.Host.Controllers.ControlPanelController.ControlPanelRoute, Tgstation.Server.Host.Configuration.ControlPanelConfiguration.Enable, Tgstation.Server.Host.Controllers.ControlPanelController.logger, Tgstation.Server.Host.Configuration.ControlPanelConfiguration.PublicPath, and Tgstation.Server.Api.ApiHeaders.Version.

Referenced by Tgstation.Server.Host.Controllers.ControlPanelController.Get().

Here is the caller graph for this function:

◆ OnActionExecutionAsync()

override Task Tgstation.Server.Host.Controllers.ControlPanelController.OnActionExecutionAsync ( ActionExecutingContext  context,
ActionExecutionDelegate  next 
)

Definition at line 110 of file ControlPanelController.cs.

111 {
112 ArgumentNullException.ThrowIfNull(context);
113
114 var newValues = new List<string> { FetchChannelVaryHeader };
115 var headers = context.HttpContext.Response.Headers;
116 if (headers.TryGetValue(HeaderNames.Vary, out var oldValues))
117 headers.Remove(HeaderNames.Vary);
118
119 newValues.AddRange(oldValues);
120
121 headers.Add(HeaderNames.Vary, new StringValues(newValues.ToArray()));
122
123 return base.OnActionExecutionAsync(context, next);
124 }

References Tgstation.Server.Host.Controllers.ControlPanelController.FetchChannelVaryHeader.

Member Data Documentation

◆ ChannelJsonRoute

const string Tgstation.Server.Host.Controllers.ControlPanelController.ChannelJsonRoute = "channel.json"
static

The route to the control panel channel .json.

Definition at line 36 of file ControlPanelController.cs.

◆ controlPanelConfiguration

readonly ControlPanelConfiguration Tgstation.Server.Host.Controllers.ControlPanelController.controlPanelConfiguration
private

◆ ControlPanelRoute

const string Tgstation.Server.Host.Controllers.ControlPanelController.ControlPanelRoute = "/app"
static

Route to the ControlPanelController.

Definition at line 31 of file ControlPanelController.cs.

Referenced by Tgstation.Server.Host.Controllers.ControlPanelController.GetChannelJson().

◆ FetchChannelVaryHeader

const string Tgstation.Server.Host.Controllers.ControlPanelController.FetchChannelVaryHeader = "X-Webpanel-Fetch-Channel"
staticprivate

◆ hostEnvironment

readonly IWebHostEnvironment Tgstation.Server.Host.Controllers.ControlPanelController.hostEnvironment
private

◆ logger

readonly ILogger<ControlPanelController> Tgstation.Server.Host.Controllers.ControlPanelController.logger
private

The documentation for this class was generated from the following file: