github.com/chenbh/concourse/v6@v6.4.2/skymarshal/token/middleware.go (about) 1 package token 2 3 import ( 4 "net/http" 5 "time" 6 ) 7 8 //go:generate counterfeiter . Middleware 9 type Middleware interface { 10 SetAuthToken(http.ResponseWriter, string, time.Time) error 11 UnsetAuthToken(http.ResponseWriter) 12 GetAuthToken(*http.Request) string 13 14 SetCSRFToken(http.ResponseWriter, string, time.Time) error 15 UnsetCSRFToken(http.ResponseWriter) 16 GetCSRFToken(*http.Request) string 17 18 SetStateToken(http.ResponseWriter, string, time.Time) error 19 UnsetStateToken(http.ResponseWriter) 20 GetStateToken(*http.Request) string 21 } 22 23 type middleware struct { 24 secureCookies bool 25 } 26 27 func NewMiddleware(secureCookies bool) Middleware { 28 return &middleware{secureCookies: secureCookies} 29 } 30 31 const stateCookieName = "skymarshal_state" 32 const authCookieName = "skymarshal_auth" 33 const csrfCookieName = "skymarshal_csrf" 34 35 func (m *middleware) UnsetAuthToken(w http.ResponseWriter) { 36 http.SetCookie(w, &http.Cookie{ 37 Name: authCookieName, 38 Path: "/", 39 MaxAge: -1, 40 Secure: m.secureCookies, 41 HttpOnly: true, 42 }) 43 } 44 45 func (m *middleware) SetAuthToken(w http.ResponseWriter, tokenStr string, expiry time.Time) error { 46 http.SetCookie(w, &http.Cookie{ 47 Name: authCookieName, 48 Value: tokenStr, 49 Path: "/", 50 Expires: expiry, 51 HttpOnly: true, 52 Secure: m.secureCookies, 53 }) 54 55 return nil 56 } 57 58 func (m *middleware) GetAuthToken(r *http.Request) string { 59 cookie, err := r.Cookie(authCookieName) 60 if err != nil { 61 return "" 62 } 63 return cookie.Value 64 } 65 66 func (m *middleware) UnsetCSRFToken(w http.ResponseWriter) { 67 http.SetCookie(w, &http.Cookie{ 68 Name: csrfCookieName, 69 Path: "/", 70 MaxAge: -1, 71 Secure: m.secureCookies, 72 HttpOnly: true, 73 }) 74 } 75 76 func (m *middleware) SetCSRFToken(w http.ResponseWriter, csrfToken string, expiry time.Time) error { 77 http.SetCookie(w, &http.Cookie{ 78 Name: csrfCookieName, 79 Value: csrfToken, 80 Path: "/", 81 Expires: expiry, 82 Secure: m.secureCookies, 83 HttpOnly: true, 84 }) 85 86 return nil 87 } 88 89 func (m *middleware) GetCSRFToken(r *http.Request) string { 90 cookie, err := r.Cookie(csrfCookieName) 91 if err != nil { 92 return "" 93 } 94 return cookie.Value 95 } 96 97 func (m *middleware) UnsetStateToken(w http.ResponseWriter) { 98 http.SetCookie(w, &http.Cookie{ 99 Name: stateCookieName, 100 Path: "/", 101 MaxAge: -1, 102 Secure: m.secureCookies, 103 HttpOnly: true, 104 }) 105 } 106 107 func (m *middleware) SetStateToken(w http.ResponseWriter, stateToken string, expiry time.Time) error { 108 http.SetCookie(w, &http.Cookie{ 109 Name: stateCookieName, 110 Value: stateToken, 111 Path: "/", 112 Expires: expiry, 113 Secure: m.secureCookies, 114 HttpOnly: true, 115 }) 116 117 return nil 118 } 119 120 func (m *middleware) GetStateToken(r *http.Request) string { 121 cookie, err := r.Cookie(stateCookieName) 122 if err != nil { 123 return "" 124 } 125 return cookie.Value 126 }