Generic OAuth userinfo properies now configurablepull/390/merge
@@ -110,6 +110,10 @@ type ( | |||||
AuthEndpoint string `ini:"auth_endpoint"` | AuthEndpoint string `ini:"auth_endpoint"` | ||||
Scope string `ini:"scope"` | Scope string `ini:"scope"` | ||||
AllowDisconnect bool `ini:"allow_disconnect"` | AllowDisconnect bool `ini:"allow_disconnect"` | ||||
MapUserID string `ini:"map_user_id"` | |||||
MapUsername string `ini:"map_username"` | |||||
MapDisplayName string `ini:"map_display_name"` | |||||
MapEmail string `ini:"map_email"` | |||||
} | } | ||||
// AppCfg holds values that affect how the application functions | // AppCfg holds values that affect how the application functions | ||||
@@ -266,6 +266,10 @@ func configureGenericOauth(parentHandler *Handler, r *mux.Router, app *App) { | |||||
HttpClient: config.DefaultHTTPClient(), | HttpClient: config.DefaultHTTPClient(), | ||||
CallbackLocation: callbackLocation, | CallbackLocation: callbackLocation, | ||||
Scope: config.OrDefaultString(app.Config().GenericOauth.Scope, "read_user"), | Scope: config.OrDefaultString(app.Config().GenericOauth.Scope, "read_user"), | ||||
MapUserID: config.OrDefaultString(app.Config().GenericOauth.MapUserID, "user_id"), | |||||
MapUsername: config.OrDefaultString(app.Config().GenericOauth.MapUsername, "username"), | |||||
MapDisplayName: config.OrDefaultString(app.Config().GenericOauth.MapDisplayName, "-"), | |||||
MapEmail: config.OrDefaultString(app.Config().GenericOauth.MapEmail, "email"), | |||||
} | } | ||||
configureOauthRoutes(parentHandler, r, app, oauthClient, callbackProxy) | configureOauthRoutes(parentHandler, r, app, oauthClient, callbackProxy) | ||||
} | } | ||||
@@ -16,6 +16,10 @@ type genericOauthClient struct { | |||||
InspectLocation string | InspectLocation string | ||||
CallbackLocation string | CallbackLocation string | ||||
Scope string | Scope string | ||||
MapUserID string | |||||
MapUsername string | |||||
MapDisplayName string | |||||
MapEmail string | |||||
HttpClient HttpClient | HttpClient HttpClient | ||||
} | } | ||||
@@ -104,13 +108,19 @@ func (c genericOauthClient) inspectOauthAccessToken(ctx context.Context, accessT | |||||
return nil, errors.New("unable to inspect access token") | return nil, errors.New("unable to inspect access token") | ||||
} | } | ||||
var inspectResponse InspectResponse | |||||
if err := limitedJsonUnmarshal(resp.Body, infoRequestMaxLen, &inspectResponse); err != nil { | |||||
// since we don't know what the JSON from the server will look like, we create a | |||||
// generic interface and then map manually to values set in the config | |||||
var genericInterface map[string]interface{} | |||||
if err := limitedJsonUnmarshal(resp.Body, infoRequestMaxLen, &genericInterface); err != nil { | |||||
return nil, err | return nil, err | ||||
} | } | ||||
if inspectResponse.Error != "" { | |||||
return nil, errors.New(inspectResponse.Error) | |||||
} | |||||
// map each relevant field in inspectResponse to the mapped field from the config | |||||
var inspectResponse InspectResponse | |||||
inspectResponse.UserID, _ = genericInterface[c.MapUserID].(string) | |||||
inspectResponse.Username, _ = genericInterface[c.MapUsername].(string) | |||||
inspectResponse.DisplayName, _ = genericInterface[c.MapDisplayName].(string) | |||||
inspectResponse.Email, _ = genericInterface[c.MapEmail].(string) | |||||
return &inspectResponse, nil | return &inspectResponse, nil | ||||
} | } |