272d3a47ae
Co-authored-by: Chaim Lev-Ari <chaim.lev-ari@portainer.io> Co-authored-by: andres-portainer <91705312+andres-portainer@users.noreply.github.com>
75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
package source
|
|
|
|
import (
|
|
portainer "github.com/portainer/portainer/api"
|
|
gittypes "github.com/portainer/portainer/api/git/types"
|
|
)
|
|
|
|
// Sanitize the source URL and enforce fields values based on user context
|
|
func sanitizeGitSource(source *portainer.Source) error {
|
|
if source == nil {
|
|
return ErrInvalidSource
|
|
}
|
|
|
|
if source.Type != portainer.SourceTypeGit {
|
|
return nil
|
|
}
|
|
|
|
if source.Git == nil {
|
|
return ErrInvalidSource
|
|
}
|
|
|
|
var err error
|
|
|
|
source.Git.URL, err = gittypes.NormalizeURL(gittypes.SanitizeURL(source.Git.URL))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func sanitizeAccesses(ctx *userContext, newValues *portainer.Source, previousValues *portainer.Source) error {
|
|
if newValues == nil {
|
|
return ErrInvalidSource
|
|
}
|
|
|
|
if ctx.User.Role == portainer.AdministratorRole {
|
|
if newValues.Public && newValues.AdministratorsOnly {
|
|
newValues.Public = false
|
|
}
|
|
|
|
if newValues.Public || newValues.AdministratorsOnly {
|
|
newValues.UserAccesses = []portainer.UserID{}
|
|
newValues.TeamAccesses = []portainer.TeamID{}
|
|
}
|
|
|
|
if !newValues.Public && !newValues.AdministratorsOnly && len(newValues.UserAccesses) == 0 && len(newValues.TeamAccesses) == 0 {
|
|
newValues.AdministratorsOnly = true
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Update flow ; regular user is not allowed to change the UAC, visibility or ownership of the source
|
|
if previousValues != nil {
|
|
newValues.UserAccesses = previousValues.UserAccesses
|
|
newValues.TeamAccesses = previousValues.TeamAccesses
|
|
newValues.Public = previousValues.Public
|
|
newValues.AdministratorsOnly = previousValues.AdministratorsOnly
|
|
newValues.OwnerID = previousValues.OwnerID
|
|
return nil
|
|
}
|
|
|
|
// Create flow
|
|
userAccesses := []portainer.UserID{ctx.User.ID}
|
|
if newValues.Public {
|
|
userAccesses = []portainer.UserID{}
|
|
}
|
|
newValues.UserAccesses = userAccesses
|
|
newValues.TeamAccesses = []portainer.TeamID{}
|
|
newValues.AdministratorsOnly = false
|
|
newValues.OwnerID = ctx.User.ID
|
|
return nil
|
|
}
|