package portainer import ( "io" ) type ( // Pair defines a key/value string pair Pair struct { Name string `json:"name"` Value string `json:"value"` } // CLIFlags represents the available flags on the CLI. CLIFlags struct { Addr *string Assets *string Data *string ExternalEndpoints *string SyncInterval *string Endpoint *string Labels *[]Pair Logo *string Templates *string NoAuth *bool NoAnalytics *bool TLSVerify *bool TLSCacert *string TLSCert *string TLSKey *string } // Settings represents Portainer settings. Settings struct { HiddenLabels []Pair `json:"hiddenLabels"` Logo string `json:"logo"` Authentication bool `json:"authentication"` Analytics bool `json:"analytics"` EndpointManagement bool `json:"endpointManagement"` } // User represent a user account. User struct { Username string `json:"Username"` Password string `json:"Password,omitempty"` } // TokenData represents the data embedded in a JWT token. TokenData struct { Username string } // EndpointID represents an endpoint identifier. EndpointID int // Endpoint represents a Docker endpoint with all the info required // to connect to it. Endpoint struct { ID EndpointID `json:"Id"` Name string `json:"Name"` URL string `json:"URL"` TLS bool `json:"TLS"` TLSCACertPath string `json:"TLSCACert,omitempty"` TLSCertPath string `json:"TLSCert,omitempty"` TLSKeyPath string `json:"TLSKey,omitempty"` } // TLSFileType represents a type of TLS file required to connect to a Docker endpoint. // It can be either a TLS CA file, a TLS certificate file or a TLS key file. TLSFileType int // CLIService represents a service for managing CLI. CLIService interface { ParseFlags(version string) (*CLIFlags, error) ValidateFlags(flags *CLIFlags) error } // DataStore defines the interface to manage the data. DataStore interface { Open() error Close() error } // Server defines the interface to serve the data. Server interface { Start() error } // UserService represents a service for managing users. UserService interface { User(username string) (*User, error) UpdateUser(user *User) error } // EndpointService represents a service for managing endpoints. EndpointService interface { Endpoint(ID EndpointID) (*Endpoint, error) Endpoints() ([]Endpoint, error) CreateEndpoint(endpoint *Endpoint) error UpdateEndpoint(ID EndpointID, endpoint *Endpoint) error DeleteEndpoint(ID EndpointID) error GetActive() (*Endpoint, error) SetActive(endpoint *Endpoint) error DeleteActive() error Synchronize(toCreate, toUpdate, toDelete []*Endpoint) error } // CryptoService represents a service for encrypting/hashing data. CryptoService interface { Hash(data string) (string, error) CompareHashAndData(hash string, data string) error } // JWTService represents a service for managing JWT tokens. JWTService interface { GenerateToken(data *TokenData) (string, error) VerifyToken(token string) error } // FileService represents a service for managing files. FileService interface { StoreTLSFile(endpointID EndpointID, fileType TLSFileType, r io.Reader) error GetPathForTLSFile(endpointID EndpointID, fileType TLSFileType) (string, error) DeleteTLSFiles(endpointID EndpointID) error } // EndpointWatcher represents a service to synchronize the endpoints via an external source. EndpointWatcher interface { WatchEndpointFile(endpointFilePath string) error } ) const ( // APIVersion is the version number of portainer API. APIVersion = "1.11.4" ) const ( // TLSFileCA represents a TLS CA certificate file. TLSFileCA TLSFileType = iota // TLSFileCert represents a TLS certificate file. TLSFileCert // TLSFileKey represents a TLS key file. TLSFileKey )