♻️ Moved services & controllers to Pass
This commit is contained in:
61
DysonNetwork.Pass/Account/AccountGrpcService.cs
Normal file
61
DysonNetwork.Pass/Account/AccountGrpcService.cs
Normal file
@ -0,0 +1,61 @@
|
||||
using DysonNetwork.Shared.Models;
|
||||
using DysonNetwork.Shared.Protos.Account;
|
||||
using Grpc.Core;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using DysonNetwork.Pass.Auth;
|
||||
|
||||
namespace DysonNetwork.Pass.Account;
|
||||
|
||||
public class AccountGrpcService(AppDatabase db, AuthService auth)
|
||||
: DysonNetwork.Shared.Protos.Account.AccountService.AccountServiceBase
|
||||
{
|
||||
public override async Task<AccountResponse> GetAccount(Empty request, ServerCallContext context)
|
||||
{
|
||||
var account = await GetAccountFromContext(context);
|
||||
return ToAccountResponse(account);
|
||||
}
|
||||
|
||||
public override async Task<AccountResponse> UpdateAccount(UpdateAccountRequest request, ServerCallContext context)
|
||||
{
|
||||
var account = await GetAccountFromContext(context);
|
||||
|
||||
// TODO: implement
|
||||
|
||||
await db.SaveChangesAsync();
|
||||
|
||||
return ToAccountResponse(account);
|
||||
}
|
||||
|
||||
private async Task<Shared.Models.Account> GetAccountFromContext(ServerCallContext context)
|
||||
{
|
||||
var authorizationHeader = context.RequestHeaders.FirstOrDefault(h => h.Key == "authorization");
|
||||
if (authorizationHeader == null)
|
||||
{
|
||||
throw new RpcException(new Grpc.Core.Status(StatusCode.Unauthenticated, "Missing authorization header."));
|
||||
}
|
||||
|
||||
var token = authorizationHeader.Value.Replace("Bearer ", "");
|
||||
if (!auth.ValidateToken(token, out var sessionId))
|
||||
{
|
||||
throw new RpcException(new Grpc.Core.Status(StatusCode.Unauthenticated, "Invalid token."));
|
||||
}
|
||||
|
||||
var session = await db.AuthSessions.Include(s => s.Account).ThenInclude(a => a.Contacts)
|
||||
.FirstOrDefaultAsync(s => s.Id == sessionId);
|
||||
if (session == null)
|
||||
{
|
||||
throw new RpcException(new Grpc.Core.Status(StatusCode.Unauthenticated, "Session not found."));
|
||||
}
|
||||
|
||||
return session.Account;
|
||||
}
|
||||
|
||||
private AccountResponse ToAccountResponse(Shared.Models.Account account)
|
||||
{
|
||||
// TODO: implement
|
||||
return new AccountResponse
|
||||
{
|
||||
};
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user