Refactor SSOSettings to use types (#78675)
* refactor SSOSettings to use types * test struct * refactor SSOSettings struct to use types * fix database tests * fix populateSSOSettings() to accept an SSOSettings param * fix all tests from the database layer * handle errors for converting to/from SSOSettings * add json tag on OAuthInfo fields * use continue instead of if/else * add the source field to SSOSettingsDTO conversion * remove omitempty from json tags in OAuthInfo struct
This commit is contained in:
@@ -61,7 +61,18 @@ func (api *Api) listAllProvidersSettings(c *contextmodel.ReqContext) response.Re
|
||||
return response.Error(500, "Failed to get providers", err)
|
||||
}
|
||||
|
||||
return response.JSON(http.StatusOK, providers)
|
||||
dtos := make([]*models.SSOSettingsDTO, 0)
|
||||
for _, provider := range providers {
|
||||
dto, err := provider.ToSSOSettingsDTO()
|
||||
if err != nil {
|
||||
api.Log.Warn("Failed to convert SSO Settings for provider " + provider.Provider)
|
||||
continue
|
||||
}
|
||||
|
||||
dtos = append(dtos, dto)
|
||||
}
|
||||
|
||||
return response.JSON(http.StatusOK, dtos)
|
||||
}
|
||||
|
||||
func (api *Api) getProviderSettings(c *contextmodel.ReqContext) response.Response {
|
||||
@@ -75,7 +86,12 @@ func (api *Api) getProviderSettings(c *contextmodel.ReqContext) response.Respons
|
||||
return response.Error(http.StatusNotFound, "The provider was not found", err)
|
||||
}
|
||||
|
||||
return response.JSON(http.StatusOK, settings)
|
||||
dto, err := settings.ToSSOSettingsDTO()
|
||||
if err != nil {
|
||||
return response.Error(http.StatusInternalServerError, "The provider is invalid", err)
|
||||
}
|
||||
|
||||
return response.JSON(http.StatusOK, dto)
|
||||
}
|
||||
|
||||
func (api *Api) updateProviderSettings(c *contextmodel.ReqContext) response.Response {
|
||||
@@ -84,12 +100,19 @@ func (api *Api) updateProviderSettings(c *contextmodel.ReqContext) response.Resp
|
||||
return response.Error(http.StatusBadRequest, "Missing key", nil)
|
||||
}
|
||||
|
||||
var newSettings models.SSOSetting
|
||||
if err := web.Bind(c.Req, &newSettings); err != nil {
|
||||
var settingsDTO models.SSOSettingsDTO
|
||||
if err := web.Bind(c.Req, &settingsDTO); err != nil {
|
||||
return response.Error(http.StatusBadRequest, "Failed to parse request body", err)
|
||||
}
|
||||
|
||||
err := api.SSOSettingsService.Upsert(c.Req.Context(), key, newSettings.Settings)
|
||||
settings, err := settingsDTO.ToSSOSettings()
|
||||
if err != nil {
|
||||
return response.Error(http.StatusBadRequest, "Invalid request body", err)
|
||||
}
|
||||
|
||||
settings.Provider = key
|
||||
|
||||
err = api.SSOSettingsService.Upsert(c.Req.Context(), *settings)
|
||||
// TODO: first check whether the error is referring to validation errors
|
||||
|
||||
// other error
|
||||
|
||||
Reference in New Issue
Block a user