-
Notifications
You must be signed in to change notification settings - Fork 50
/
project_errors.go
247 lines (191 loc) · 8.04 KB
/
project_errors.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
package project
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/mittwald/goharbor-client/v5/apiv1/internal/api/client/products"
)
const (
// ErrProjectIllegalIDFormatMsg is the error message for ErrProjectIllegalIDFormat error.
ErrProjectIllegalIDFormatMsg = "illegal format of provided ID value"
// ErrProjectUnauthorizedMsg is the error message for ErrProjectUnauthorized error.
ErrProjectUnauthorizedMsg = "unauthorized"
// ErrProjectInternalErrorsMsg is the error message for ErrProjectInternalErrors error.
ErrProjectInternalErrorsMsg = "unexpected internal errors"
// ErrProjectNoPermissionMsg is the error message for ErrProjectNoPermission error.
ErrProjectNoPermissionMsg = "user does not have permission to the project"
// ErrProjectIDNotExistsMsg is the error message for ErrProjectIDNotExists error.
ErrProjectIDNotExistsMsg = "project ID does not exist"
// ErrProjectNameAlreadyExistsMsg is the error message for ErrProjectNameAlreadyExists error.
ErrProjectNameAlreadyExistsMsg = "project name already exists"
// ErrProjectMismatchMsg is the error message for ErrProjectMismatch error.
ErrProjectMismatchMsg = "id/name pair not found on server side"
// ErrProjectNotFoundMsg is the error message for ErrProjectNotFound error.
ErrProjectNotFoundMsg = "project not found on server side"
// ErrProjectNotProvidedMsg is the error message for ErrProjectNotProvided error.
ErrProjectNotProvidedMsg = "no project provided"
// ErrProjectNoMemberProvidedMsg is the error message for ErrProjectNoMemberProvided error.
ErrProjectNoMemberProvidedMsg = "no project member provided"
// ErrProjectMemberMismatchMsg is the error message for ErrProjectMemberMismatch error.
ErrProjectMemberMismatchMsg = "no user with id/name pair found on server side"
// ErrProjectMemberIllegalFormatMsg is the error message for ErrProjectMemberIllegalFormat error.
ErrProjectMemberIllegalFormatMsg = "illegal format of project member or project id is invalid, or LDAP DN is invalid"
// ErrProjectUserIsNoMemberMsg is the error message for ErrProjectUserIsNoMember.
ErrProjectUserIsNoMemberMsg = "user is no member in project"
// ErrProjectInvalidRequestMsg is the error message for ErrProjectInvalidRequest error.
ErrProjectInvalidRequestMsg = "invalid request"
// ErrProjectMetadataAlreadyExistsMsg is the error message for ErrProjectMetadataAlreadyExists error.
ErrProjectMetadataAlreadyExistsMsg = "metadata key already exists"
// ErrProjectUnknownResourceMsg is the error message for ErrProjectUnknownResource error.
ErrProjectUnknownResourceMsg = "resource unknown"
// ErrProjectNameNotProvidedMsg is the error message for ErrProjectNameNotProvided error.
ErrProjectNameNotProvidedMsg = "project name not provided"
)
// ErrProjectNameNotProvided describes a missing project name.
type ErrProjectNameNotProvided struct{}
// Error returns the error message.
func (e *ErrProjectNameNotProvided) Error() string {
return ErrProjectNameNotProvidedMsg
}
// ErrProjectIllegalIDFormat describes an illegal request format.
type ErrProjectIllegalIDFormat struct{}
// Error returns the error message.
func (e *ErrProjectIllegalIDFormat) Error() string {
return ErrProjectIllegalIDFormatMsg
}
// ErrProjectUnauthorized describes an unauthorized request.
type ErrProjectUnauthorized struct{}
// Error returns the error message.
func (e *ErrProjectUnauthorized) Error() string {
return ErrProjectUnauthorizedMsg
}
// ErrProjectInternalErrors describes server-side internal errors.
type ErrProjectInternalErrors struct{}
// Error returns the error message.
func (e *ErrProjectInternalErrors) Error() string {
return ErrProjectInternalErrorsMsg
}
// ErrProjectNoPermission describes a request error without permission.
type ErrProjectNoPermission struct{}
// Error returns the error message.
func (e *ErrProjectNoPermission) Error() string {
return ErrProjectNoPermissionMsg
}
// ErrProjectIDNotExists describes an error
// when no proper project ID is found.
type ErrProjectIDNotExists struct{}
// Error returns the error message.
func (e *ErrProjectIDNotExists) Error() string {
return ErrProjectIDNotExistsMsg
}
// ErrProjectNameAlreadyExists describes a duplicate project name error.
type ErrProjectNameAlreadyExists struct{}
// Error returns the error message.
func (e *ErrProjectNameAlreadyExists) Error() string {
return ErrProjectNameAlreadyExistsMsg
}
// ErrProjectMismatch describes a failed lookup
// of a project with name/id pair.
type ErrProjectMismatch struct{}
// Error returns the error message.
func (e *ErrProjectMismatch) Error() string {
return ErrProjectMismatchMsg
}
// ErrProjectNotFound describes an error
// when a specific project is not found.
type ErrProjectNotFound struct{}
// Error returns the error message.
func (e *ErrProjectNotFound) Error() string {
return ErrProjectNotFoundMsg
}
type ErrProjectNotProvided struct{}
// Error returns the error message.
func (e *ErrProjectNotProvided) Error() string {
return ErrProjectNotProvidedMsg
}
// ErrProjectNoMemberProvided
type ErrProjectNoMemberProvided struct{}
// Error returns the error message.
func (e *ErrProjectNoMemberProvided) Error() string {
return ErrProjectNoMemberProvidedMsg
}
// ErrProjectMemberMismatch describes an error
// when user does not exist in context of
// project member operations.
type ErrProjectMemberMismatch struct{}
// Error returns the error message.
func (e *ErrProjectMemberMismatch) Error() string {
return ErrProjectMemberMismatchMsg
}
// ErrProjectMemberIllegalFormat describes an communication
// error when performing project member operations.
type ErrProjectMemberIllegalFormat struct{}
// Error returns the error message.
func (e *ErrProjectMemberIllegalFormat) Error() string {
return ErrProjectMemberIllegalFormatMsg
}
// ErrProjectUserIsNoMember describes an error case,
// where a given user is no member of a given project.
type ErrProjectUserIsNoMember struct{}
// Error returns the error message.
func (e *ErrProjectUserIsNoMember) Error() string {
return ErrProjectUserIsNoMemberMsg
}
// ErrProjectMemberIllegalFormat describes an communication
// error when performing project member operations.
type ErrProjectInvalidRequest struct{}
// Error returns the error message.
func (e *ErrProjectInvalidRequest) Error() string {
return ErrProjectInvalidRequestMsg
}
// ErrProjectMetadataAlreadyExists describes an error, which happens
// when a metadata key of a project is tried to be created a second time.
type ErrProjectMetadataAlreadyExists struct{}
// Error returns the error message.
func (e *ErrProjectMetadataAlreadyExists) Error() string {
return ErrProjectMetadataAlreadyExistsMsg
}
// ErrProjectUnknownResource describes which happens,
// when requesting an unknown resource.
type ErrProjectUnknownResource struct{}
// Error returns the error message.
func (e *ErrProjectUnknownResource) Error() string {
return ErrProjectUnknownResourceMsg
}
// handleProjectErrors takes a swagger generated error as input,
// which usually does not contain any form of error message,
// and outputs a new error with a proper message.
func handleSwaggerProjectErrors(in error) error {
t, ok := in.(*runtime.APIError)
if ok {
switch t.Code {
case http.StatusCreated:
// Harbor sometimes return 201 instead of 200 despite the swagger spec
// not declaring it.
return nil
case http.StatusBadRequest:
return &ErrProjectIllegalIDFormat{}
case http.StatusUnauthorized:
return &ErrProjectUnauthorized{}
case http.StatusForbidden:
return &ErrProjectNoPermission{}
case http.StatusNotFound:
return &ErrProjectUnknownResource{}
case http.StatusInternalServerError:
return &ErrProjectInternalErrors{}
}
}
switch in.(type) {
case *products.DeleteProjectsProjectIDNotFound:
return &ErrProjectIDNotExists{}
case *products.PutProjectsProjectIDNotFound:
return &ErrProjectIDNotExists{}
case *products.PostProjectsConflict:
return &ErrProjectNameAlreadyExists{}
case *products.PostProjectsProjectIDMembersBadRequest:
return &ErrProjectInvalidRequest{}
case *products.PostProjectsProjectIDMetadatasBadRequest:
return &ErrProjectInvalidRequest{}
default:
return in
}
}