mirror of
https://github.com/portainer/portainer.git
synced 2026-06-23 07:30:13 +00:00
d9673e33ec
Co-authored-by: Claude <noreply@anthropic.com>
39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
package sources
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/dataservices"
|
|
httperror "github.com/portainer/portainer/pkg/libhttp/error"
|
|
)
|
|
|
|
// gitSourceStore is the minimal intersection of CE and EE DataStoreTx that these functions need.
|
|
// Both EE and CE DataStoreTx satisfy it, even though they are incompatible as full interface types.
|
|
type gitSourceStore interface {
|
|
Source() dataservices.SourceService
|
|
IsErrObjectNotFound(err error) bool
|
|
}
|
|
|
|
// ValidateGitSourceAccess checks that the given Source exists and is a git Source, and returns it.
|
|
// TODO(BE-12905): enforce per-user access policies once Source ownership is introduced.
|
|
func ValidateGitSourceAccess(tx gitSourceStore, sourceID portainer.SourceID) (*portainer.Source, *httperror.HandlerError) {
|
|
src, err := tx.Source().Read(sourceID)
|
|
if err != nil {
|
|
if tx.IsErrObjectNotFound(err) {
|
|
return nil, httperror.NotFound("Source not found", err)
|
|
}
|
|
return nil, httperror.InternalServerError("Unable to read source", err)
|
|
}
|
|
|
|
if src.Type != portainer.SourceTypeGit {
|
|
return nil, httperror.BadRequest(fmt.Sprintf("source %d is not a git source", sourceID), nil)
|
|
}
|
|
|
|
if src.Git == nil {
|
|
return nil, httperror.BadRequest("Source has no git configuration", nil)
|
|
}
|
|
|
|
return src, nil
|
|
}
|