backend

package
v0.5.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 5, 2023 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func KeysEqual

func KeysEqual(a, b gossh.PublicKey) bool

KeysEqual returns whether the two public keys are equal.

func LatestFile

func LatestFile(r Repository, pattern string) (string, string, error)

LatestFile returns the contents of the latest file at the specified path in the repository and its file path.

func MarshalAuthorizedKey

func MarshalAuthorizedKey(pk gossh.PublicKey) string

MarshalAuthorizedKey marshals a public key into an authorized key string.

This is the inverse of ParseAuthorizedKey. This function is a copy of ssh.MarshalAuthorizedKey, but without the trailing newline. It returns an empty string if pk is nil.

func ParseAuthorizedKey

func ParseAuthorizedKey(ak string) (gossh.PublicKey, string, error)

ParseAuthorizedKey parses an authorized key string into a public key.

func Readme

func Readme(r Repository) (readme string, path string, err error)

Readme returns the repository's README.

Types

type AccessLevel

type AccessLevel int

AccessLevel is the level of access allowed to a repo.

const (
	// NoAccess does not allow access to the repo.
	NoAccess AccessLevel = iota

	// ReadOnlyAccess allows read-only access to the repo.
	ReadOnlyAccess

	// ReadWriteAccess allows read and write access to the repo.
	ReadWriteAccess

	// AdminAccess allows read, write, and admin access to the repo.
	AdminAccess
)

func ParseAccessLevel

func ParseAccessLevel(s string) AccessLevel

ParseAccessLevel parses an access level string.

func (AccessLevel) String

func (a AccessLevel) String() string

String returns the string representation of the access level.

type Backend

Backend is an interface that handles repositories management and any non-Git related operations.

type HookArg

type HookArg struct {
	OldSha  string
	NewSha  string
	RefName string
}

HookArg is an argument to a git hook.

type Hooks

type Hooks interface {
	PreReceive(stdout io.Writer, stderr io.Writer, repo string, args []HookArg)
	Update(stdout io.Writer, stderr io.Writer, repo string, arg HookArg)
	PostReceive(stdout io.Writer, stderr io.Writer, repo string, args []HookArg)
	PostUpdate(stdout io.Writer, stderr io.Writer, repo string, args ...string)
}

Hooks provides an interface for git server-side hooks.

type Repository

type Repository interface {
	// Name returns the repository's name.
	Name() string
	// ProjectName returns the repository's project name.
	ProjectName() string
	// Description returns the repository's description.
	Description() string
	// IsPrivate returns whether the repository is private.
	IsPrivate() bool
	// IsMirror returns whether the repository is a mirror.
	IsMirror() bool
	// IsHidden returns whether the repository is hidden.
	IsHidden() bool
	// UpdatedAt returns the time the repository was last updated.
	// If the repository has never been updated, it returns the time it was created.
	UpdatedAt() time.Time
	// Open returns the underlying git.Repository.
	Open() (*git.Repository, error)
}

Repository is a Git repository interface.

type RepositoryAccess

type RepositoryAccess interface {
	IsCollaborator(repo string, username string) (bool, error)
	// AddCollaborator adds the authorized key as a collaborator on the repository.
	AddCollaborator(repo string, username string) error
	// RemoveCollaborator removes the authorized key as a collaborator on the repository.
	RemoveCollaborator(repo string, username string) error
	// Collaborators returns a list of all collaborators on the repository.
	Collaborators(repo string) ([]string, error)
}

RepositoryAccess is an interface for managing repository access.

type RepositoryMetadata

type RepositoryMetadata interface {
	// ProjectName returns the repository's project name.
	ProjectName(repo string) (string, error)
	// SetProjectName sets the repository's project name.
	SetProjectName(repo, name string) error
	// Description returns the repository's description.
	Description(repo string) (string, error)
	// SetDescription sets the repository's description.
	SetDescription(repo, desc string) error
	// IsPrivate returns whether the repository is private.
	IsPrivate(repo string) (bool, error)
	// SetPrivate sets whether the repository is private.
	SetPrivate(repo string, private bool) error
	// IsMirror returns whether the repository is a mirror.
	IsMirror(repo string) (bool, error)
	// IsHidden returns whether the repository is hidden.
	IsHidden(repo string) (bool, error)
	// SetHidden sets whether the repository is hidden.
	SetHidden(repo string, hidden bool) error
}

RepositoryMetadata is an interface for managing repository metadata.

type RepositoryOptions

type RepositoryOptions struct {
	Private     bool
	Description string
	ProjectName string
	Mirror      bool
	Hidden      bool
}

RepositoryOptions are options for creating a new repository.

type RepositoryStore

type RepositoryStore interface {
	// Repository finds the given repository.
	Repository(repo string) (Repository, error)
	// Repositories returns a list of all repositories.
	Repositories() ([]Repository, error)
	// CreateRepository creates a new repository.
	CreateRepository(name string, opts RepositoryOptions) (Repository, error)
	// ImportRepository creates a new repository from a Git repository.
	ImportRepository(name string, remote string, opts RepositoryOptions) (Repository, error)
	// DeleteRepository deletes a repository.
	DeleteRepository(name string) error
	// RenameRepository renames a repository.
	RenameRepository(oldName, newName string) error
}

RepositoryStore is an interface for managing repositories.

type SettingsBackend

type SettingsBackend interface {
	// AnonAccess returns the access level for anonymous users.
	AnonAccess() AccessLevel
	// SetAnonAccess sets the access level for anonymous users.
	SetAnonAccess(level AccessLevel) error
	// AllowKeyless returns true if keyless access is allowed.
	AllowKeyless() bool
	// SetAllowKeyless sets whether or not keyless access is allowed.
	SetAllowKeyless(allow bool) error
}

SettingsBackend is an interface that handles server configuration.

type User

type User interface {
	// Username returns the user's username.
	Username() string
	// IsAdmin returns whether the user is an admin.
	IsAdmin() bool
	// PublicKeys returns the user's public keys.
	PublicKeys() []ssh.PublicKey
}

User is an interface representing a user.

type UserAccess

type UserAccess interface {
	// AccessLevel returns the access level of the username to the repository.
	AccessLevel(repo string, username string) AccessLevel
	// AccessLevelByPublicKey returns the access level of the public key to the repository.
	AccessLevelByPublicKey(repo string, pk ssh.PublicKey) AccessLevel
}

UserAccess is an interface that handles user access to repositories.

type UserOptions

type UserOptions struct {
	// Admin is whether the user is an admin.
	Admin bool
	// PublicKeys are the user's public keys.
	PublicKeys []ssh.PublicKey
}

UserOptions are options for creating a user.

type UserStore

type UserStore interface {
	// User finds the given user.
	User(username string) (User, error)
	// UserByPublicKey finds the user with the given public key.
	UserByPublicKey(pk ssh.PublicKey) (User, error)
	// Users returns a list of all users.
	Users() ([]string, error)
	// CreateUser creates a new user.
	CreateUser(username string, opts UserOptions) (User, error)
	// DeleteUser deletes a user.
	DeleteUser(username string) error
	// SetUsername sets the username of the user.
	SetUsername(oldUsername string, newUsername string) error
	// SetAdmin sets whether the user is an admin.
	SetAdmin(username string, admin bool) error
	// AddPublicKey adds a public key to the user.
	AddPublicKey(username string, pk ssh.PublicKey) error
	// RemovePublicKey removes a public key from the user.
	RemovePublicKey(username string, pk ssh.PublicKey) error
	// ListPublicKeys lists the public keys of the user.
	ListPublicKeys(username string) ([]ssh.PublicKey, error)
}

UserStore is an interface for managing users.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL