summaryrefslogtreecommitdiff
path: root/app/controllers/sessions
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/sessions')
-rw-r--r--app/controllers/sessions/controller.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/app/controllers/sessions/controller.go b/app/controllers/sessions/controller.go
index 7b6c871..a4ba092 100644
--- a/app/controllers/sessions/controller.go
+++ b/app/controllers/sessions/controller.go
@@ -1,8 +1,10 @@
package sessions
import (
+ "fmt"
"net/http"
+ "github.com/xlgmokha/x/pkg/serde"
"gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/oidc"
"golang.org/x/oauth2"
)
@@ -17,6 +19,7 @@ func New(cfg *oidc.OpenID) *Controller {
func (c *Controller) MountTo(mux *http.ServeMux) {
mux.HandleFunc("GET /session/new", c.New)
+ mux.HandleFunc("GET /session/callback", c.Create)
}
func (c *Controller) New(w http.ResponseWriter, r *http.Request) {
@@ -24,3 +27,29 @@ func (c *Controller) New(w http.ResponseWriter, r *http.Request) {
url := c.cfg.Config.AuthCodeURL("todo-csrf-token", oauth2.SetAuthURLParam("audience", "todo"))
http.Redirect(w, r, url, http.StatusFound)
}
+
+func (c *Controller) Create(w http.ResponseWriter, r *http.Request) {
+ token, err := c.cfg.Config.Exchange(r.Context(), r.URL.Query().Get("code"))
+ if err != nil {
+ fmt.Printf("%v\n", err)
+ }
+
+ err = serde.ToJSON(w, token)
+ if err != nil {
+ fmt.Printf("%v\n", err)
+ return
+ }
+
+ if rawIDToken, ok := token.Extra("id_token").(string); ok {
+ idToken, err := oidc.NewIDToken(rawIDToken)
+ if err != nil {
+ fmt.Printf("%v\n", err)
+ return
+ }
+ err = serde.ToJSON(w, idToken)
+ if err != nil {
+ fmt.Printf("%v\n", err)
+ return
+ }
+ }
+}