aboutsummaryrefslogtreecommitdiff
path: root/backend/internal/server/auth/user
diff options
context:
space:
mode:
Diffstat (limited to 'backend/internal/server/auth/user')
-rw-r--r--backend/internal/server/auth/user/user.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/backend/internal/server/auth/user/user.go b/backend/internal/server/auth/user/user.go
new file mode 100644
index 0000000..526329d
--- /dev/null
+++ b/backend/internal/server/auth/user/user.go
@@ -0,0 +1,45 @@
+package user
+
+import (
+ "context"
+ "encoding/json"
+ "log/slog"
+ "net/http"
+ "time"
+
+ "ibd-trader/internal/auth"
+ "ibd-trader/internal/database"
+)
+
+func Handler(
+ logger *slog.Logger,
+ auth *auth.Authenticator,
+) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
+ defer cancel()
+
+ // Get session from context
+ session, ok := ctx.Value("session").(*database.Session)
+ if !ok {
+ http.Error(w, "Unauthorized", http.StatusUnauthorized)
+ return
+ }
+
+ // Create token source
+ ts := auth.TokenSource(ctx, &session.OAuthToken)
+
+ // Get user info
+ userInfo, err := auth.UserInfo(ctx, ts)
+ if err != nil {
+ logger.ErrorContext(ctx, "Failed to get user info", "error", err)
+ http.Error(w, "Failed to get user info", http.StatusInternalServerError)
+ return
+ }
+
+ // Write user info to response
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(http.StatusOK)
+ _ = json.NewEncoder(w).Encode(userInfo)
+ }
+}