feat(backend): parse access level

Ayman Bagabas created

Change summary

server/backend/access.go    | 16 +++++++++++
server/backend/file/file.go | 53 +++++++++-----------------------------
server/backend/server.go    |  4 --
3 files changed, 29 insertions(+), 44 deletions(-)

Detailed changes

server/backend/access.go 🔗

@@ -32,3 +32,19 @@ func (a AccessLevel) String() string {
 		return "unknown"
 	}
 }
+
+// ParseAccessLevel parses an access level string.
+func ParseAccessLevel(s string) AccessLevel {
+	switch s {
+	case "no-access":
+		return NoAccess
+	case "read-only":
+		return ReadOnlyAccess
+	case "read-write":
+		return ReadWriteAccess
+	case "admin-access":
+		return AdminAccess
+	default:
+		return AccessLevel(-1)
+	}
+}

server/backend/file/file.go 🔗

@@ -39,16 +39,15 @@ import (
 
 // sub file and directory names.
 const (
-	anonAccess    = "anon-access"
-	defaultBranch = "default-branch"
-	allowKeyless  = "allow-keyless"
-	admins        = "admins"
-	repos         = "repos"
-	collabs       = "collaborators"
-	description   = "description"
-	exportOk      = "git-daemon-export-ok"
-	private       = "private"
-	settings      = "settings"
+	anonAccess   = "anon-access"
+	allowKeyless = "allow-keyless"
+	admins       = "admins"
+	repos        = "repos"
+	collabs      = "collaborators"
+	description  = "description"
+	exportOk     = "git-daemon-export-ok"
+	private      = "private"
+	settings     = "settings"
 )
 
 var (
@@ -128,7 +127,7 @@ func NewFileBackend(path string) (*FileBackend, error) {
 		}
 	}
 
-	for _, file := range []string{admins, anonAccess, allowKeyless, defaultBranch} {
+	for _, file := range []string{admins, anonAccess, allowKeyless} {
 		fp := filepath.Join(fb.settingsPath(), file)
 		_, err := os.Stat(fp)
 		if errors.Is(err, fs.ErrNotExist) {
@@ -433,38 +432,12 @@ func (fb *FileBackend) AnonAccess() backend.AccessLevel {
 		return backend.NoAccess
 	}
 
-	switch line {
-	case backend.NoAccess.String():
-		return backend.NoAccess
-	case backend.ReadOnlyAccess.String():
-		return backend.ReadOnlyAccess
-	case backend.ReadWriteAccess.String():
-		return backend.ReadWriteAccess
-	case backend.AdminAccess.String():
-		return backend.AdminAccess
-	default:
+	al := backend.ParseAccessLevel(line)
+	if al < 0 {
 		return backend.NoAccess
 	}
-}
 
-// DefaultBranch returns the default branch for new repositories.
-//
-// It implements backend.Backend.
-func (fb *FileBackend) DefaultBranch() string {
-	line, err := readOneLine(filepath.Join(fb.settingsPath(), defaultBranch))
-	if err != nil {
-		logger.Debug("failed to read default-branch file", "err", err)
-		return defaults[defaultBranch]
-	}
-
-	return line
-}
-
-// SetDefaultBranch sets the default branch for new repositories.
-//
-// It implements backend.Backend.
-func (fb *FileBackend) SetDefaultBranch(branch string) error {
-	return os.WriteFile(filepath.Join(fb.settingsPath(), defaultBranch), []byte(branch), 0600)
+	return al
 }
 
 // Description returns the description of the given repo.

server/backend/server.go 🔗

@@ -10,8 +10,4 @@ type ServerBackend interface {
 	AllowKeyless() bool
 	// SetAllowKeyless sets whether or not keyless access is allowed.
 	SetAllowKeyless(allow bool) error
-	// DefaultBranch returns the default branch for new repositories.
-	DefaultBranch() string
-	// SetDefaultBranch sets the default branch for new repositories.
-	SetDefaultBranch(branch string) error
 }