aboutsummaryrefslogtreecommitdiff
path: root/backend/internal/server
diff options
context:
space:
mode:
authorGravatar Anshul Gupta <ansg191@anshulg.com> 2024-08-06 18:53:22 -0700
committerGravatar Anshul Gupta <ansg191@anshulg.com> 2024-08-06 18:53:22 -0700
commit825ba9d21d15e1f9b34c60bac68e42ee1fb125f9 (patch)
treec466380d15d672a4619a7e1c15f058d52123dbb4 /backend/internal/server
parent961f9e0a76c3cfe9ae92ca8da0531790e0610b69 (diff)
downloadibd-trader-825ba9d21d15e1f9b34c60bac68e42ee1fb125f9.tar.gz
ibd-trader-825ba9d21d15e1f9b34c60bac68e42ee1fb125f9.tar.zst
ibd-trader-825ba9d21d15e1f9b34c60bac68e42ee1fb125f9.zip
Improve selection of IBD transports
Diffstat (limited to 'backend/internal/server')
-rw-r--r--backend/internal/server/idb/user/v1/user.go57
-rw-r--r--backend/internal/server/server.go2
2 files changed, 51 insertions, 8 deletions
diff --git a/backend/internal/server/idb/user/v1/user.go b/backend/internal/server/idb/user/v1/user.go
index 8e5f16a..c100465 100644
--- a/backend/internal/server/idb/user/v1/user.go
+++ b/backend/internal/server/idb/user/v1/user.go
@@ -17,21 +17,26 @@ import (
type Server struct {
pb.UnimplementedUserServiceServer
- db database.UserStore
+ user database.UserStore
+ cookie database.CookieSource
client *ibd.Client
}
-func New(db database.UserStore, client *ibd.Client) *Server {
- return &Server{db: db, client: client}
+func New(userStore database.UserStore, cookieStore database.CookieStore, client *ibd.Client) *Server {
+ return &Server{
+ user: userStore,
+ cookie: cookieStore,
+ client: client,
+ }
}
func (u *Server) CreateUser(ctx context.Context, request *pb.CreateUserRequest) (*pb.CreateUserResponse, error) {
- err := u.db.AddUser(ctx, request.Subject)
+ err := u.user.AddUser(ctx, request.Subject)
if err != nil {
return nil, status.Errorf(codes.Internal, "unable to create user: %v", err)
}
- user, err := u.db.GetUser(ctx, request.Subject)
+ user, err := u.user.GetUser(ctx, request.Subject)
if err != nil {
return nil, status.Errorf(codes.Internal, "unable to get user: %v", err)
}
@@ -46,7 +51,7 @@ func (u *Server) CreateUser(ctx context.Context, request *pb.CreateUserRequest)
}
func (u *Server) GetUser(ctx context.Context, request *pb.GetUserRequest) (*pb.GetUserResponse, error) {
- user, err := u.db.GetUser(ctx, request.Subject)
+ user, err := u.user.GetUser(ctx, request.Subject)
if errors.Is(err, database.ErrUserNotFound) {
return nil, status.New(codes.NotFound, "user not found").Err()
}
@@ -83,7 +88,7 @@ func (u *Server) UpdateUser(ctx context.Context, request *pb.UpdateUserRequest)
(newUser.IbdPassword != existingUser.IbdPassword ||
newUser.IbdUsername != existingUser.IbdUsername) {
// Update IBD creds
- err = u.db.AddIBDCreds(ctx, newUser.Subject, *newUser.IbdUsername, *newUser.IbdPassword)
+ err = u.user.AddIBDCreds(ctx, newUser.Subject, *newUser.IbdUsername, *newUser.IbdPassword)
if err != nil {
return nil, status.Errorf(codes.Internal, "unable to update user: %v", err)
}
@@ -111,3 +116,41 @@ func (u *Server) CheckIBDUsername(ctx context.Context, req *pb.CheckIBDUsernameR
Exists: exists,
}, nil
}
+
+func (u *Server) AuthenticateUser(ctx context.Context, req *pb.AuthenticateUserRequest) (*pb.AuthenticateUserResponse, error) {
+ // Check if user has cookies
+ cookies, err := u.cookie.GetCookies(ctx, req.Subject, false)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "unable to get cookies: %v", err)
+ }
+ if len(cookies) > 0 {
+ return &pb.AuthenticateUserResponse{
+ Authenticated: true,
+ }, nil
+ }
+
+ // Authenticate user
+ // Get IBD creds
+ username, password, err := u.user.GetIBDCreds(ctx, req.Subject)
+ if errors.Is(err, database.ErrIBDCredsNotFound) {
+ return nil, status.New(codes.NotFound, "User has no IDB creds").Err()
+ }
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "unable to get IBD creds: %v", err)
+ }
+
+ // Authenticate user
+ cookie, err := u.client.Authenticate(ctx, username, password)
+ if errors.Is(err, ibd.ErrBadCredentials) {
+ return &pb.AuthenticateUserResponse{
+ Authenticated: false,
+ }, nil
+ }
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "unable to authenticate user: %v", err)
+ }
+
+ return &pb.AuthenticateUserResponse{
+ Authenticated: cookie != nil,
+ }, nil
+}
diff --git a/backend/internal/server/server.go b/backend/internal/server/server.go
index c46a629..186d581 100644
--- a/backend/internal/server/server.go
+++ b/backend/internal/server/server.go
@@ -45,7 +45,7 @@ func New(
}
s := grpc.NewServer()
- upb.RegisterUserServiceServer(s, user.New(db, client))
+ upb.RegisterUserServiceServer(s, user.New(db, db, client))
spb.RegisterStockServiceServer(s, stock.New(db, scrapeQueue))
longrunningpb.RegisterOperationsServer(s, newOperationServer(scrapeQueue))
reflection.Register(s)