From a0a27254ad18c79e8ed50b8b5378a39e141f76e4 Mon Sep 17 00:00:00 2001 From: Yury Date: Fri, 2 May 2025 09:16:27 +0300 Subject: [PATCH] Refactor appsettings --- .../Config/PlayFabSettings.cs | 2 - .../Config/SignalrSettings.cs | 7 +++ src/Prospect.Server.Api/Config/VivoxConfig.cs | 9 +++ .../Controllers/NotificationsController.cs | 62 +++++++++++++++++++ .../Functions/GetSignalRConnection.cs | 4 +- .../CloudScript/Functions/VivoxJoin.cs | 12 +++- .../CloudScript/Functions/VivoxLogin.cs | 16 +++-- .../CloudScript/Functions/VivoxSettings.cs | 18 ++++-- src/Prospect.Server.Api/Startup.cs | 2 + src/Prospect.Server.Api/appsettings.json | 12 +++- 10 files changed, 127 insertions(+), 17 deletions(-) create mode 100644 src/Prospect.Server.Api/Config/SignalrSettings.cs create mode 100644 src/Prospect.Server.Api/Config/VivoxConfig.cs create mode 100644 src/Prospect.Server.Api/Controllers/NotificationsController.cs diff --git a/src/Prospect.Server.Api/Config/PlayFabSettings.cs b/src/Prospect.Server.Api/Config/PlayFabSettings.cs index b3cea19..8a7f29b 100644 --- a/src/Prospect.Server.Api/Config/PlayFabSettings.cs +++ b/src/Prospect.Server.Api/Config/PlayFabSettings.cs @@ -4,6 +4,4 @@ public class PlayFabSettings { public string PublisherId { get; set; } public string TitleId { get; set; } - public string SignalRURL { get; set; } - public string SignalRAccessToken { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Config/SignalrSettings.cs b/src/Prospect.Server.Api/Config/SignalrSettings.cs new file mode 100644 index 0000000..9a893b4 --- /dev/null +++ b/src/Prospect.Server.Api/Config/SignalrSettings.cs @@ -0,0 +1,7 @@ +namespace Prospect.Server.Api.Config; + +public class SignalRSettings +{ + public string SignalRURL { get; set; } + public string SignalRAccessToken { get; set; } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Config/VivoxConfig.cs b/src/Prospect.Server.Api/Config/VivoxConfig.cs new file mode 100644 index 0000000..368a20e --- /dev/null +++ b/src/Prospect.Server.Api/Config/VivoxConfig.cs @@ -0,0 +1,9 @@ +namespace Prospect.Server.Api.Config; + +public class VivoxConfig +{ + public string Key { get; set; } + public string Issuer { get; set; } + public string Domain { get; set; } + public string Server { get; set; } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Controllers/NotificationsController.cs b/src/Prospect.Server.Api/Controllers/NotificationsController.cs new file mode 100644 index 0000000..8bd62dc --- /dev/null +++ b/src/Prospect.Server.Api/Controllers/NotificationsController.cs @@ -0,0 +1,62 @@ +using System.Net.Mime; +using System.Text.Json.Serialization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; +using Prospect.Server.Api.Hubs; + +namespace Prospect.Server.Api.Controllers; + +public class NotifyRequest +{ + [JsonPropertyName("type")] + public string MessageType { get; set; } + + [JsonPropertyName("data")] + public object MessageData { get; set; } +} + +public class ServerReadyMessageData +{ + [JsonPropertyName("success")] + public bool Success { get; set; } + [JsonPropertyName("sessionId")] + public string SessionID { get; set; } + [JsonPropertyName("squadId")] + public string SquadID { get; set; } +} + + +[Route("Notifications")] +[ApiController] +public class NotificationsController : Controller +{ + private readonly IHubContext _hubContext; + private readonly ILogger _logger; + + public NotificationsController(ILogger logger, IHubContext hubContext) + { + _logger = logger; + _hubContext = hubContext; + } + + [HttpPost("TestNotify")] + [Produces(MediaTypeNames.Application.Json)] + public async Task TestNotify(NotifyRequest request) + { + // TODO: To test Notifications_DT + _logger.LogDebug("Received test notification event {MessageType}", request.MessageType); + await _hubContext.Clients.All.SendAsync(request.MessageType, request.MessageData); + + return StatusCode(200); + } + + [HttpPost("ServerReady")] + [Produces(MediaTypeNames.Application.Json)] + public async Task ServerReady(ServerReadyMessageData request) + { + _logger.LogDebug("Received test notification event OnSquadMatchmakingSuccess"); + await _hubContext.Clients.All.SendAsync("OnSquadMatchmakingSuccess", request); + + return StatusCode(200); + } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Services/CloudScript/Functions/GetSignalRConnection.cs b/src/Prospect.Server.Api/Services/CloudScript/Functions/GetSignalRConnection.cs index 4808610..1a0a36a 100644 --- a/src/Prospect.Server.Api/Services/CloudScript/Functions/GetSignalRConnection.cs +++ b/src/Prospect.Server.Api/Services/CloudScript/Functions/GetSignalRConnection.cs @@ -7,9 +7,9 @@ namespace Prospect.Server.Api.Services.CloudScript.Functions; [CloudScriptFunction("GetSignalRConnection")] public class GetSignalRConnection : ICloudScriptFunction { - private readonly PlayFabSettings _settings; + private readonly SignalRSettings _settings; - public GetSignalRConnection(IOptions settings) + public GetSignalRConnection(IOptions settings) { _settings = settings.Value; } diff --git a/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxJoin.cs b/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxJoin.cs index 12e18b0..ecdfe77 100644 --- a/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxJoin.cs +++ b/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxJoin.cs @@ -1,4 +1,6 @@ using System.Text.Json.Serialization; +using Microsoft.Extensions.Options; +using Prospect.Server.Api.Config; using Prospect.Server.Api.Services.CloudScript.Models; namespace Prospect.Server.Api.Services.CloudScript.Functions; @@ -27,6 +29,13 @@ public class FYVivoxJoinTokenRequest [CloudScriptFunction("VivoxJoin")] public class VivoxJoin : ICloudScriptFunction { + private readonly VivoxConfig _settings; + + public VivoxJoin(IOptions settings) + { + _settings = settings.Value; + } + private int ReturnChannelType(string type) { switch (type) { case "GLOBAL": return 2; @@ -41,8 +50,7 @@ public class VivoxJoin : ICloudScriptFunction public async Task ExecuteAsync(FYVivoxJoinTokenRequest request) { var exp = (int)DateTimeOffset.UtcNow.AddDays(1).ToUnixTimeSeconds(); - // TODO: Replace with app configuration - var token = TokenGenerator.vxGenerateToken("key", "issuer", exp, "join", request.Username, request.Channel); + var token = TokenGenerator.vxGenerateToken(_settings.Key, _settings.Issuer, exp, "join", request.Username, request.Channel); return new FYVivoxJoinData { diff --git a/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxLogin.cs b/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxLogin.cs index b85bf39..6464979 100644 --- a/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxLogin.cs +++ b/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxLogin.cs @@ -1,4 +1,6 @@ -using Prospect.Server.Api.Services.CloudScript.Models; +using Microsoft.Extensions.Options; +using Prospect.Server.Api.Config; +using Prospect.Server.Api.Services.CloudScript.Models; using System.Security.Cryptography; using System.Text.Json; @@ -84,12 +86,18 @@ public class TokenGenerator [CloudScriptFunction("VivoxLogin")] public class VivoxLogin : ICloudScriptFunction { + private readonly VivoxConfig _settings; + + public VivoxLogin(IOptions settings) + { + _settings = settings.Value; + } + public async Task ExecuteAsync(FYVivoxLoginTokenRequest request) { - // TODO: Replace with app configuration - var channel = "sip:confctl-g-.testchannel@mtu1xp.vivox.com"; // e - echo channel, g - global, p - positional + var channel = $"sip:confctl-g-{_settings.Issuer}.testchannel@mtu1xp.vivox.com"; // e - echo channel, g - global, p - positional var exp = (int)DateTimeOffset.UtcNow.AddSeconds(90).ToUnixTimeSeconds(); - var token = TokenGenerator.vxGenerateToken("key", "issuer", exp, "login", request.Username, channel); + var token = TokenGenerator.vxGenerateToken(_settings.Key, _settings.Issuer, exp, "login", request.Username, channel); return new FYVivoxJoinData { diff --git a/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxSettings.cs b/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxSettings.cs index 1082536..cd1271d 100644 --- a/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxSettings.cs +++ b/src/Prospect.Server.Api/Services/CloudScript/Functions/VivoxSettings.cs @@ -1,18 +1,26 @@ -using Prospect.Server.Api.Services.CloudScript.Models; +using Microsoft.Extensions.Options; +using Prospect.Server.Api.Config; +using Prospect.Server.Api.Services.CloudScript.Models; namespace Prospect.Server.Api.Services.CloudScript.Functions; [CloudScriptFunction("VivoxSettings")] public class VivoxSettings : ICloudScriptFunction { + private readonly VivoxConfig _settings; + + public VivoxSettings(IOptions settings) + { + _settings = settings.Value; + } + public Task ExecuteAsync(FYEmptyRequest request) { return Task.FromResult(new FYVivoxSettingsData { - // TODO: Replace with app configuration - // VivoxDomain = "", - // VivoxIssuer = "", - // VivoxServer = "" + VivoxDomain = _settings.Domain, + VivoxIssuer = _settings.Issuer, + VivoxServer = _settings.Server }); } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Startup.cs b/src/Prospect.Server.Api/Startup.cs index 7d7e3fc..8e13dd0 100644 --- a/src/Prospect.Server.Api/Startup.cs +++ b/src/Prospect.Server.Api/Startup.cs @@ -25,6 +25,8 @@ public class Startup services.Configure(Configuration.GetSection(nameof(AuthTokenSettings))); services.Configure(Configuration.GetSection(nameof(DatabaseSettings))); services.Configure(Configuration.GetSection(nameof(PlayFabSettings))); + services.Configure(Configuration.GetSection(nameof(VivoxConfig))); + services.Configure(Configuration.GetSection(nameof(SignalRSettings))); services.AddSingleton(); services.AddSingleton(); diff --git a/src/Prospect.Server.Api/appsettings.json b/src/Prospect.Server.Api/appsettings.json index 7efe2fc..8c647a3 100644 --- a/src/Prospect.Server.Api/appsettings.json +++ b/src/Prospect.Server.Api/appsettings.json @@ -8,16 +8,24 @@ }, "PlayFabSettings": { "PublisherId": "850902E5B40508ED", - "TitleId": "2EA46", + "TitleId": "2EA46" + }, + "SignalRSettings": { "SignalRURL": "https://127.0.0.1:8443/signalr/?hub=pubsub", "SignalRAccessToken": "TEST" }, + "VivoxConfig": { + "Key": "", + "Issuer": "", + "Domain": "", + "Server": "" + }, "Kestrel": { "Endpoints": { "Https": { "Url": "https://127.0.0.1:8443" }, - "Http": { + "Http": { "Url": "http://127.0.0.1:8000" } },