1
0
mirror of https://github.com/chylex/Minecraft-Phantom-Panel.git synced 2025-04-23 04:15:47 +02:00

Fix null in Web login message reply

This commit is contained in:
chylex 2024-04-08 00:03:41 +02:00
parent 7b68b5d50d
commit 21c90cb7c2
Signed by: chylex
GPG Key ID: 4DE42C8F19A80548
5 changed files with 14 additions and 14 deletions
Common/Phantom.Common.Messages.Web
Controller/Phantom.Controller.Services
Web/Phantom.Web.Services/Authentication

View File

@ -1,4 +1,5 @@
using MemoryPack;
using Phantom.Common.Data;
using Phantom.Common.Data.Web.Users;
using Phantom.Utils.Actor;
@ -8,4 +9,4 @@ namespace Phantom.Common.Messages.Web.ToController;
public sealed partial record LogInMessage(
[property: MemoryPackOrder(0)] string Username,
[property: MemoryPackOrder(1)] string Password
) : IMessageToController, ICanReply<LogInSuccess?>;
) : IMessageToController, ICanReply<Optional<LogInSuccess>>;

View File

@ -24,7 +24,7 @@ public static class WebMessageRegistries {
static WebMessageRegistries() {
ToController.Add<RegisterWebMessage>(0);
ToController.Add<UnregisterWebMessage>(1);
ToController.Add<LogInMessage, LogInSuccess?>(2);
ToController.Add<LogInMessage, Optional<LogInSuccess>>(2);
ToController.Add<LogOutMessage>(3);
ToController.Add<GetAuthenticatedUser, Optional<AuthenticatedUserInfo>>(4);
ToController.Add<CreateOrUpdateAdministratorUserMessage, CreateOrUpdateAdministratorUserResult>(5);

View File

@ -71,7 +71,7 @@ sealed class WebMessageHandlerActor : ReceiveActor<IMessageToController> {
ReceiveAsync<RegisterWebMessage>(HandleRegisterWeb);
Receive<UnregisterWebMessage>(HandleUnregisterWeb);
ReceiveAndReplyLater<LogInMessage, LogInSuccess?>(HandleLogIn);
ReceiveAndReplyLater<LogInMessage, Optional<LogInSuccess>>(HandleLogIn);
Receive<LogOutMessage>(HandleLogOut);
ReceiveAndReply<GetAuthenticatedUser, Optional<AuthenticatedUserInfo>>(GetAuthenticatedUser);
ReceiveAndReplyLater<CreateOrUpdateAdministratorUserMessage, CreateOrUpdateAdministratorUserResult>(HandleCreateOrUpdateAdministratorUser);
@ -100,7 +100,7 @@ sealed class WebMessageHandlerActor : ReceiveActor<IMessageToController> {
connection.Close();
}
private Task<LogInSuccess?> HandleLogIn(LogInMessage message) {
private Task<Optional<LogInSuccess>> HandleLogIn(LogInMessage message) {
return userLoginManager.LogIn(message.Username, message.Password);
}

View File

@ -1,5 +1,6 @@
using System.Collections.Immutable;
using System.Security.Cryptography;
using Phantom.Common.Data;
using Phantom.Common.Data.Web.Users;
using Phantom.Controller.Database;
using Phantom.Controller.Database.Repositories;
@ -29,7 +30,7 @@ sealed class UserLoginManager {
return sessionBuckets[token[0]];
}
public async Task<LogInSuccess?> LogIn(string username, string password) {
public async Task<Optional<LogInSuccess>> LogIn(string username, string password) {
Guid userGuid;
AuthenticatedUserInfo? authenticatedUserInfo;
@ -38,12 +39,12 @@ sealed class UserLoginManager {
var user = await userRepository.GetByName(username);
if (user == null || !UserPasswords.Verify(password, user.PasswordHash)) {
return null;
return default;
}
authenticatedUserInfo = await authenticatedUserCache.Update(user, db);
if (authenticatedUserInfo == null) {
return null;
return default;
}
userGuid = user.UserGuid;

View File

@ -1,4 +1,5 @@
using Phantom.Common.Data.Web.Users;
using Phantom.Common.Data;
using Phantom.Common.Data.Web.Users;
using Phantom.Common.Messages.Web.ToController;
using Phantom.Utils.Logging;
using Phantom.Web.Services.Rpc;
@ -22,23 +23,20 @@ public sealed class UserLoginManager {
}
public async Task<bool> LogIn(string username, string password, string? returnUrl = null) {
LogInSuccess? success;
Optional<LogInSuccess> result;
try {
success = await controllerConnection.Send<LogInMessage, LogInSuccess?>(new LogInMessage(username, password), TimeSpan.FromSeconds(30));
result = await controllerConnection.Send<LogInMessage, Optional<LogInSuccess>>(new LogInMessage(username, password), TimeSpan.FromSeconds(30));
} catch (Exception e) {
Logger.Error(e, "Could not log in {Username}.", username);
return false;
}
if (success == null) {
if (result.Value is not var (userInfo, authToken)) {
return false;
}
Logger.Information("Successfully logged in {Username}.", username);
var userInfo = success.UserInfo;
var authToken = success.AuthToken;
authenticationStateProvider.SetUnloadedSession();
await sessionBrowserStorage.Store(userInfo.Guid, authToken);
await authenticationStateProvider.GetAuthenticationStateAsync();