Skip to content

Commit

Permalink
Add response headers for /validate with id_token and access_token (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
simongottschlag authored Feb 7, 2019
1 parent 2dfcccd commit 08f946c
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 8 deletions.
8 changes: 8 additions & 0 deletions handlers/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,12 @@ func ValidateRequestHandler(w http.ResponseWriter, r *http.Request) {
}

w.Header().Add(cfg.Cfg.Headers.User, claims.Username)
if cfg.Get("Headers.IDToken") != "" {
w.Header().Add(cfg.Get("Headers.IDToken"), claims.IDToken)
}
if cfg.Get("Headers.AccessToken") != "" {
w.Header().Add(cfg.Get("Headers.AccessToken"), claims.AccessToken)
}
w.Header().Add(cfg.Cfg.Headers.Success, "true")
log.WithFields(log.Fields{cfg.Cfg.Headers.User: w.Header().Get(cfg.Cfg.Headers.User)}).Debug("response header")

Expand Down Expand Up @@ -638,6 +644,8 @@ func getUserInfoFromADFS(r *http.Request, user *structs.User) error {

adfsUser.PrepareUserData()
user.Username = adfsUser.UPN
user.IDToken = string(tokenRes.IDToken)
user.AccessToken = string(tokenRes.AccessToken)
log.Debug(user)
return nil
}
Expand Down
8 changes: 8 additions & 0 deletions pkg/cfg/cfg.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ type config struct {
}
Headers struct {
JWT string `mapstructure:"jwt"`
IDToken string `mapstructure:"idToken"`
AccessToken string `mapstructure:"accessToken"`
User string `mapstructure:"user"`
QueryString string `mapstructure:"querystring"`
Redirect string `mapstructure:"redirect"`
Expand Down Expand Up @@ -364,6 +366,12 @@ func setDefaults() {
if !viper.IsSet(Branding.LCName + ".headers.jwt") {
Cfg.Headers.JWT = "X-" + Branding.CcName + "-Token"
}
if !viper.IsSet(Branding.LCName + ".headers.idToken") {
Cfg.Headers.IDToken = ""
}
if !viper.IsSet(Branding.LCName + ".headers.accessToken") {
Cfg.Headers.AccessToken = ""
}
if !viper.IsSet(Branding.LCName + ".headers.querystring") {
Cfg.Headers.QueryString = "access_token"
}
Expand Down
8 changes: 6 additions & 2 deletions pkg/jwtmanager/jwtmanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ import (

// VouchClaims jwt Claims specific to vouch
type VouchClaims struct {
Username string `json:"username"`
Sites []string `json:"sites"` // tempting to make this a map but the array is fewer characters in the jwt
Username string `json:"username"`
Sites []string `json:"sites"` // tempting to make this a map but the array is fewer characters in the jwt
IDToken string `json:"id_token"`
AccessToken string `json:"access_token"`
jwt.StandardClaims
}

Expand Down Expand Up @@ -53,6 +55,8 @@ func CreateUserTokenString(u structs.User) string {
claims := VouchClaims{
u.Username,
Sites,
u.IDToken,
u.AccessToken,
StandardClaims,
}

Expand Down
2 changes: 2 additions & 0 deletions pkg/jwtmanager/jwtmanager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ func init() {
lc = VouchClaims{
u1.Username,
Sites,
u1.IDToken,
u1.AccessToken,
StandardClaims,
}
}
Expand Down
14 changes: 8 additions & 6 deletions pkg/structs/structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ type User struct {
// TODO: set Provider here so that we can pass it to db
// populated by db (via mapstructure) or from provider (via json)
// Provider string `json:"provider",mapstructure:"provider"`
Username string `json:"username",mapstructure:"username"`
Name string `json:"name",mapstructure:"name"`
Email string `json:"email",mapstructure:"email"`
CreatedOn int64 `json:"createdon"`
LastUpdate int64 `json:"lastupdate"`
ID int `json:"id",mapstructure:"id"`
Username string `json:"username",mapstructure:"username"`
Name string `json:"name",mapstructure:"name"`
Email string `json:"email",mapstructure:"email"`
CreatedOn int64 `json:"createdon"`
LastUpdate int64 `json:"lastupdate"`
ID int `json:"id",mapstructure:"id"`
IDToken string `json:"id_token",mapstructure:"id_token"`
AccessToken string `json:"access_token,mapstructure:"id_token"`
// jwt.StandardClaims
}

Expand Down

0 comments on commit 08f946c

Please sign in to comment.