diff options
author | 2024-08-05 18:55:10 -0700 | |
---|---|---|
committer | 2024-08-05 18:55:19 -0700 | |
commit | b96fcd1a54a46a95f98467b49a051564bc21c23c (patch) | |
tree | 93caeeb05f8d6310e241095608ea2428c749b18c /backend/internal/server/auth/user | |
download | ibd-trader-b96fcd1a54a46a95f98467b49a051564bc21c23c.tar.gz ibd-trader-b96fcd1a54a46a95f98467b49a051564bc21c23c.tar.zst ibd-trader-b96fcd1a54a46a95f98467b49a051564bc21c23c.zip |
Initial Commit
Diffstat (limited to 'backend/internal/server/auth/user')
-rw-r--r-- | backend/internal/server/auth/user/user.go | 45 |
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) + } +} |