1bcdbc058362e74ac51f8707946fe81f9053dab1

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix(backend): propagate errors

Diff

This diff is truncated to protect this page.

  1diff --git a/server/backend/repo.go b/server/backend/repo.go
  2index ddc4c934b3aff06887f8fb2a1e1cbd2a3875fd95..88a25564bc24b8e9dd431d0dceabcf59163ed587 100644
  3--- a/server/backend/repo.go
  4+++ b/server/backend/repo.go
  5@@ -34,28 +34,28 @@ type RepositoryStore interface {
  6 // RepositoryMetadata is an interface for managing repository metadata.
  7 type RepositoryMetadata interface {
  8 	// ProjectName returns the repository's project name.
  9-	ProjectName(repo string) string
 10+	ProjectName(repo string) (string, error)
 11 	// SetProjectName sets the repository's project name.
 12 	SetProjectName(repo, name string) error
 13 	// Description returns the repository's description.
 14-	Description(repo string) string
 15+	Description(repo string) (string, error)
 16 	// SetDescription sets the repository's description.
 17 	SetDescription(repo, desc string) error
 18 	// IsPrivate returns whether the repository is private.
 19-	IsPrivate(repo string) bool
 20+	IsPrivate(repo string) (bool, error)
 21 	// SetPrivate sets whether the repository is private.
 22 	SetPrivate(repo string, private bool) error
 23 	// IsMirror returns whether the repository is a mirror.
 24-	IsMirror(repo string) bool
 25+	IsMirror(repo string) (bool, error)
 26 	// IsHidden returns whether the repository is hidden.
 27-	IsHidden(repo string) bool
 28+	IsHidden(repo string) (bool, error)
 29 	// SetHidden sets whether the repository is hidden.
 30 	SetHidden(repo string, hidden bool) error
 31 }
 32 
 33 // RepositoryAccess is an interface for managing repository access.
 34 type RepositoryAccess interface {
 35-	IsCollaborator(repo string, username string) bool
 36+	IsCollaborator(repo string, username string) (bool, error)
 37 	// AddCollaborator adds the authorized key as a collaborator on the repository.
 38 	AddCollaborator(repo string, username string) error
 39 	// RemoveCollaborator removes the authorized key as a collaborator on the repository.
 40diff --git a/server/backend/sqlite/sqlite.go b/server/backend/sqlite/sqlite.go
 41index 2dd6bd39d7d840c6849675daf3d49dceed8e3a05..2d10964f1baed8186c69c2150759b861001a5b30 100644
 42--- a/server/backend/sqlite/sqlite.go
 43+++ b/server/backend/sqlite/sqlite.go
 44@@ -134,7 +134,7 @@ func (d *SqliteBackend) CreateRepository(name string, opts backend.RepositoryOpt
 45 
 46 	if err := wrapTx(d.db, context.Background(), func(tx *sqlx.Tx) error {
 47 		_, err := tx.Exec(`INSERT INTO repo (name, project_name, description, private, mirror, hidden, updated_at)
 48-			VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP);`,
 49+			VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP);`,
 50 			name, opts.ProjectName, opts.Description, opts.Private, opts.Mirror, opts.Hidden)
 51 		return err
 52 	}); err != nil {
 53@@ -282,61 +282,61 @@ func (d *SqliteBackend) Repository(repo string) (backend.Repository, error) {
 54 // Description returns the description of a repository.
 55 //
 56 // It implements backend.Backend.
 57-func (d *SqliteBackend) Description(repo string) string {
 58+func (d *SqliteBackend) Description(repo string) (string, error) {
 59 	repo = utils.SanitizeRepo(repo)
 60 	var desc string
 61 	if err := wrapTx(d.db, context.Background(), func(tx *sqlx.Tx) error {
 62 		return tx.Get(&desc, "SELECT description FROM repo WHERE name = ?", repo)
 63 	}); err != nil {
 64-		return ""
 65+		return "", wrapDbErr(err)
 66 	}
 67 
 68-	return desc
 69+	return desc, nil
 70 }
 71 
 72 // IsMirror returns true if the repository is a mirror.
 73 //
 74 // It implements backend.Backend.
 75-func (d *SqliteBackend) IsMirror(repo string) bool {
 76+func (d *SqliteBackend) IsMirror(repo string) (bool, error) {
 77 	repo = utils.SanitizeRepo(repo)
 78 	var mirror bool
 79 	if err := wrapTx(d.db, context.Background(), func(tx *sqlx.Tx) error {
 80 		return tx.Get(&mirror, "SELECT mirror FROM repo WHERE name = ?", repo)
 81 	}); err != nil {
 82-		return false
 83+		return false, wrapDbErr(err)
 84 	}
 85 
 86-	return mirror
 87+	return mirror, nil
 88 }
 89 
 90 // IsPrivate returns true if the repository is private.
 91 //
 92 // It implements backend.Backend.
 93-func (d *SqliteBackend) IsPrivate(repo string) bool {
 94+func (d *SqliteBackend) IsPrivate(repo string) (bool, error) {
 95 	repo = utils.SanitizeRepo(repo)
 96 	var private bool
 97 	if err := wrapTx(d.db, context.Background(), func(tx *sqlx.Tx) error {
 98 		return tx.Get(&private, "SELECT private FROM repo WHERE name = ?", repo)
 99 	}); err != nil {
100-		return false
101+		return false, wrapDbErr(err)
102 	}
103 
104-	return private
105+	return private, nil
106 }
107 
108 // IsHidden returns true if the repository is hidden.
109 //
110 // It implements backend.Backend.
111-func (d *SqliteBackend) IsHidden(repo string) bool {
112+func (d *SqliteBackend) IsHidden(repo string) (bool, error) {
113 	repo = utils.SanitizeRepo(repo)
114 	var hidden bool
115 	if err := wrapTx(d.db, context.Background(), func(tx *sqlx.Tx) error {
116 		return tx.Get(&hidden, "SELECT hidden FROM repo WHERE name = ?", repo)
117 	}); err != nil {
118-		return false
119+		return false, wrapDbErr(err)
120 	}
121 
122-	return hidden
123+	return hidden, nil
124 }
125 
126 // SetHidden sets the hidden flag of a repository.
127@@ -353,16 +353,16 @@ func (d *SqliteBackend) SetHidden(repo string, hidden bool) error {
128 // ProjectName returns the project name of a repository.
129 //
130 // It implements backend.Backend.
131-func (d *SqliteBackend) ProjectName(repo string) string {
132+func (d *SqliteBackend) ProjectName(repo string) (string, error) {
133 	repo = utils.SanitizeRepo(repo)
134 	var name string
135 	if err := wrapTx(d.db, context.Background(), func(tx *sqlx.Tx) error {
136 		return tx.Get(&name, "SELECT project_name FROM repo WHERE name = ?", repo)
137 	}); err != nil {
138-		return ""
139+		return "", wrapDbErr(err)
140 	}
141 
142-	return name
143+	return name, nil
144diff --git a/server/backend/sqlite/user.go b/server/backend/sqlite/user.go
145index 764820d0c0a3172250b823b1d5999ed293b041a6..fa5cff166f27e8bea24772942594b9c8d2691f10 100644
146--- a/server/backend/sqlite/user.go
147+++ b/server/backend/sqlite/user.go
148@@ -82,7 +82,8 @@ func (d *SqliteBackend) AccessLevel(repo string, username string) backend.Access
149 	r, _ := d.Repository(repo)
150 	if r != nil {
151 		// If the user is a collaborator, they have read/write access.
152-		if d.IsCollaborator(repo, username) {
153+		isCollab, _ := d.IsCollaborator(repo, username)
154+		if isCollab {
155 			if anon > backend.ReadWriteAccess {
156 				return anon
157 			}
158diff --git a/server/cmd/cmd.go b/server/cmd/cmd.go
159index 6ba903f196db3ccacea4c6541599f8a0c0d30d86..671b6707ae339f0f70843e960c6413e1c4d23374 100644
160--- a/server/cmd/cmd.go
161+++ b/server/cmd/cmd.go
162@@ -108,9 +108,9 @@ func checkIfAdmin(cmd *cobra.Command, _ []string) error {
163 		}
164 	}
165 
166-	user, err := cfg.Backend.UserByPublicKey(s.PublicKey())
167-	if err != nil {
168-		return err
169+	user, _ := cfg.Backend.UserByPublicKey(s.PublicKey())
170+	if user == nil {
171+		return ErrUnauthorized
172 	}
173 
174 	if !user.IsAdmin() {
175diff --git a/server/cmd/description.go b/server/cmd/description.go
176index bafabbfe8574904da2560442e541d80208550829..2708002725365adb75ea1e4c146460bc5c49642c 100644
177--- a/server/cmd/description.go
178+++ b/server/cmd/description.go
179@@ -21,7 +21,11 @@ func descriptionCommand() *cobra.Command {
180 					return err
181 				}
182 
183-				desc := cfg.Backend.Description(rn)
184+				desc, err := cfg.Backend.Description(rn)
185+				if err != nil {
186+					return err
187+				}
188+
189 				cmd.Println(desc)
190 			default:
191 				if err := checkIfCollab(cmd, args); err != nil {
192diff --git a/server/cmd/hidden.go b/server/cmd/hidden.go
193index 7146579b36262771b56bf618857b8478932c48c9..ecd2a62d5852640b7c4f3c0e05e1dce51b0e1860 100644
194--- a/server/cmd/hidden.go
195+++ b/server/cmd/hidden.go
196@@ -16,7 +16,11 @@ func hiddenCommand() *cobra.Command {
197 					return err
198 				}
199 
200-				hidden := cfg.Backend.IsHidden(repo)
201+				hidden, err := cfg.Backend.IsHidden(repo)
202+				if err != nil {
203+					return err
204+				}
205+
206 				cmd.Println(hidden)
207 			case 2:
208 				if err := checkIfCollab(cmd, args); err != nil {
209diff --git a/server/cmd/private.go b/server/cmd/private.go
210index 83e8e77ca72cfc022ad74c49d58b1268fc930e63..3b5181d48599aa38dbd7db64b2e32efc0cb58835 100644
211--- a/server/cmd/private.go
212+++ b/server/cmd/private.go
213@@ -22,7 +22,11 @@ func privateCommand() *cobra.Command {
214 					return err
215 				}
216 
217-				isPrivate := cfg.Backend.IsPrivate(rn)
218+				isPrivate, err := cfg.Backend.IsPrivate(rn)
219+				if err != nil {
220+					return err
221+				}
222+
223 				cmd.Println(isPrivate)
224 			case 2:
225 				isPrivate, err := strconv.ParseBool(args[1])
226diff --git a/server/cmd/project_name.go b/server/cmd/project_name.go
227index 68ca47c50bd0e06f61b67d4d2b64e330f7ce2e97..62e7f82b15c178b59738763c786986de560decfa 100644
228--- a/server/cmd/project_name.go
229+++ b/server/cmd/project_name.go
230@@ -21,7 +21,11 @@ func projectName() *cobra.Command {
231 					return err
232 				}
233 
234-				pn := cfg.Backend.ProjectName(rn)
235+				pn, err := cfg.Backend.ProjectName(rn)
236+				if err != nil {
237+					return err
238+				}
239+
240 				cmd.Println(pn)
241 			default:
242 				if err := checkIfCollab(cmd, args); err != nil {