Add Telegram bot integration and enhance user management features
- Introduced Telegram.Bot package for bot functionality. - Updated user management to include Telegram linking and blocking features. - Enhanced activation request handling with notifications via Telegram. - Added new database entities for Telegram link tokens and login requests. - Implemented traffic synchronization for client stats in the XuiPanelGateway. - Updated application structure to support new test projects and improved dependency injection for Telegram services.
This commit is contained in:
@@ -18,4 +18,7 @@ public static class AuthErrors
|
||||
|
||||
public static readonly Error Unauthorized =
|
||||
Error.Unauthorized("Auth.Unauthorized", "Требуется аутентификация.");
|
||||
|
||||
public static readonly Error UserBlocked =
|
||||
Error.Forbidden("Auth.UserBlocked", "Аккаунт заблокирован администратором.");
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
namespace PnvPanel.Application.Auth;
|
||||
|
||||
public sealed record CurrentUserDto(Guid Id, string UserName, string Role, bool IsActivated);
|
||||
public sealed record CurrentUserDto(Guid Id, string UserName, string Role, bool IsActivated, bool TelegramLinked);
|
||||
|
||||
@@ -23,7 +23,8 @@ public sealed class LoginCommandHandler(
|
||||
var (accessToken, accessExpiresAt) = jwtTokenService.GenerateAccessToken(user);
|
||||
var refreshToken = await refreshTokenService.IssueAsync(user.Id, cancellationToken);
|
||||
|
||||
var dto = new CurrentUserDto(profile.Id, profile.UserName, profile.Role, profile.IsActivated);
|
||||
var telegramInfo = await identityService.GetTelegramLinkInfoAsync(profile.Id, cancellationToken);
|
||||
var dto = new CurrentUserDto(profile.Id, profile.UserName, profile.Role, profile.IsActivated, telegramInfo.IsLinked);
|
||||
|
||||
return Result.Success(new AuthResult(
|
||||
accessToken,
|
||||
|
||||
@@ -16,6 +16,8 @@ public sealed class GetCurrentUserQueryHandler(IIdentityService identityService,
|
||||
if (profile is null)
|
||||
return Result.Failure<CurrentUserDto>(AuthErrors.Unauthorized);
|
||||
|
||||
return Result.Success(new CurrentUserDto(profile.Id, profile.UserName, profile.Role, profile.IsActivated));
|
||||
var telegramInfo = await identityService.GetTelegramLinkInfoAsync(userId, cancellationToken);
|
||||
|
||||
return Result.Success(new CurrentUserDto(profile.Id, profile.UserName, profile.Role, profile.IsActivated, telegramInfo.IsLinked));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,8 @@ public sealed class RefreshCommandHandler(
|
||||
var authUser = new AuthenticatedUser(profile.Id, profile.UserName, profile.Role);
|
||||
var (accessToken, accessExpiresAt) = jwtTokenService.GenerateAccessToken(authUser);
|
||||
|
||||
var dto = new CurrentUserDto(profile.Id, profile.UserName, profile.Role, profile.IsActivated);
|
||||
var telegramInfo = await identityService.GetTelegramLinkInfoAsync(profile.Id, cancellationToken);
|
||||
var dto = new CurrentUserDto(profile.Id, profile.UserName, profile.Role, profile.IsActivated, telegramInfo.IsLinked);
|
||||
|
||||
return Result.Success(new AuthResult(
|
||||
accessToken,
|
||||
|
||||
Reference in New Issue
Block a user