@@ -76,6 +76,34 @@ func InitConfig() {
7676 }
7777}
7878
79+ // DecodeUserID parses the user access token to get out the "prvd"->"user_id" field.
80+ // Requires the user access token be setup already (i.e. authenticate has been called)
81+ func DecodeUserID () string {
82+ rawToken := RequireUserAccessToken ()
83+
84+ var jwtParser jwt.Parser
85+ token , _ , err := jwtParser .ParseUnverified (rawToken , jwt.MapClaims {})
86+ if err != nil {
87+ log .Printf ("failed to parse JWT token on behalf of authorized user; %s" , err .Error ())
88+ os .Exit (1 )
89+ }
90+
91+ claims := token .Claims .(jwt.MapClaims )
92+ prvd := claims ["prvd" ]
93+ if prvd == nil {
94+ log .Printf ("failed to get 'prvd' field from token" )
95+ os .Exit (1 )
96+ }
97+
98+ if userID , ok := prvd .(map [string ]interface {})["user_id" ].(string ); ok {
99+ return userID
100+ }
101+
102+ log .Printf ("failed to get 'user_id' field from token" )
103+ os .Exit (1 )
104+ return ""
105+ }
106+
79107func RequireUserAccessToken () string {
80108 token := ""
81109 if viper .IsSet (AccessTokenConfigKey ) {
@@ -217,28 +245,16 @@ func BuildConfigKeyWithUser(keyPartial, userID string) string {
217245}
218246
219247func isTokenExpired (bearerToken string ) bool {
220- token , err := jwt .Parse (bearerToken , func (_jwtToken * jwt.Token ) (interface {}, error ) {
221- // uncomment when enabling local verification
222- // var kid *string
223- // if kidhdr, ok := _jwtToken.Header["kid"].(string); ok {
224- // kid = &kidhdr
225- // }
226-
227- // publicKey, _, _, _ := util.ResolveJWTKeypair(kid)
228- // if publicKey == nil {
229- // msg := "failed to resolve a valid JWT verification key"
230- // if kid != nil {
231- // msg = fmt.Sprintf("%s; invalid kid specified in header: %s", msg, *kid)
232- // } else {
233- // msg = fmt.Sprintf("%s; no default verification key configured", msg)
234- // }
235- // return nil, fmt.Errorf(msg)
236- // }
237-
238- return nil , nil
239- })
248+
249+ var jwtParser jwt.Parser
250+ token , _ , err := jwtParser .ParseUnverified (bearerToken , jwt.MapClaims {})
251+ if err != nil {
252+ log .Printf ("failed to parse JWT token on behalf of authorized user; %s" , err .Error ())
253+ os .Exit (1 )
254+ }
240255
241256 if err != nil {
257+ log .Printf ("isTokenExpired err: %s" , err )
242258 return false
243259 }
244260
0 commit comments