61 lines
2.0 KiB
C#
61 lines
2.0 KiB
C#
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
|
|
{
|
|
};
|
|
}
|
|
} |