Documentation
¶
Index ¶
- Constants
- Variables
- type Cluster
- type ClusterExternal
- type Context
- type Project
- type ProjectExternal
- type RepoClient
- type RepoClientExternal
- type Role
- type RoleExternal
- type ServiceAccount
- type ServiceAccountAction
- type ServiceAccountActionExternal
- type ServiceAccountActionInfo
- type ServiceAccountAllActions
- type ServiceAccountCandidate
- type ServiceAccountCandidateExternal
- type ServiceAccountExternal
- type Session
- type TokenCache
- type User
- type UserExternal
Constants ¶
const ( ClusterCADataAction string = "upload-cluster-ca-data" ClientCertDataAction = "upload-client-cert-data" ClientKeyDataAction = "upload-client-key-data" OIDCIssuerDataAction = "upload-oidc-idp-issuer-ca-data" TokenDataAction = "upload-token-data" GCPKeyDataAction = "upload-gcp-key-data" AWSDataAction = "upload-aws-data" )
Action names
const ( RoleAdmin string = "admin" RoleViewer string = "viewer" )
The roles available for a project
const ( X509 string = "x509" Basic = "basic" Bearer = "bearerToken" OIDC = "oidc" GCP = "gcp-sa" AWS = "aws-sa" NotAvailable = "n/a" )
Supported auth mechanisms
const (
RepoClientGithub = "github"
)
The allowed repository clients
Variables ¶
var ServiceAccountActionInfos = map[string]ServiceAccountActionInfo{ "upload-cluster-ca-data": ServiceAccountActionInfo{ Name: ClusterCADataAction, Docs: "https://github.com/porter-dev/porter", Fields: "cluster_ca_data", }, "upload-client-cert-data": ServiceAccountActionInfo{ Name: ClientCertDataAction, Docs: "https://github.com/porter-dev/porter", Fields: "client_cert_data", }, "upload-client-key-data": ServiceAccountActionInfo{ Name: ClientKeyDataAction, Docs: "https://github.com/porter-dev/porter", Fields: "client_key_data", }, "upload-oidc-idp-issuer-ca-data": ServiceAccountActionInfo{ Name: OIDCIssuerDataAction, Docs: "https://github.com/porter-dev/porter", Fields: "oidc_idp_issuer_ca_data", }, "upload-token-data": ServiceAccountActionInfo{ Name: TokenDataAction, Docs: "https://github.com/porter-dev/porter", Fields: "token_data", }, "upload-gcp-key-data": ServiceAccountActionInfo{ Name: GCPKeyDataAction, Docs: "https://github.com/porter-dev/porter", Fields: "gcp_key_data", }, "upload-aws-data": ServiceAccountActionInfo{ Name: AWSDataAction, Docs: "https://github.com/porter-dev/porter", Fields: "aws_access_key_id,aws_secret_access_key,aws_cluster_id", }, }
ServiceAccountActionInfos contain the information for actions to be performed in order to initialize a ServiceAccount
Functions ¶
This section is empty.
Types ¶
type Cluster ¶
type Cluster struct {
gorm.Model
Name string `json:"name"`
ServiceAccountID uint `json:"service_account_id"`
LocationOfOrigin string `json:"location_of_origin"`
Server string `json:"server"`
TLSServerName string `json:"tls-server-name,omitempty"`
InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify,omitempty"`
ProxyURL string `json:"proxy-url,omitempty"`
// CertificateAuthorityData is encrypted at rest
CertificateAuthorityData []byte `json:"certificate-authority-data,omitempty"`
}
Cluster type that extends gorm.Model
func (*Cluster) Externalize ¶
func (c *Cluster) Externalize() *ClusterExternal
Externalize generates an external Cluster to be shared over REST
type ClusterExternal ¶
type ClusterExternal struct {
ID uint `json:"id"`
ServiceAccountID uint `json:"service_account_id"`
Name string `json:"name"`
Server string `json:"server"`
TLSServerName string `json:"tls-server-name,omitempty"`
InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify,omitempty"`
ProxyURL string `json:"proxy-url,omitempty"`
}
ClusterExternal is the external cluster type to be sent over REST
type Context ¶
type Context struct {
// Name is the name of the context
Name string `json:"name"`
// Server is the endpoint of the kube apiserver for a cluster
Server string `json:"server"`
// Cluster is the name of the cluster
Cluster string `json:"cluster"`
// User is the name of the user for a cluster
User string `json:"user"`
// Selected determines if the context has been selected for use in the
// dashboard
Selected bool `json:"selected"`
}
Context represents the configuration for a single cluster-user pair
type Project ¶
type Project struct {
gorm.Model
Name string `json:"name"`
Roles []Role `json:"roles"`
RepoClients []RepoClient `json:"repo_clients,omitempty"`
ServiceAccountCandidates []ServiceAccountCandidate `json:"sa_candidates"`
ServiceAccounts []ServiceAccount `json:"serviceaccounts"`
}
Project type that extends gorm.Model
func (*Project) Externalize ¶
func (p *Project) Externalize() *ProjectExternal
Externalize generates an external Project to be shared over REST
type ProjectExternal ¶
type ProjectExternal struct {
ID uint `json:"id"`
Name string `json:"name"`
Roles []RoleExternal `json:"roles"`
RepoClients []RepoClientExternal `json:"repo_clients,omitempty"`
}
ProjectExternal represents the Project type that is sent over REST
type RepoClient ¶
type RepoClient struct {
gorm.Model
ProjectID uint `json:"project_id"`
UserID uint `json:"user_id"`
RepoUserID uint `json:"repo_id"`
// the kind can be one of the predefined repo kinds
Kind string `json:"kind"`
AccessToken []byte `json:"access_token"`
RefreshToken []byte `json:"refresh_token"`
}
RepoClient is a client for a set of repositories that has been added via a project OAuth flow
func (*RepoClient) Externalize ¶
func (r *RepoClient) Externalize() *RepoClientExternal
Externalize generates an external RepoClient to be shared over REST
type RepoClientExternal ¶
type RepoClientExternal struct {
ID uint `json:"id"`
ProjectID uint `json:"project_id"`
UserID uint `json:"user_id"`
RepoUserID uint `json:"repo_id"`
Kind string `json:"kind"`
}
RepoClientExternal is a RepoClient scrubbed of sensitive information to be shared over REST
type Role ¶
type Role struct {
gorm.Model
Kind string `json:"kind"`
UserID uint `json:"user_id"`
ProjectID uint `json:"project_id"`
}
Role type that extends gorm.Model
func (*Role) Externalize ¶
func (r *Role) Externalize() *RoleExternal
Externalize generates an external Role to be shared over REST
type RoleExternal ¶
type RoleExternal struct {
ID uint `json:"id"`
Kind string `json:"kind"`
UserID uint `json:"user_id"`
ProjectID uint `json:"project_id"`
}
RoleExternal represents the Role type that is sent over REST
type ServiceAccount ¶
type ServiceAccount struct {
gorm.Model
ProjectID uint `json:"project_id"`
// Kind can either be "connector" or "provisioner"
Kind string `json:"kind"`
// Clusters is a list of clusters that this ServiceAccount can connect
// to or has provisioned
Clusters []Cluster `json:"clusters"`
// AuthMechanism is the strategy used for either connecting to or provisioning
// the cluster. Supported mechanisms are: basic,x509,bearerToken,oidc,gcp-sa,aws-sa
AuthMechanism string `json:"auth_mechanism"`
// These fields are used by all auth mechanisms
LocationOfOrigin string
Impersonate string `json:"act-as,omitempty"`
ImpersonateGroups string `json:"act-as-groups,omitempty"`
// Certificate data is used by x509 auth mechanisms over TLS
ClientCertificateData []byte `json:"client-certificate-data,omitempty"`
ClientKeyData []byte `json:"client-key-data,omitempty"`
// Token is used for bearer-token auth mechanisms
Token []byte `json:"token,omitempty"`
// Username/Password for basic authentication to a cluster
Username []byte `json:"username,omitempty"`
Password []byte `json:"password,omitempty"`
// TokenCache is a cache for bearer tokens with an expiry time
// Used by GCP and AWS mechanisms
TokenCache TokenCache `json:"token_cache"`
// KeyData for a service account for GCP connectors
GCPKeyData []byte `json:"gcp_key_data"`
// AWS data
AWSAccessKeyID []byte `json:"aws_access_key_id"`
AWSSecretAccessKey []byte `json:"aws_secret_access_key"`
AWSClusterID []byte `json:"aws_cluster_id"`
// OIDC-related fields
OIDCIssuerURL []byte `json:"idp-issuer-url"`
OIDCClientID []byte `json:"client-id"`
OIDCClientSecret []byte `json:"client-secret"`
OIDCCertificateAuthorityData []byte `json:"idp-certificate-authority-data"`
OIDCIDToken []byte `json:"id-token"`
OIDCRefreshToken []byte `json:"refresh-token"`
}
ServiceAccount type that extends gorm.Model
func (*ServiceAccount) Externalize ¶
func (s *ServiceAccount) Externalize() *ServiceAccountExternal
Externalize generates an external ServiceAccount to be shared over REST
type ServiceAccountAction ¶
type ServiceAccountAction struct {
gorm.Model
ServiceAccountCandidateID uint
// One of the constant action names
Name string `json:"name"`
Resolved bool `json:"resolved"`
// Filename is an optional filename, if the action requires
// data populated from a local file
Filename string `json:"filename,omitempty"`
}
ServiceAccountAction is an action that must be resolved to set up a ServiceAccount
func (*ServiceAccountAction) Externalize ¶
func (u *ServiceAccountAction) Externalize() *ServiceAccountActionExternal
Externalize generates an external ServiceAccount to be shared over REST
type ServiceAccountActionExternal ¶
type ServiceAccountActionExternal struct {
Name string `json:"name"`
Docs string `json:"docs"`
Resolved bool `json:"resolved"`
Fields string `json:"fields"`
Filename string `json:"filename,omitempty"`
}
ServiceAccountActionExternal is an external ServiceAccountAction to be sent over REST
type ServiceAccountActionInfo ¶
type ServiceAccountActionInfo struct {
Name string `json:"name"`
Docs string `json:"docs"`
// a comma-separated list of required fields to send in an action request
Fields string `json:"fields"`
}
ServiceAccountActionInfo contains the information for actions to be performed in order to initialize a ServiceAccount
type ServiceAccountAllActions ¶
type ServiceAccountAllActions struct {
Name string `json:"name"`
ClusterCAData string `json:"cluster_ca_data,omitempty"`
ClientCertData string `json:"client_cert_data,omitempty"`
ClientKeyData string `json:"client_key_data,omitempty"`
OIDCIssuerCAData string `json:"oidc_idp_issuer_ca_data,omitempty"`
TokenData string `json:"token_data,omitempty"`
GCPKeyData string `json:"gcp_key_data,omitempty"`
AWSAccessKeyID string `json:"aws_access_key_id"`
AWSSecretAccessKey string `json:"aws_secret_access_key"`
AWSClusterID string `json:"aws_cluster_id"`
}
ServiceAccountAllActions is a helper type that contains the fields for all possible actions, so that raw bytes can be unmarshaled in a single read
type ServiceAccountCandidate ¶
type ServiceAccountCandidate struct {
gorm.Model
ProjectID uint `json:"project_id"`
Kind string `json:"kind"`
Actions []ServiceAccountAction `json:"actions"`
ContextName string `json:"context_name"`
ClusterName string `json:"cluster_name"`
ClusterEndpoint string `json:"cluster_endpoint"`
AuthMechanism string `json:"auth_mechanism"`
// CreatedServiceAccountID is the ID of the service account that's eventually
// created
CreatedServiceAccountID uint `json:"create_sa_id"`
// The best-guess for the AWSClusterID, which is required by aws auth mechanisms
// See https://github.com/kubernetes-sigs/aws-iam-authenticator#what-is-a-cluster-id
AWSClusterIDGuess string `json:"aws_cluster_id_guess"`
Kubeconfig []byte `json:"kubeconfig"`
}
ServiceAccountCandidate is a service account that requires an action from the user to set up.
func (*ServiceAccountCandidate) Externalize ¶
func (s *ServiceAccountCandidate) Externalize() *ServiceAccountCandidateExternal
Externalize generates an external ServiceAccountCandidate to be shared over REST
type ServiceAccountCandidateExternal ¶
type ServiceAccountCandidateExternal struct {
ID uint `json:"id"`
Actions []ServiceAccountActionExternal `json:"actions"`
ProjectID uint `json:"project_id"`
Kind string `json:"kind"`
ContextName string `json:"context_name"`
ClusterName string `json:"cluster_name"`
ClusterEndpoint string `json:"cluster_endpoint"`
AuthMechanism string `json:"auth_mechanism"`
CreatedServiceAccountID uint `json:"created_sa_id"`
AWSClusterIDGuess string `json:"aws_cluster_id_guess"`
}
ServiceAccountCandidateExternal represents the ServiceAccountCandidate type that is sent over REST
type ServiceAccountExternal ¶
type ServiceAccountExternal struct {
ID uint `json:"id"`
ProjectID uint `json:"project_id"`
Kind string `json:"kind"`
Clusters []ClusterExternal `json:"clusters"`
AuthMechanism string `json:"auth_mechanism"`
}
ServiceAccountExternal is an external ServiceAccount to be shared over REST
type Session ¶
type Session struct {
gorm.Model
// Session ID
Key string `gorm:"unique"`
// encrypted cookie
Data []byte
// Time the session will expire
ExpiresAt time.Time
}
Session type that extends gorm.Model.
type TokenCache ¶
type TokenCache struct {
gorm.Model
ServiceAccountID uint `json:"service_account_id"`
Expiry time.Time `json:"expiry,omitempty"`
Token []byte `json:"access_token"`
}
TokenCache stores a token and an expiration for the token for a service account. This will never be shared over REST, so no need to externalize.
func (*TokenCache) IsExpired ¶
func (t *TokenCache) IsExpired() bool
IsExpired returns true if a token is expired, false otherwise
type User ¶
type User struct {
gorm.Model
Email string `json:"email" gorm:"unique"`
Password string `json:"password"`
}
User type that extends gorm.Model
func (*User) Externalize ¶
func (u *User) Externalize() *UserExternal
Externalize generates an external User to be shared over REST
type UserExternal ¶
UserExternal represents the User type that is sent over REST