diff --git a/ASCOM.Alpaca.Simulators/Controllers/SetupController.cs b/ASCOM.Alpaca.Simulators/Controllers/SetupController.cs index f946fb0a..229490c2 100644 --- a/ASCOM.Alpaca.Simulators/Controllers/SetupController.cs +++ b/ASCOM.Alpaca.Simulators/Controllers/SetupController.cs @@ -31,9 +31,9 @@ public class SetupController : Controller [Produces(MediaTypeNames.Text.Html)] [FeatureGate("HideAlpacaUI")] [Route("/setup")] - public ActionResult ServerSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) + public ActionResult ServerSetup() { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -53,7 +53,7 @@ public ActionResult ServerSetup([Required][DefaultValue(0)][SwaggerSchem [Route("/setup/v1/camera/{DeviceNumber}/setup")] public ActionResult CameraSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -73,7 +73,7 @@ public ActionResult CameraSetup([Required][DefaultValue(0)][SwaggerSchem [Route("/setup/v1/covercalibrator/{DeviceNumber}/setup")] public ActionResult CoverCalibratorSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -93,7 +93,7 @@ public ActionResult CoverCalibratorSetup([Required][DefaultValue(0)][Swa [Route("/setup/v1/dome/{DeviceNumber}/setup")] public ActionResult DomeSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -113,7 +113,7 @@ public ActionResult DomeSetup([Required][DefaultValue(0)][SwaggerSchema( [Route("/setup/v1/filterwheel/{DeviceNumber}/setup")] public ActionResult FilterWheelSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -133,7 +133,7 @@ public ActionResult FilterWheelSetup([Required][DefaultValue(0)][Swagger [Route("/setup/v1/focuser/{DeviceNumber}/setup")] public ActionResult FocuserSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -153,7 +153,7 @@ public ActionResult FocuserSetup([Required][DefaultValue(0)][SwaggerSche [Route("/setup/v1/observingconditions/{DeviceNumber}/setup")] public ActionResult ObservingConditionsSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -173,7 +173,7 @@ public ActionResult ObservingConditionsSetup([Required][DefaultValue(0)] [Route("/setup/v1/rotator/{DeviceNumber}/setup")] public ActionResult RotatorSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -193,7 +193,7 @@ public ActionResult RotatorSetup([Required][DefaultValue(0)][SwaggerSche [Route("/setup/v1/safetymonitor/{DeviceNumber}/setup")] public ActionResult SafetyMonitorSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -213,7 +213,7 @@ public ActionResult SafetyMonitorSetup([Required][DefaultValue(0)][Swagg [Route("/setup/v1/switch/{DeviceNumber}/setup")] public ActionResult SwitchSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } /// @@ -233,7 +233,7 @@ public ActionResult SwitchSetup([Required][DefaultValue(0)][SwaggerSchem [Route("/setup/v1/telescope/{DeviceNumber}/setup")] public ActionResult TelescopeSetup([Required][DefaultValue(0)][SwaggerSchema(Strings.DeviceIDDescription, Format = "uint32")][Range(0, 4294967295)] uint DeviceNumber) { - return Ok(string.Empty); + return Content(string.Empty, MediaTypeNames.Text.Html); } } } diff --git a/ASCOM.Alpaca.Simulators/Setup/OmniSim.iss b/ASCOM.Alpaca.Simulators/Setup/OmniSim.iss index cf71856c..a2dd554a 100644 --- a/ASCOM.Alpaca.Simulators/Setup/OmniSim.iss +++ b/ASCOM.Alpaca.Simulators/Setup/OmniSim.iss @@ -65,7 +65,7 @@ VersionInfoVersion={#MyAppVersion} WizardImageFile=NewWizardImage.bmp WizardSmallImageFile=ASCOMLogo.bmp WizardStyle=modern -SignTool = SignOmniSim +SignTool = SignAll [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" @@ -81,7 +81,6 @@ Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" -Name: "icelandic"; MessagesFile: "compiler:Languages\Icelandic.isl" Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" diff --git a/ASCOM.Alpaca.Simulators/Setup/SignOmniSim.cmd b/ASCOM.Alpaca.Simulators/Setup/SignOmniSim.cmd index d6d4fe96..4069759c 100644 --- a/ASCOM.Alpaca.Simulators/Setup/SignOmniSim.cmd +++ b/ASCOM.Alpaca.Simulators/Setup/SignOmniSim.cmd @@ -2,6 +2,6 @@ rem @echo off Rem call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 rem start "Sign with SHA256" /wait /b "signtool" sign /a /fd SHA256 /tr http://rfc3161timestamp.globalsign.com/advanced /td SHA256 %1 -"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86\signtool" sign /a /fd SHA256 /n "Peter Simpson" /tr http://rfc3161timestamp.globalsign.com/advanced /td SHA256 %1 +"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\signtool" sign /a /fd SHA256 /n "Peter Simpson" /tr http://rfc3161timestamp.globalsign.com/advanced /td SHA256 %1 exit 0 diff --git a/ASCOM.Alpaca.Simulators/Startup.cs b/ASCOM.Alpaca.Simulators/Startup.cs index 9f23e2f7..9b697360 100644 --- a/ASCOM.Alpaca.Simulators/Startup.cs +++ b/ASCOM.Alpaca.Simulators/Startup.cs @@ -1,12 +1,17 @@ using Blazored.Toast; +using ASCOM.Alpaca.Simulators.Controllers; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Microsoft.FeatureManagement; +using Microsoft.AspNetCore.Routing; using System; using System.Globalization; using System.IO; +using System.Linq; using System.Reflection; namespace ASCOM.Alpaca.Simulators @@ -33,6 +38,7 @@ public void ConfigureServices(IServiceCollection services) services.AddRazorPages(); services.AddServerSideBlazor(); services.AddBlazoredToast(); + services.AddFeatureManagement(); var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); @@ -76,7 +82,20 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApp //Map Endpoints, primarily Blazor UI and REST Controllers app.UseEndpoints(endpoints => { - endpoints.MapControllers(); + var controllerEndpoints = endpoints.MapControllers(); + + // Let the Blazor pages handle setup URLs unless the hidden API is enabled. + if (!Configuration.GetValue("FeatureManagement:HideAlpacaUI")) + { + controllerEndpoints.Add(endpointBuilder => + { + if (endpointBuilder.Metadata.OfType().FirstOrDefault()?.ControllerTypeInfo == typeof(SetupController).GetTypeInfo()) + { + endpointBuilder.Metadata.Add(new SuppressMatchingMetadata()); + } + }); + } + endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); }); diff --git a/ASCOM.Alpaca.Simulators/appsettings.json b/ASCOM.Alpaca.Simulators/appsettings.json index d9d9a9bf..f5e36cba 100644 --- a/ASCOM.Alpaca.Simulators/appsettings.json +++ b/ASCOM.Alpaca.Simulators/appsettings.json @@ -1,4 +1,7 @@ { + "FeatureManagement": { + "HideAlpacaUI": false + }, "Logging": { "LogLevel": { "Default": "Information", diff --git a/ASCOM.Alpaca.Simulators/ascom.alpaca.simulators.xml b/ASCOM.Alpaca.Simulators/ascom.alpaca.simulators.xml index 2c3526ce..ac457d2f 100644 --- a/ASCOM.Alpaca.Simulators/ascom.alpaca.simulators.xml +++ b/ASCOM.Alpaca.Simulators/ascom.alpaca.simulators.xml @@ -2008,7 +2008,7 @@ Method or parameter value error, check error message Server internal error, check error message - + Primary browser web page for the overall collection of devices and the Alpaca service diff --git a/ASCOM.Alpaca.Simulators/makewindows.cmd b/ASCOM.Alpaca.Simulators/makewindows.cmd new file mode 100644 index 00000000..ca40b88e --- /dev/null +++ b/ASCOM.Alpaca.Simulators/makewindows.cmd @@ -0,0 +1,11 @@ +dotnet publish -c Release -r win-x64 --self-contained true /p:DefineConstants=ASCOM_COM /p:PublishSingleFile=true -o ./bin/ascom.alpaca.simulators.windows-x64 +dotnet publish -c Release -r win-x86 --self-contained true /p:DefineConstants=ASCOM_COM /p:PublishSingleFile=true -o ./bin/ascom.alpaca.simulators.windows-x86 + +echo *** Creating Windows installer +cd J:\ASCOM.Alpaca.Simulators\ASCOM.Alpaca.Simulators\Setup +"C:\Program Files (x86)\Inno Setup 6\iscc.exe" "OmniSim.iss" +cd .. + +echo *** Builds complete + +pause \ No newline at end of file