diff --git a/src/Eurofurence.App.Server.Services/Abstractions/QrCode/IQrCodeService.cs b/src/Eurofurence.App.Server.Services/Abstractions/QrCode/IQrCodeService.cs new file mode 100644 index 00000000..8607e84f --- /dev/null +++ b/src/Eurofurence.App.Server.Services/Abstractions/QrCode/IQrCodeService.cs @@ -0,0 +1,7 @@ +namespace Eurofurence.App.Server.Services.Abstractions.QrCode +{ + public interface IQrCodeService + { + string GetTarget(string id); + } +} diff --git a/src/Eurofurence.App.Server.Services/Abstractions/QrCode/QrCodeConfiguration.cs b/src/Eurofurence.App.Server.Services/Abstractions/QrCode/QrCodeConfiguration.cs new file mode 100644 index 00000000..71deaa7e --- /dev/null +++ b/src/Eurofurence.App.Server.Services/Abstractions/QrCode/QrCodeConfiguration.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Eurofurence.App.Server.Services.Abstractions.QrCode +{ + public class QrCodeConfiguration + { + public Dictionary Targets { get; set; } + } +} diff --git a/src/Eurofurence.App.Server.Services/DependencyResolution/AutofacModule.cs b/src/Eurofurence.App.Server.Services/DependencyResolution/AutofacModule.cs index ced2989a..f860aaa5 100644 --- a/src/Eurofurence.App.Server.Services/DependencyResolution/AutofacModule.cs +++ b/src/Eurofurence.App.Server.Services/DependencyResolution/AutofacModule.cs @@ -17,6 +17,7 @@ using Eurofurence.App.Server.Services.Abstractions.Maps; using Eurofurence.App.Server.Services.Abstractions.MinIO; using Eurofurence.App.Server.Services.Abstractions.PushNotifications; +using Eurofurence.App.Server.Services.Abstractions.QrCode; using Eurofurence.App.Server.Services.Abstractions.Telegram; using Eurofurence.App.Server.Services.Abstractions.Validation; using Eurofurence.App.Server.Services.Announcements; @@ -121,6 +122,7 @@ private void RegisterServices(ContainerBuilder builder) builder.RegisterType() .As(); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType() diff --git a/src/Eurofurence.App.Server.Services/QrCode/QrCodeService.cs b/src/Eurofurence.App.Server.Services/QrCode/QrCodeService.cs new file mode 100644 index 00000000..c3417de8 --- /dev/null +++ b/src/Eurofurence.App.Server.Services/QrCode/QrCodeService.cs @@ -0,0 +1,21 @@ +using Eurofurence.App.Server.Services.Abstractions.QrCode; +using Microsoft.Extensions.Options; + +namespace Eurofurence.App.Server.Services.Communication +{ + public class QrCodeService : IQrCodeService + { + private readonly QrCodeConfiguration _qrCodeConfiguration; + + public QrCodeService( + IOptionsMonitor qrCodeConfiguration + ) + { + _qrCodeConfiguration = qrCodeConfiguration.CurrentValue; + } + public string GetTarget(string id) + { + return _qrCodeConfiguration.Targets[id]; + } + } +} \ No newline at end of file diff --git a/src/Eurofurence.App.Server.Web/Controllers/QrCodeController.cs b/src/Eurofurence.App.Server.Web/Controllers/QrCodeController.cs new file mode 100644 index 00000000..32fa5044 --- /dev/null +++ b/src/Eurofurence.App.Server.Web/Controllers/QrCodeController.cs @@ -0,0 +1,32 @@ +using Eurofurence.App.Server.Services.Abstractions.QrCode; +using Microsoft.AspNetCore.Mvc; +using System; + +namespace Eurofurence.App.Server.Web.Controllers +{ + [Route("qr")] + public class QrCodeController : BaseController + { + private readonly IQrCodeService _qrCodeService; + + public QrCodeController( + IQrCodeService qrCodeService + ) + { + _qrCodeService = qrCodeService; + } + + [HttpGet("{targetId}")] + public ActionResult GetTargetRedirect(string targetId) + { + try + { + return new RedirectResult(_qrCodeService.GetTarget(targetId)); + } + catch (Exception) + { + return NotFound(); + } + } + } +} \ No newline at end of file diff --git a/src/Eurofurence.App.Server.Web/Startup.cs b/src/Eurofurence.App.Server.Web/Startup.cs index 37f3d6b4..a004b6e9 100644 --- a/src/Eurofurence.App.Server.Web/Startup.cs +++ b/src/Eurofurence.App.Server.Web/Startup.cs @@ -30,6 +30,7 @@ using Microsoft.AspNetCore.Authentication; using Minio; using ILogger = Microsoft.Extensions.Logging.ILogger; +using Eurofurence.App.Server.Services.Abstractions.QrCode; namespace Eurofurence.App.Server.Web { @@ -152,6 +153,8 @@ public void ConfigureServices(IServiceCollection services) }); + services.Configure(Configuration.GetSection("QrCode")); + services.Configure(Configuration.GetSection("Identity")); services.Configure(Configuration.GetSection("Authorization")); services.ConfigureOptions(); diff --git a/src/Eurofurence.App.Server.Web/appsettings.sample.json b/src/Eurofurence.App.Server.Web/appsettings.sample.json index 4b2d2a04..b560301a 100644 --- a/src/Eurofurence.App.Server.Web/appsettings.sample.json +++ b/src/Eurofurence.App.Server.Web/appsettings.sample.json @@ -87,5 +87,13 @@ "secretKey": "minioVerySecretKey", "secure": false, "bucket": "ef-mobile-app-local" + }, + "QrCode": { + "Targets": { + "getWindowsApp": "", + "getAndroidApp": "", + "getiPhoneApp": "", + "aatablereg": "" + } } } \ No newline at end of file diff --git a/src/Eurofurence.App.Server.Web/wwwroot/.well-known/.gitkeep b/src/Eurofurence.App.Server.Web/wwwroot/.well-known/.gitkeep new file mode 100644 index 00000000..e69de29b