1package noop
  2
  3import (
  4	"fmt"
  5	"os"
  6	"path/filepath"
  7
  8	"github.com/charmbracelet/soft-serve/git"
  9	"github.com/charmbracelet/soft-serve/server/backend"
 10	"golang.org/x/crypto/ssh"
 11)
 12
 13var ErrNotImpl = fmt.Errorf("not implemented")
 14
 15var _ backend.Backend = (*Noop)(nil)
 16
 17var _ backend.AccessMethod = (*Noop)(nil)
 18
 19// Noop is a backend that does nothing. It's used for testing.
 20type Noop struct {
 21	Port string
 22}
 23
 24// Admins implements backend.Backend
 25func (*Noop) Admins() ([]string, error) {
 26	return nil, nil
 27}
 28
 29// Collaborators implements backend.Backend
 30func (*Noop) Collaborators(repo string) ([]string, error) {
 31	return nil, nil
 32}
 33
 34// RemoveAdmin implements backend.Backend
 35func (*Noop) RemoveAdmin(pk ssh.PublicKey) error {
 36	return nil
 37}
 38
 39// RemoveCollaborator implements backend.Backend
 40func (*Noop) RemoveCollaborator(pk ssh.PublicKey, repo string) error {
 41	return nil
 42}
 43
 44// AccessLevel implements backend.AccessMethod
 45func (*Noop) AccessLevel(repo string, pk ssh.PublicKey) backend.AccessLevel {
 46	return backend.AdminAccess
 47}
 48
 49// AddAdmin implements backend.Backend
 50func (*Noop) AddAdmin(pk ssh.PublicKey, memo string) error {
 51	return ErrNotImpl
 52}
 53
 54// AddCollaborator implements backend.Backend
 55func (*Noop) AddCollaborator(pk ssh.PublicKey, memo string, repo string) error {
 56	return ErrNotImpl
 57}
 58
 59// AllowKeyless implements backend.Backend
 60func (*Noop) AllowKeyless() bool {
 61	return true
 62}
 63
 64// AnonAccess implements backend.Backend
 65func (*Noop) AnonAccess() backend.AccessLevel {
 66	return backend.AdminAccess
 67}
 68
 69// CreateRepository implements backend.Backend
 70func (*Noop) CreateRepository(name string, private bool) (backend.Repository, error) {
 71	temp, err := os.MkdirTemp("", "soft-serve")
 72	if err != nil {
 73		return nil, err
 74	}
 75
 76	rp := filepath.Join(temp, name)
 77	_, err = git.Init(rp, private)
 78	if err != nil {
 79		return nil, err
 80	}
 81
 82	return &repo{path: rp}, nil
 83}
 84
 85// DeleteRepository implements backend.Backend
 86func (*Noop) DeleteRepository(name string) error {
 87	return ErrNotImpl
 88}
 89
 90// Description implements backend.Backend
 91func (*Noop) Description(repo string) string {
 92	return ""
 93}
 94
 95// IsAdmin implements backend.Backend
 96func (*Noop) IsAdmin(pk ssh.PublicKey) bool {
 97	return true
 98}
 99
100// IsCollaborator implements backend.Backend
101func (*Noop) IsCollaborator(pk ssh.PublicKey, repo string) bool {
102	return true
103}
104
105// IsPrivate implements backend.Backend
106func (*Noop) IsPrivate(repo string) bool {
107	return false
108}
109
110// RenameRepository implements backend.Backend
111func (*Noop) RenameRepository(oldName string, newName string) error {
112	return ErrNotImpl
113}
114
115// Repositories implements backend.Backend
116func (*Noop) Repositories() ([]backend.Repository, error) {
117	return nil, ErrNotImpl
118}
119
120// Repository implements backend.Backend
121func (*Noop) Repository(repo string) (backend.Repository, error) {
122	return nil, ErrNotImpl
123}
124
125// ServerHost implements backend.Backend
126func (*Noop) ServerHost() string {
127	return "localhost"
128}
129
130// ServerName implements backend.Backend
131func (*Noop) ServerName() string {
132	return "Soft Serve"
133}
134
135// ServerPort implements backend.Backend
136func (n *Noop) ServerPort() string {
137	return n.Port
138}
139
140// SetAllowKeyless implements backend.Backend
141func (*Noop) SetAllowKeyless(allow bool) error {
142	return ErrNotImpl
143}
144
145// SetAnonAccess implements backend.Backend
146func (*Noop) SetAnonAccess(level backend.AccessLevel) error {
147	return ErrNotImpl
148}
149
150// SetDescription implements backend.Backend
151func (*Noop) SetDescription(repo string, desc string) error {
152	return ErrNotImpl
153}
154
155// SetPrivate implements backend.Backend
156func (*Noop) SetPrivate(repo string, priv bool) error {
157	return ErrNotImpl
158}
159
160// SetServerHost implements backend.Backend
161func (*Noop) SetServerHost(host string) error {
162	return ErrNotImpl
163}
164
165// SetServerName implements backend.Backend
166func (*Noop) SetServerName(name string) error {
167	return ErrNotImpl
168}
169
170// SetServerPort implements backend.Backend
171func (*Noop) SetServerPort(port string) error {
172	return ErrNotImpl
173}