...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package gcp
17
18 import (
19 "time"
20
21 "github.com/gin-gonic/gin"
22 "golang.org/x/oauth2"
23
24 "github.com/chaos-mesh/chaos-mesh/pkg/dashboard/apiserver/utils"
25 )
26
27 func (s *Service) Middleware(c *gin.Context) {
28 ctx := c.Request.Context()
29
30 s.logger.Info("handling gcp middleware")
31 if c.Request.Header.Get("X-Authorization-Method") != "gcp" {
32 c.Next()
33 return
34 }
35
36 expiry, err := time.Parse(time.RFC3339, c.Request.Header.Get("X-Authorization-Expiry"))
37 if err != nil {
38 utils.SetAPIError(c, utils.ErrInternalServer.WrapWithNoMessage(err))
39 return
40 }
41 oauth := s.getOauthConfig(c)
42 token, err := oauth.TokenSource(ctx, &oauth2.Token{
43 AccessToken: c.Request.Header.Get("X-Authorization-AccessToken"),
44 RefreshToken: c.Request.Header.Get("X-Authorization-RefreshToken"),
45 Expiry: expiry,
46 }).Token()
47
48 if err != nil {
49 utils.SetAPIError(c, utils.ErrInternalServer.WrapWithNoMessage(err))
50 return
51 }
52
53 s.logger.Info("setting request header")
54 token.SetAuthHeader(c.Request)
55 s.logger.Info("setting request header", "header", c.Request.Header)
56 setCookie(c, token)
57
58 c.Next()
59 }
60