From f6c5c552aae58f457f9f7ef56edbcc1f568281d2 Mon Sep 17 00:00:00 2001 From: zees-dev <63374656+zees-dev@users.noreply.github.com> Date: Fri, 2 Jul 2021 18:20:10 +1200 Subject: [PATCH] feat(oauth/team-memberships): oauth team memberships teaser EE-341 (#5088) * EE oauth team memberships feature teaser * bugfix: deleting a default team should reset default team id to 0 * error wrapping, refactor team deletion code --- api/http/handler/teams/team_delete.go | 27 +++++++++++++++++-- .../oauth-settings/oauth-settings.html | 15 +++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/api/http/handler/teams/team_delete.go b/api/http/handler/teams/team_delete.go index cc1246191..bc51128d1 100644 --- a/api/http/handler/teams/team_delete.go +++ b/api/http/handler/teams/team_delete.go @@ -3,11 +3,12 @@ package teams import ( "net/http" + "github.com/pkg/errors" httperror "github.com/portainer/libhttp/error" "github.com/portainer/libhttp/request" "github.com/portainer/libhttp/response" portainer "github.com/portainer/portainer/api" - "github.com/portainer/portainer/api/bolt/errors" + bolterrors "github.com/portainer/portainer/api/bolt/errors" ) // @id TeamDelete @@ -29,7 +30,7 @@ func (handler *Handler) teamDelete(w http.ResponseWriter, r *http.Request) *http } _, err = handler.DataStore.Team().Team(portainer.TeamID(teamID)) - if err == errors.ErrObjectNotFound { + if err == bolterrors.ErrObjectNotFound { return &httperror.HandlerError{http.StatusNotFound, "Unable to find a team with the specified identifier inside the database", err} } else if err != nil { return &httperror.HandlerError{http.StatusInternalServerError, "Unable to find a team with the specified identifier inside the database", err} @@ -45,5 +46,27 @@ func (handler *Handler) teamDelete(w http.ResponseWriter, r *http.Request) *http return &httperror.HandlerError{http.StatusInternalServerError, "Unable to delete associated team memberships from the database", err} } + // update default team if deleted team was default + err = handler.updateDefaultTeamIfDeleted(portainer.TeamID(teamID)) + if err != nil { + return &httperror.HandlerError{http.StatusInternalServerError, "Unable to reset default team", err} + } + return response.Empty(w) } + +// updateDefaultTeamIfDeleted resets the default team to nil if default team was the deleted team +func (handler *Handler) updateDefaultTeamIfDeleted(teamID portainer.TeamID) error { + settings, err := handler.DataStore.Settings().Settings() + if err != nil { + return errors.Wrap(err, "failed to fetch settings") + } + + if teamID != settings.OAuthSettings.DefaultTeamID { + return nil + } + + settings.OAuthSettings.DefaultTeamID = 0 + err = handler.DataStore.Settings().UpdateSettings(settings) + return errors.Wrap(err, "failed to update settings") +} diff --git a/app/portainer/oauth/components/oauth-settings/oauth-settings.html b/app/portainer/oauth/components/oauth-settings/oauth-settings.html index c677d22e2..61ad0014c 100644 --- a/app/portainer/oauth/components/oauth-settings/oauth-settings.html +++ b/app/portainer/oauth/components/oauth-settings/oauth-settings.html @@ -67,6 +67,21 @@ +