diff --git a/RelayClient/App.xaml.cs b/RelayClient/App.xaml.cs index fea163f..dce0345 100644 --- a/RelayClient/App.xaml.cs +++ b/RelayClient/App.xaml.cs @@ -15,7 +15,8 @@ public partial class App : Application if (string.IsNullOrWhiteSpace(username)) { - throw new Exception("Missing required --user argument. Example: --user Keeper317"); + username = "Test"; + // throw new Exception("Missing required --user argument. Example: --user Keeper317"); } ClientSession.Username = username; diff --git a/RelayClient/AppShell.xaml b/RelayClient/AppShell.xaml index b205bde..ad3a023 100644 --- a/RelayClient/AppShell.xaml +++ b/RelayClient/AppShell.xaml @@ -4,7 +4,8 @@ xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:RelayClient" - Title="RelayClient"> + Title="RelayClient" + FlyoutBehavior="Flyout"> CoreUserAlive(AuthSignin data) + { + HttpResponseMessage response = await core.PostAsJsonAsync("user/isAlive", data); + response.EnsureSuccessStatusCode(); + return response.Headers.Location; + } + + public static async Task CoreUserSignin(AuthSignin data) + { + HttpResponseMessage response = await core.PostAsJsonAsync("user/signin", data); + response.EnsureSuccessStatusCode(); + return await response.Content.ReadAsStringAsync(); } public static async Task PostOfferAsync(DBOffer offer) diff --git a/RelayClient/Services/RelaySocketClient.cs b/RelayClient/Services/RelaySocketClient.cs index 49c0f99..75a12fc 100644 --- a/RelayClient/Services/RelaySocketClient.cs +++ b/RelayClient/Services/RelaySocketClient.cs @@ -19,7 +19,7 @@ public sealed class RelaySocketClient public event Action? ServerPublicKeyReceived; public event Action? Log; - public RelaySocketClient(string username, string url = "ws://localhost:1337/") + public RelaySocketClient(string username, string url = "ws://192.168.1.85:5001/") { _username = username; _socket = new WebSocket(url); @@ -32,6 +32,7 @@ public sealed class RelaySocketClient var publicKey = KeyStorage.LoadPublicKey(_username); + SendRaw($"AUTHENTICATE_USER|{_username}|{MainPage._userToken}"); SendRaw($"REGISTER_KEY|{_username}|{publicKey}"); SendRaw("GET_SERVER_KEY"); SendRaw("GET_CHANNELS"); diff --git a/RelayCore/Endpoints/AuthEndpoints.cs b/RelayCore/Endpoints/AuthEndpoints.cs index 5efc421..2612021 100644 --- a/RelayCore/Endpoints/AuthEndpoints.cs +++ b/RelayCore/Endpoints/AuthEndpoints.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Primitives; using RelayCore.Services; +using RelayShared.Services; namespace RelayCore.Endpoints; @@ -33,9 +34,18 @@ public static class AuthEndpoints var token = await service.UserRegisterAsync(request, ip, userAgent); return token != null ? Results.Ok(token) : Results.Ok("Username or Email already exists!"); }); + app.MapPost("/user/isAlive", async (AuthSignin request, HttpContext context) => + { + var ip = context.Connection.RemoteIpAddress?.MapToIPv4().ToString(); + context.Request.Headers.TryGetValue("User-Agent", out var userAgent); + + Console.WriteLine($"UN: {request.UserName}\nToken: {request.Password}\nIP: {ip}\nUserAgent: {userAgent}"); + return Results.Ok(); + }); app.MapPost("/server/verify/user", async (AuthUserVerify request, APIAuthService service) => { bool valid = await service.ServerVerifyUser(request); + Console.WriteLine($"UN: {request.Username}\nToken: {request.Token}"); return Results.Ok(valid); }); app.MapPost("/server/verify/license", async (AuthServerLicense request, APIAuthService service) => @@ -44,27 +54,3 @@ public static class AuthEndpoints }); } } - -public class AuthSignin -{ - public string UserName { get; set; } - public string Password { get; set; } -} - -public class AuthRegister -{ - public string Username { get; set; } - public string Password { get; set; } - public string Email { get; set; } -} - -public class AuthUserVerify -{ - public string Username { get; set; } - public string Token { get; set; } -} - -public class AuthServerLicense -{ - public string License { get; set; } -} \ No newline at end of file diff --git a/RelayCore/Program.cs b/RelayCore/Program.cs index 0b65ebc..f2f871e 100644 --- a/RelayCore/Program.cs +++ b/RelayCore/Program.cs @@ -25,7 +25,8 @@ Console.WriteLine($"Kira created: {ToJsonString(kira)}"); Console.WriteLine($"Test created: {ToJsonString(test)}"); var builder = WebApplication.CreateBuilder(args); -builder.WebHost.UseUrls("http://127.0.0.1:1337/"); +// builder.WebHost.UseUrls("http://127.0.0.1:1337/"); +builder.WebHost.UseUrls("http://192.168.1.85:1337"); builder.Services.AddSingleton(db); builder.Services.AddScoped(); diff --git a/RelayCore/Services/APIAuthService.cs b/RelayCore/Services/APIAuthService.cs index b37a8f5..5502e78 100644 --- a/RelayCore/Services/APIAuthService.cs +++ b/RelayCore/Services/APIAuthService.cs @@ -2,6 +2,7 @@ using RelayCore.Endpoints; using RelayCore.Enums; using RelayCore.Models; +using RelayShared.Services; using SurrealDb.Net; using SurrealDb.Net.Models; diff --git a/RelayServer/Program.cs b/RelayServer/Program.cs index 02e5358..3b2fbff 100644 --- a/RelayServer/Program.cs +++ b/RelayServer/Program.cs @@ -21,7 +21,8 @@ var bootstrapService = new ServerBootstrapService(db, coreClient, cryptoService) await bootstrapService.InitializeAsync(); var builder = WebApplication.CreateBuilder(args); -builder.WebHost.UseUrls("http://127.0.0.1:5000/"); +// builder.WebHost.UseUrls("http://127.0.0.1:5000/"); +builder.WebHost.UseUrls("http://192.168.1.85:5000/"); builder.Services.AddSingleton(db); builder.Services.AddScoped(); @@ -31,7 +32,8 @@ var app = builder.Build(); app.MapGet("/", () => "Server Running!"); app.MapRtcEndpoints(); -var wssv = new WebSocketServer("ws://localhost:1337"); +// var wssv = new WebSocketServer("ws://127.0.0.1:5001"); +var wssv = new WebSocketServer("ws://192.168.1.85:5001"); wssv.AddWebSocketService("/"); RtcNotificationService.Server = wssv; diff --git a/RelayServer/Services/Chat/ChatSocketBehavior.cs b/RelayServer/Services/Chat/ChatSocketBehavior.cs index 92d8cc5..ccfbf3b 100644 --- a/RelayServer/Services/Chat/ChatSocketBehavior.cs +++ b/RelayServer/Services/Chat/ChatSocketBehavior.cs @@ -1,4 +1,5 @@ -using System.Text.Json; +using System.Net.Http.Headers; +using System.Text.Json; using RelayServer.Models; using RelayServer.Services.Crypto; using RelayServer.Services.Data; @@ -39,6 +40,12 @@ public class ChatSocketBehavior : WebSocketBehavior return; } + if (msg.StartsWith("AUTHENTICATE_USER")) + { + HandleAuth(msg); + return; + } + if (msg == "GET_SERVER_KEY") { HandleGetServerKey(); @@ -97,7 +104,35 @@ public class ChatSocketBehavior : WebSocketBehavior return false; } } - + + private async void HandleAuth(string msg) + { + var parts = msg.Split('|', 3); + + if (parts.Length < 3) + { + Console.WriteLine("Invalid AUTHENTICATE_USERS payload."); + return; + } + + var username = parts[1]; + var token = parts[2]; + + // HttpClient core = new HttpClient{BaseAddress = new Uri("http://127.0.0.1:1337")}; + HttpClient core = new HttpClient{BaseAddress = new Uri("http://192.168.1.85:1337")}; + core.DefaultRequestHeaders.Accept.Clear(); + core.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + core.DefaultRequestHeaders.Add("User-Agent", "RelayServer"); + + HttpResponseMessage response = await core.PostAsJsonAsync("/server/verify/user", new AuthUserVerify + { + Username = username, + Token = token + }); + + Console.WriteLine(response.Content.ReadAsStringAsync().Result); + + } private void HandleEncryptedRtcSignal(string msg) { Console.WriteLine("RTC SIGNAL HIT"); diff --git a/RelayShared/Services/Authentication.cs b/RelayShared/Services/Authentication.cs new file mode 100644 index 0000000..939b807 --- /dev/null +++ b/RelayShared/Services/Authentication.cs @@ -0,0 +1,25 @@ +namespace RelayShared.Services; + +public class AuthSignin +{ + public string UserName { get; set; } + public string Password { get; set; } +} + +public class AuthRegister +{ + public string Username { get; set; } + public string Password { get; set; } + public string Email { get; set; } +} + +public class AuthUserVerify +{ + public string Username { get; set; } + public string Token { get; set; } +} + +public class AuthServerLicense +{ + public string License { get; set; } +} \ No newline at end of file