1bcdbc058362e74ac51f8707946fe81f9053dab1
- Author
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Committer
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Date
Message
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 {