working on server authenticate users
This commit is contained in:
@@ -15,7 +15,8 @@ public partial class App : Application
|
|||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(username))
|
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;
|
ClientSession.Username = username;
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
xmlns:local="clr-namespace:RelayClient"
|
xmlns:local="clr-namespace:RelayClient"
|
||||||
Title="RelayClient">
|
Title="RelayClient"
|
||||||
|
FlyoutBehavior="Flyout">
|
||||||
|
|
||||||
<ShellContent
|
<ShellContent
|
||||||
Title="Home"
|
Title="Home"
|
||||||
|
|||||||
@@ -8,10 +8,12 @@ namespace RelayClient;
|
|||||||
|
|
||||||
public partial class MainPage : ContentPage
|
public partial class MainPage : ContentPage
|
||||||
{
|
{
|
||||||
private readonly string _username;
|
public static string _username;
|
||||||
private readonly RelaySocketClient _socket;
|
private readonly RelaySocketClient _socket;
|
||||||
private readonly RtcBridgeService _rtc;
|
private readonly RtcBridgeService _rtc;
|
||||||
|
|
||||||
|
public static string? _userToken;
|
||||||
|
|
||||||
private string? _currentChannelId;
|
private string? _currentChannelId;
|
||||||
private string? _currentChannelName;
|
private string? _currentChannelName;
|
||||||
|
|
||||||
@@ -23,6 +25,7 @@ public partial class MainPage : ContentPage
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
_username = username;
|
_username = username;
|
||||||
|
|
||||||
UserLabel.Text = $"Logged in as: {_username}";
|
UserLabel.Text = $"Logged in as: {_username}";
|
||||||
|
|
||||||
if (!KeyStorage.HasKeys(_username))
|
if (!KeyStorage.HasKeys(_username))
|
||||||
@@ -32,7 +35,7 @@ public partial class MainPage : ContentPage
|
|||||||
KeyStorage.SavePublicKey(_username, keys.publicKey);
|
KeyStorage.SavePublicKey(_username, keys.publicKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerAPI.setupClient();
|
var waitFor = ServerAPI.setupClient();
|
||||||
|
|
||||||
_socket = new RelaySocketClient(_username);
|
_socket = new RelaySocketClient(_username);
|
||||||
_rtc = new RtcBridgeService(
|
_rtc = new RtcBridgeService(
|
||||||
@@ -56,6 +59,8 @@ public partial class MainPage : ContentPage
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// while(!waitFor.IsCompleted){}
|
||||||
|
|
||||||
_socket.Connect();
|
_socket.Connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,49 @@
|
|||||||
using System.Net.Http.Headers;
|
using System.Net.Http.Headers;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
using RelayShared.Services;
|
||||||
|
|
||||||
namespace RelayClient;
|
namespace RelayClient;
|
||||||
|
|
||||||
public class ServerAPI
|
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.Clear();
|
||||||
client.DefaultRequestHeaders.Accept.Add(
|
client.DefaultRequestHeaders.Accept.Add(
|
||||||
new MediaTypeWithQualityHeaderValue("application/json"));
|
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)
|
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>? ServerPublicKeyReceived;
|
||||||
public event Action<string>? Log;
|
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;
|
_username = username;
|
||||||
_socket = new WebSocket(url);
|
_socket = new WebSocket(url);
|
||||||
@@ -32,6 +32,7 @@ public sealed class RelaySocketClient
|
|||||||
|
|
||||||
var publicKey = KeyStorage.LoadPublicKey(_username);
|
var publicKey = KeyStorage.LoadPublicKey(_username);
|
||||||
|
|
||||||
|
SendRaw($"AUTHENTICATE_USER|{_username}|{MainPage._userToken}");
|
||||||
SendRaw($"REGISTER_KEY|{_username}|{publicKey}");
|
SendRaw($"REGISTER_KEY|{_username}|{publicKey}");
|
||||||
SendRaw("GET_SERVER_KEY");
|
SendRaw("GET_SERVER_KEY");
|
||||||
SendRaw("GET_CHANNELS");
|
SendRaw("GET_CHANNELS");
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Microsoft.Extensions.Primitives;
|
using Microsoft.Extensions.Primitives;
|
||||||
using RelayCore.Services;
|
using RelayCore.Services;
|
||||||
|
using RelayShared.Services;
|
||||||
|
|
||||||
namespace RelayCore.Endpoints;
|
namespace RelayCore.Endpoints;
|
||||||
|
|
||||||
@@ -33,9 +34,18 @@ public static class AuthEndpoints
|
|||||||
var token = await service.UserRegisterAsync(request, ip, userAgent);
|
var token = await service.UserRegisterAsync(request, ip, userAgent);
|
||||||
return token != null ? Results.Ok(token) : Results.Ok("Username or Email already exists!");
|
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) =>
|
app.MapPost("/server/verify/user", async (AuthUserVerify request, APIAuthService service) =>
|
||||||
{
|
{
|
||||||
bool valid = await service.ServerVerifyUser(request);
|
bool valid = await service.ServerVerifyUser(request);
|
||||||
|
Console.WriteLine($"UN: {request.Username}\nToken: {request.Token}");
|
||||||
return Results.Ok(valid);
|
return Results.Ok(valid);
|
||||||
});
|
});
|
||||||
app.MapPost("/server/verify/license", async (AuthServerLicense request, APIAuthService service) =>
|
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)}");
|
Console.WriteLine($"Test created: {ToJsonString(test)}");
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
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.AddSingleton(db);
|
||||||
builder.Services.AddScoped<APIAuthService>();
|
builder.Services.AddScoped<APIAuthService>();
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using RelayCore.Endpoints;
|
using RelayCore.Endpoints;
|
||||||
using RelayCore.Enums;
|
using RelayCore.Enums;
|
||||||
using RelayCore.Models;
|
using RelayCore.Models;
|
||||||
|
using RelayShared.Services;
|
||||||
using SurrealDb.Net;
|
using SurrealDb.Net;
|
||||||
using SurrealDb.Net.Models;
|
using SurrealDb.Net.Models;
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ var bootstrapService = new ServerBootstrapService(db, coreClient, cryptoService)
|
|||||||
await bootstrapService.InitializeAsync();
|
await bootstrapService.InitializeAsync();
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
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.AddSingleton(db);
|
||||||
builder.Services.AddScoped<RtcCallService>();
|
builder.Services.AddScoped<RtcCallService>();
|
||||||
@@ -31,7 +32,8 @@ var app = builder.Build();
|
|||||||
app.MapGet("/", () => "Server Running!");
|
app.MapGet("/", () => "Server Running!");
|
||||||
app.MapRtcEndpoints();
|
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>("/");
|
wssv.AddWebSocketService<ChatSocketBehavior>("/");
|
||||||
RtcNotificationService.Server = wssv;
|
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.Models;
|
||||||
using RelayServer.Services.Crypto;
|
using RelayServer.Services.Crypto;
|
||||||
using RelayServer.Services.Data;
|
using RelayServer.Services.Data;
|
||||||
@@ -39,6 +40,12 @@ public class ChatSocketBehavior : WebSocketBehavior
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (msg.StartsWith("AUTHENTICATE_USER"))
|
||||||
|
{
|
||||||
|
HandleAuth(msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (msg == "GET_SERVER_KEY")
|
if (msg == "GET_SERVER_KEY")
|
||||||
{
|
{
|
||||||
HandleGetServerKey();
|
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)
|
private void HandleEncryptedRtcSignal(string msg)
|
||||||
{
|
{
|
||||||
Console.WriteLine("RTC SIGNAL HIT");
|
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