diff --git a/src/Tgstation.Server.Host/Controllers/RootController.cs b/src/Tgstation.Server.Host/Controllers/RootController.cs index 577fecf1c6..fcf2bd239b 100644 --- a/src/Tgstation.Server.Host/Controllers/RootController.cs +++ b/src/Tgstation.Server.Host/Controllers/RootController.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Tgstation.Server.Api; using Tgstation.Server.Host.Configuration; using Tgstation.Server.Host.Extensions; using Tgstation.Server.Host.System; @@ -62,6 +63,11 @@ namespace Tgstation.Server.Host.Controllers /// readonly ControlPanelConfiguration controlPanelConfiguration; + /// + /// The for the . + /// + readonly InternalConfiguration internalConfiguration; + /// /// Gets a giving the and action names for a given . /// @@ -92,13 +98,15 @@ namespace Tgstation.Server.Host.Controllers /// The value of . /// The containing the value of . /// The containing the value of . + /// The containing the value of . public RootController( IAssemblyInformationProvider assemblyInformationProvider, IPlatformIdentifier platformIdentifier, IWebHostEnvironment hostEnvironment, ILogger logger, IOptions generalConfigurationOptions, - IOptions controlPanelConfigurationOptions) + IOptions controlPanelConfigurationOptions, + IOptionsSnapshot internalConfigurationOptions) { this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider)); this.platformIdentifier = platformIdentifier ?? throw new ArgumentNullException(nameof(platformIdentifier)); @@ -106,6 +114,7 @@ namespace Tgstation.Server.Host.Controllers this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions)); controlPanelConfiguration = controlPanelConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(controlPanelConfigurationOptions)); + internalConfiguration = internalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(internalConfigurationOptions)); } /// @@ -120,19 +129,26 @@ namespace Tgstation.Server.Host.Controllers var apiDocsEnabled = generalConfiguration.HostApiDocumentation; var controlPanelRoute = $"{ControlPanelController.ControlPanelRoute.TrimStart('/')}/"; - if (panelEnabled ^ apiDocsEnabled) - if (panelEnabled) - return Redirect(controlPanelRoute); - else - return Redirect(SwaggerConfiguration.DocumentationSiteRouteExtension); + if (panelEnabled && !apiDocsEnabled) + return Redirect(controlPanelRoute); - Dictionary? links; - if (panelEnabled) - links = new Dictionary() + Dictionary? links = null; + + if (panelEnabled || apiDocsEnabled) + { + links = new Dictionary(); + + if (panelEnabled) + links.Add("Web Control Panel", controlPanelRoute); + + if (apiDocsEnabled) { - { "Web Control Panel", controlPanelRoute }, - { "API Documentation", SwaggerConfiguration.DocumentationSiteRouteExtension }, - }; + if (internalConfiguration.EnableGraphQL) + links.Add("GraphQL API Documentation", Routes.GraphQL); + + links.Add("REST API Documentation", SwaggerConfiguration.DocumentationSiteRouteExtension); + } + } else links = null;