working on server authenticate users
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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">
|
||||
|
||||
<ShellContent
|
||||
Title="Home"
|
||||
|
||||
@@ -8,10 +8,12 @@ namespace RelayClient;
|
||||
|
||||
public partial class MainPage : ContentPage
|
||||
{
|
||||
private readonly string _username;
|
||||
public static string _username;
|
||||
private readonly RelaySocketClient _socket;
|
||||
private readonly RtcBridgeService _rtc;
|
||||
|
||||
public static string? _userToken;
|
||||
|
||||
private string? _currentChannelId;
|
||||
private string? _currentChannelName;
|
||||
|
||||
@@ -23,6 +25,7 @@ public partial class MainPage : ContentPage
|
||||
InitializeComponent();
|
||||
|
||||
_username = username;
|
||||
|
||||
UserLabel.Text = $"Logged in as: {_username}";
|
||||
|
||||
if (!KeyStorage.HasKeys(_username))
|
||||
@@ -32,7 +35,7 @@ public partial class MainPage : ContentPage
|
||||
KeyStorage.SavePublicKey(_username, keys.publicKey);
|
||||
}
|
||||
|
||||
ServerAPI.setupClient();
|
||||
var waitFor = ServerAPI.setupClient();
|
||||
|
||||
_socket = new RelaySocketClient(_username);
|
||||
_rtc = new RtcBridgeService(
|
||||
@@ -56,6 +59,8 @@ public partial class MainPage : ContentPage
|
||||
});
|
||||
};
|
||||
|
||||
// while(!waitFor.IsCompleted){}
|
||||
|
||||
_socket.Connect();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,18 +1,49 @@
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text.Json;
|
||||
using RelayShared.Services;
|
||||
|
||||
namespace RelayClient;
|
||||
|
||||
public class ServerAPI
|
||||
{
|
||||
static HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:5000/") };
|
||||
static HttpClient client = new HttpClient { BaseAddress = new Uri("http://192.168.1.85:5000/") };
|
||||
static HttpClient core = new HttpClient { BaseAddress = new Uri("http://192.168.1.85:1337/") };
|
||||
|
||||
public static void setupClient()
|
||||
public static async Task setupClient()
|
||||
{
|
||||
client.DefaultRequestHeaders.Accept.Clear();
|
||||
client.DefaultRequestHeaders.Accept.Add(
|
||||
new MediaTypeWithQualityHeaderValue("application/json"));
|
||||
core.DefaultRequestHeaders.Accept.Clear();
|
||||
core.DefaultRequestHeaders.Accept.Add(
|
||||
new MediaTypeWithQualityHeaderValue("application/json"));
|
||||
core.DefaultRequestHeaders.Add("User-Agent", "RelayClient");
|
||||
MainPage._userToken = await CoreUserSignin(new AuthSignin
|
||||
{
|
||||
UserName = MainPage._username,
|
||||
Password = "password"
|
||||
});
|
||||
|
||||
await CoreUserAlive(new AuthSignin
|
||||
{
|
||||
UserName = MainPage._username,
|
||||
Password = MainPage._userToken
|
||||
});
|
||||
}
|
||||
|
||||
public static async Task<Uri> CoreUserAlive(AuthSignin data)
|
||||
{
|
||||
HttpResponseMessage response = await core.PostAsJsonAsync("user/isAlive", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
return response.Headers.Location;
|
||||
}
|
||||
|
||||
public static async Task<string> CoreUserSignin(AuthSignin data)
|
||||
{
|
||||
HttpResponseMessage response = await core.PostAsJsonAsync("user/signin", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
|
||||
public static async Task<Uri> PostOfferAsync(DBOffer offer)
|
||||
|
||||
@@ -19,7 +19,7 @@ public sealed class RelaySocketClient
|
||||
public event Action<string>? ServerPublicKeyReceived;
|
||||
public event Action<string>? 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");
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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<APIAuthService>();
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using RelayCore.Endpoints;
|
||||
using RelayCore.Enums;
|
||||
using RelayCore.Models;
|
||||
using RelayShared.Services;
|
||||
using SurrealDb.Net;
|
||||
using SurrealDb.Net.Models;
|
||||
|
||||
|
||||
@@ -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<RtcCallService>();
|
||||
@@ -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<ChatSocketBehavior>("/");
|
||||
RtcNotificationService.Server = wssv;
|
||||
|
||||
|
||||
@@ -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();
|
||||
@@ -98,6 +105,34 @@ public class ChatSocketBehavior : WebSocketBehavior
|
||||
}
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
25
RelayShared/Services/Authentication.cs
Normal file
25
RelayShared/Services/Authentication.cs
Normal file
@@ -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; }
|
||||
}
|
||||
Reference in New Issue
Block a user