AuthorizationCodeAuth allows users having a valid AuthCode to register a session
(middleware frontend.AuthMiddleware)
| 34 | |
| 35 | // AuthorizationCodeAuth allows users having a valid AuthCode to register a session |
| 36 | func AuthorizationCodeAuth(middleware frontend.AuthMiddleware) frontend.AuthMiddleware { |
| 37 | |
| 38 | return func(req *restful.Request, rsp *restful.Response, in *frontend.FrontSessionWithRuntimeCtx, out *rest.FrontSessionResponse, session *sessions.Session) error { |
| 39 | |
| 40 | if a, ok := in.AuthInfo["type"]; !ok || a != "authorization_code" { // Ignore this middleware |
| 41 | return middleware(req, rsp, in, out, session) |
| 42 | } |
| 43 | |
| 44 | token, err := auth.DefaultJWTVerifier().Exchange(req.Request.Context(), in.AuthInfo["code"], in.AuthInfo["code_verifier"]) |
| 45 | if err != nil { |
| 46 | return err |
| 47 | } |
| 48 | |
| 49 | _, claims, err := auth.DefaultJWTVerifier().Verify(req.Request.Context(), token.AccessToken) |
| 50 | if err != nil { |
| 51 | return err |
| 52 | } |
| 53 | |
| 54 | in.AuthInfo["login"] = claims.Name |
| 55 | in.AuthInfo["source"] = claims.AuthSource |
| 56 | |
| 57 | session.Values["access_token"] = token.AccessToken |
| 58 | session.Values["id_token"] = token.Extra("id_token").(string) |
| 59 | session.Values["expires_at"] = strconv.Itoa(int(token.Expiry.Unix())) |
| 60 | session.Values["refresh_token"] = token.RefreshToken |
| 61 | |
| 62 | out.Token = &pauth.Token{ |
| 63 | AccessToken: session.Values["access_token"].(string), |
| 64 | IDToken: session.Values["id_token"].(string), |
| 65 | ExpiresAt: session.Values["expires_at"].(string), |
| 66 | } |
| 67 | |
| 68 | return middleware(req, rsp, in, out, session) // BEFORE MIDDLEWARE |
| 69 | } |
| 70 | } |