1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: Apache-2.0
15 "github.com/sirupsen/logrus"
18 type APIEndpoint struct {
21 // "new attributes" key for create/update requests
26 EndpointConfigGet = APIEndpoint{"GET", "arvados/v1/config", ""}
27 EndpointVocabularyGet = APIEndpoint{"GET", "arvados/v1/vocabulary", ""}
28 EndpointLogin = APIEndpoint{"GET", "login", ""}
29 EndpointLogout = APIEndpoint{"GET", "logout", ""}
30 EndpointAuthorizedKeyCreate = APIEndpoint{"POST", "arvados/v1/authorized_keys", "authorized_key"}
31 EndpointAuthorizedKeyUpdate = APIEndpoint{"PATCH", "arvados/v1/authorized_keys/{uuid}", "authorized_key"}
32 EndpointAuthorizedKeyGet = APIEndpoint{"GET", "arvados/v1/authorized_keys/{uuid}", ""}
33 EndpointAuthorizedKeyList = APIEndpoint{"GET", "arvados/v1/authorized_keys", ""}
34 EndpointAuthorizedKeyDelete = APIEndpoint{"DELETE", "arvados/v1/authorized_keys/{uuid}", ""}
35 EndpointCollectionCreate = APIEndpoint{"POST", "arvados/v1/collections", "collection"}
36 EndpointCollectionUpdate = APIEndpoint{"PATCH", "arvados/v1/collections/{uuid}", "collection"}
37 EndpointCollectionGet = APIEndpoint{"GET", "arvados/v1/collections/{uuid}", ""}
38 EndpointCollectionList = APIEndpoint{"GET", "arvados/v1/collections", ""}
39 EndpointCollectionProvenance = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/provenance", ""}
40 EndpointCollectionUsedBy = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/used_by", ""}
41 EndpointCollectionDelete = APIEndpoint{"DELETE", "arvados/v1/collections/{uuid}", ""}
42 EndpointCollectionTrash = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/trash", ""}
43 EndpointCollectionUntrash = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/untrash", ""}
44 EndpointSpecimenCreate = APIEndpoint{"POST", "arvados/v1/specimens", "specimen"}
45 EndpointSpecimenUpdate = APIEndpoint{"PATCH", "arvados/v1/specimens/{uuid}", "specimen"}
46 EndpointSpecimenGet = APIEndpoint{"GET", "arvados/v1/specimens/{uuid}", ""}
47 EndpointSpecimenList = APIEndpoint{"GET", "arvados/v1/specimens", ""}
48 EndpointSpecimenDelete = APIEndpoint{"DELETE", "arvados/v1/specimens/{uuid}", ""}
49 EndpointContainerCreate = APIEndpoint{"POST", "arvados/v1/containers", "container"}
50 EndpointContainerUpdate = APIEndpoint{"PATCH", "arvados/v1/containers/{uuid}", "container"}
51 EndpointContainerPriorityUpdate = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/update_priority", "container"}
52 EndpointContainerGet = APIEndpoint{"GET", "arvados/v1/containers/{uuid}", ""}
53 EndpointContainerList = APIEndpoint{"GET", "arvados/v1/containers", ""}
54 EndpointContainerDelete = APIEndpoint{"DELETE", "arvados/v1/containers/{uuid}", ""}
55 EndpointContainerLock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""}
56 EndpointContainerUnlock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""}
57 EndpointContainerSSH = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/ssh", ""}
58 EndpointContainerSSHCompat = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/ssh", ""} // for compatibility with arvados <2.7
59 EndpointContainerGatewayTunnel = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/gateway_tunnel", ""}
60 EndpointContainerGatewayTunnelCompat = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/gateway_tunnel", ""} // for compatibility with arvados <2.7
61 EndpointContainerRequestCreate = APIEndpoint{"POST", "arvados/v1/container_requests", "container_request"}
62 EndpointContainerRequestUpdate = APIEndpoint{"PATCH", "arvados/v1/container_requests/{uuid}", "container_request"}
63 EndpointContainerRequestGet = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}", ""}
64 EndpointContainerRequestList = APIEndpoint{"GET", "arvados/v1/container_requests", ""}
65 EndpointContainerRequestDelete = APIEndpoint{"DELETE", "arvados/v1/container_requests/{uuid}", ""}
66 EndpointContainerRequestLog = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}/log{path:|/.*}", ""}
67 EndpointGroupCreate = APIEndpoint{"POST", "arvados/v1/groups", "group"}
68 EndpointGroupUpdate = APIEndpoint{"PATCH", "arvados/v1/groups/{uuid}", "group"}
69 EndpointGroupGet = APIEndpoint{"GET", "arvados/v1/groups/{uuid}", ""}
70 EndpointGroupList = APIEndpoint{"GET", "arvados/v1/groups", ""}
71 EndpointGroupContents = APIEndpoint{"GET", "arvados/v1/groups/contents", ""}
72 EndpointGroupContentsUUIDInPath = APIEndpoint{"GET", "arvados/v1/groups/{uuid}/contents", ""} // Alternative HTTP route; client-side code should always use EndpointGroupContents instead
73 EndpointGroupShared = APIEndpoint{"GET", "arvados/v1/groups/shared", ""}
74 EndpointGroupDelete = APIEndpoint{"DELETE", "arvados/v1/groups/{uuid}", ""}
75 EndpointGroupTrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/trash", ""}
76 EndpointGroupUntrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/untrash", ""}
77 EndpointLinkCreate = APIEndpoint{"POST", "arvados/v1/links", "link"}
78 EndpointLinkUpdate = APIEndpoint{"PATCH", "arvados/v1/links/{uuid}", "link"}
79 EndpointLinkGet = APIEndpoint{"GET", "arvados/v1/links/{uuid}", ""}
80 EndpointLinkList = APIEndpoint{"GET", "arvados/v1/links", ""}
81 EndpointLinkDelete = APIEndpoint{"DELETE", "arvados/v1/links/{uuid}", ""}
82 EndpointLogCreate = APIEndpoint{"POST", "arvados/v1/logs", "log"}
83 EndpointLogUpdate = APIEndpoint{"PATCH", "arvados/v1/logs/{uuid}", "log"}
84 EndpointLogGet = APIEndpoint{"GET", "arvados/v1/logs/{uuid}", ""}
85 EndpointLogList = APIEndpoint{"GET", "arvados/v1/logs", ""}
86 EndpointLogDelete = APIEndpoint{"DELETE", "arvados/v1/logs/{uuid}", ""}
87 EndpointSysTrashSweep = APIEndpoint{"POST", "sys/trash_sweep", ""}
88 EndpointUserActivate = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""}
89 EndpointUserCreate = APIEndpoint{"POST", "arvados/v1/users", "user"}
90 EndpointUserCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
91 EndpointUserDelete = APIEndpoint{"DELETE", "arvados/v1/users/{uuid}", ""}
92 EndpointUserGet = APIEndpoint{"GET", "arvados/v1/users/{uuid}", ""}
93 EndpointUserGetCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
94 EndpointUserGetSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
95 EndpointUserList = APIEndpoint{"GET", "arvados/v1/users", ""}
96 EndpointUserMerge = APIEndpoint{"POST", "arvados/v1/users/merge", ""}
97 EndpointUserSetup = APIEndpoint{"POST", "arvados/v1/users/setup", "user"}
98 EndpointUserSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
99 EndpointUserUnsetup = APIEndpoint{"POST", "arvados/v1/users/{uuid}/unsetup", ""}
100 EndpointUserUpdate = APIEndpoint{"PATCH", "arvados/v1/users/{uuid}", "user"}
101 EndpointUserBatchUpdate = APIEndpoint{"PATCH", "arvados/v1/users/batch_update", ""}
102 EndpointUserAuthenticate = APIEndpoint{"POST", "arvados/v1/users/authenticate", ""}
103 EndpointAPIClientAuthorizationCurrent = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/current", ""}
104 EndpointAPIClientAuthorizationCreate = APIEndpoint{"POST", "arvados/v1/api_client_authorizations", "api_client_authorization"}
105 EndpointAPIClientAuthorizationUpdate = APIEndpoint{"PUT", "arvados/v1/api_client_authorizations/{uuid}", "api_client_authorization"}
106 EndpointAPIClientAuthorizationList = APIEndpoint{"GET", "arvados/v1/api_client_authorizations", ""}
107 EndpointAPIClientAuthorizationDelete = APIEndpoint{"DELETE", "arvados/v1/api_client_authorizations/{uuid}", ""}
108 EndpointAPIClientAuthorizationGet = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/{uuid}", ""}
111 type ContainerSSHOptions struct {
112 UUID string `json:"uuid"`
113 DetachKeys string `json:"detach_keys"`
114 LoginUsername string `json:"login_username"`
115 NoForward bool `json:"no_forward"`
118 type ConnectionResponse struct {
119 Conn net.Conn `json:"-"`
120 Bufrw *bufio.ReadWriter `json:"-"`
121 Logger logrus.FieldLogger `json:"-"`
122 Header http.Header `json:"-"`
125 type ContainerGatewayTunnelOptions struct {
126 UUID string `json:"uuid"`
127 AuthSecret string `json:"auth_secret"`
130 type GetOptions struct {
131 UUID string `json:"uuid,omitempty"`
132 Select []string `json:"select"`
133 IncludeTrash bool `json:"include_trash"`
134 ForwardedFor string `json:"forwarded_for,omitempty"`
135 Remote string `json:"remote,omitempty"`
138 type UntrashOptions struct {
139 UUID string `json:"uuid"`
140 EnsureUniqueName bool `json:"ensure_unique_name"`
143 type ListOptions struct {
144 ClusterID string `json:"cluster_id"`
145 Select []string `json:"select"`
146 Filters []Filter `json:"filters"`
147 Where map[string]interface{} `json:"where"`
148 Limit int64 `json:"limit"`
149 Offset int64 `json:"offset"`
150 Order []string `json:"order"`
151 Distinct bool `json:"distinct"`
152 Count string `json:"count"`
153 IncludeTrash bool `json:"include_trash"`
154 IncludeOldVersions bool `json:"include_old_versions"`
155 BypassFederation bool `json:"bypass_federation"`
156 ForwardedFor string `json:"forwarded_for,omitempty"`
157 Include string `json:"include"`
160 type CreateOptions struct {
161 ClusterID string `json:"cluster_id"`
162 EnsureUniqueName bool `json:"ensure_unique_name"`
163 Select []string `json:"select"`
164 Attrs map[string]interface{} `json:"attrs"`
165 // ReplaceFiles only applies when creating a collection.
166 ReplaceFiles map[string]string `json:"replace_files"`
169 type UpdateOptions struct {
170 UUID string `json:"uuid"`
171 Attrs map[string]interface{} `json:"attrs"`
172 Select []string `json:"select"`
173 BypassFederation bool `json:"bypass_federation"`
174 // ReplaceFiles only applies when updating a collection.
175 ReplaceFiles map[string]string `json:"replace_files"`
178 type GroupContentsOptions struct {
179 ClusterID string `json:"cluster_id"`
180 UUID string `json:"uuid,omitempty"`
181 Select []string `json:"select"`
182 Filters []Filter `json:"filters"`
183 Limit int64 `json:"limit"`
184 Offset int64 `json:"offset"`
185 Order []string `json:"order"`
186 Distinct bool `json:"distinct"`
187 Count string `json:"count"`
188 Include string `json:"include"`
189 Recursive bool `json:"recursive"`
190 IncludeTrash bool `json:"include_trash"`
191 IncludeOldVersions bool `json:"include_old_versions"`
192 ExcludeHomeProject bool `json:"exclude_home_project"`
195 type UserActivateOptions struct {
196 UUID string `json:"uuid"`
199 type UserSetupOptions struct {
200 UUID string `json:"uuid,omitempty"`
201 Email string `json:"email,omitempty"`
202 OpenIDPrefix string `json:"openid_prefix,omitempty"`
203 RepoName string `json:"repo_name,omitempty"`
204 VMUUID string `json:"vm_uuid,omitempty"`
205 SendNotificationEmail bool `json:"send_notification_email,omitempty"`
206 Attrs map[string]interface{} `json:"attrs"`
209 type UserMergeOptions struct {
210 NewUserUUID string `json:"new_user_uuid,omitempty"`
211 OldUserUUID string `json:"old_user_uuid,omitempty"`
212 NewOwnerUUID string `json:"new_owner_uuid,omitempty"`
213 NewUserToken string `json:"new_user_token,omitempty"`
214 RedirectToNewUser bool `json:"redirect_to_new_user"`
217 type UserBatchUpdateOptions struct {
218 Updates map[string]map[string]interface{} `json:"updates"`
221 type UserBatchUpdateResponse struct{}
223 type DeleteOptions struct {
224 UUID string `json:"uuid"`
227 type LoginOptions struct {
228 ReturnTo string `json:"return_to"` // On success, redirect to this target with api_token=xxx query param
229 Remote string `json:"remote,omitempty"` // Salt token for remote Cluster ID
230 Code string `json:"code,omitempty"` // OAuth2 callback code
231 State string `json:"state,omitempty"` // OAuth2 callback state
234 type UserAuthenticateOptions struct {
235 Username string `json:"username,omitempty"` // PAM username
236 Password string `json:"password,omitempty"` // PAM password
239 type LogoutOptions struct {
240 ReturnTo string `json:"return_to"` // Redirect to this URL after logging out
243 type BlockWriteOptions struct {
247 DataSize int // Must be set if Data is nil.
249 StorageClasses []string
254 type BlockWriteResponse struct {
259 type WebDAVOptions struct {
265 type ContainerLogOptions struct {
266 UUID string `json:"uuid"`
267 NoForward bool `json:"no_forward"`
272 ConfigGet(ctx context.Context) (json.RawMessage, error)
273 VocabularyGet(ctx context.Context) (Vocabulary, error)
274 Login(ctx context.Context, options LoginOptions) (LoginResponse, error)
275 Logout(ctx context.Context, options LogoutOptions) (LogoutResponse, error)
276 AuthorizedKeyCreate(ctx context.Context, options CreateOptions) (AuthorizedKey, error)
277 AuthorizedKeyUpdate(ctx context.Context, options UpdateOptions) (AuthorizedKey, error)
278 AuthorizedKeyGet(ctx context.Context, options GetOptions) (AuthorizedKey, error)
279 AuthorizedKeyList(ctx context.Context, options ListOptions) (AuthorizedKeyList, error)
280 AuthorizedKeyDelete(ctx context.Context, options DeleteOptions) (AuthorizedKey, error)
281 CollectionCreate(ctx context.Context, options CreateOptions) (Collection, error)
282 CollectionUpdate(ctx context.Context, options UpdateOptions) (Collection, error)
283 CollectionGet(ctx context.Context, options GetOptions) (Collection, error)
284 CollectionList(ctx context.Context, options ListOptions) (CollectionList, error)
285 CollectionProvenance(ctx context.Context, options GetOptions) (map[string]interface{}, error)
286 CollectionUsedBy(ctx context.Context, options GetOptions) (map[string]interface{}, error)
287 CollectionDelete(ctx context.Context, options DeleteOptions) (Collection, error)
288 CollectionTrash(ctx context.Context, options DeleteOptions) (Collection, error)
289 CollectionUntrash(ctx context.Context, options UntrashOptions) (Collection, error)
290 ContainerCreate(ctx context.Context, options CreateOptions) (Container, error)
291 ContainerUpdate(ctx context.Context, options UpdateOptions) (Container, error)
292 ContainerPriorityUpdate(ctx context.Context, options UpdateOptions) (Container, error)
293 ContainerGet(ctx context.Context, options GetOptions) (Container, error)
294 ContainerList(ctx context.Context, options ListOptions) (ContainerList, error)
295 ContainerDelete(ctx context.Context, options DeleteOptions) (Container, error)
296 ContainerLock(ctx context.Context, options GetOptions) (Container, error)
297 ContainerUnlock(ctx context.Context, options GetOptions) (Container, error)
298 ContainerSSH(ctx context.Context, options ContainerSSHOptions) (ConnectionResponse, error)
299 ContainerGatewayTunnel(ctx context.Context, options ContainerGatewayTunnelOptions) (ConnectionResponse, error)
300 ContainerRequestCreate(ctx context.Context, options CreateOptions) (ContainerRequest, error)
301 ContainerRequestUpdate(ctx context.Context, options UpdateOptions) (ContainerRequest, error)
302 ContainerRequestGet(ctx context.Context, options GetOptions) (ContainerRequest, error)
303 ContainerRequestList(ctx context.Context, options ListOptions) (ContainerRequestList, error)
304 ContainerRequestDelete(ctx context.Context, options DeleteOptions) (ContainerRequest, error)
305 ContainerRequestLog(ctx context.Context, options ContainerLogOptions) (http.Handler, error)
306 GroupCreate(ctx context.Context, options CreateOptions) (Group, error)
307 GroupUpdate(ctx context.Context, options UpdateOptions) (Group, error)
308 GroupGet(ctx context.Context, options GetOptions) (Group, error)
309 GroupList(ctx context.Context, options ListOptions) (GroupList, error)
310 GroupContents(ctx context.Context, options GroupContentsOptions) (ObjectList, error)
311 GroupShared(ctx context.Context, options ListOptions) (GroupList, error)
312 GroupDelete(ctx context.Context, options DeleteOptions) (Group, error)
313 GroupTrash(ctx context.Context, options DeleteOptions) (Group, error)
314 GroupUntrash(ctx context.Context, options UntrashOptions) (Group, error)
315 LinkCreate(ctx context.Context, options CreateOptions) (Link, error)
316 LinkUpdate(ctx context.Context, options UpdateOptions) (Link, error)
317 LinkGet(ctx context.Context, options GetOptions) (Link, error)
318 LinkList(ctx context.Context, options ListOptions) (LinkList, error)
319 LinkDelete(ctx context.Context, options DeleteOptions) (Link, error)
320 LogCreate(ctx context.Context, options CreateOptions) (Log, error)
321 LogUpdate(ctx context.Context, options UpdateOptions) (Log, error)
322 LogGet(ctx context.Context, options GetOptions) (Log, error)
323 LogList(ctx context.Context, options ListOptions) (LogList, error)
324 LogDelete(ctx context.Context, options DeleteOptions) (Log, error)
325 SpecimenCreate(ctx context.Context, options CreateOptions) (Specimen, error)
326 SpecimenUpdate(ctx context.Context, options UpdateOptions) (Specimen, error)
327 SpecimenGet(ctx context.Context, options GetOptions) (Specimen, error)
328 SpecimenList(ctx context.Context, options ListOptions) (SpecimenList, error)
329 SpecimenDelete(ctx context.Context, options DeleteOptions) (Specimen, error)
330 SysTrashSweep(ctx context.Context, options struct{}) (struct{}, error)
331 UserCreate(ctx context.Context, options CreateOptions) (User, error)
332 UserUpdate(ctx context.Context, options UpdateOptions) (User, error)
333 UserMerge(ctx context.Context, options UserMergeOptions) (User, error)
334 UserActivate(ctx context.Context, options UserActivateOptions) (User, error)
335 UserSetup(ctx context.Context, options UserSetupOptions) (map[string]interface{}, error)
336 UserUnsetup(ctx context.Context, options GetOptions) (User, error)
337 UserGet(ctx context.Context, options GetOptions) (User, error)
338 UserGetCurrent(ctx context.Context, options GetOptions) (User, error)
339 UserGetSystem(ctx context.Context, options GetOptions) (User, error)
340 UserList(ctx context.Context, options ListOptions) (UserList, error)
341 UserDelete(ctx context.Context, options DeleteOptions) (User, error)
342 UserBatchUpdate(context.Context, UserBatchUpdateOptions) (UserList, error)
343 UserAuthenticate(ctx context.Context, options UserAuthenticateOptions) (APIClientAuthorization, error)
344 APIClientAuthorizationCurrent(ctx context.Context, options GetOptions) (APIClientAuthorization, error)
345 APIClientAuthorizationCreate(ctx context.Context, options CreateOptions) (APIClientAuthorization, error)
346 APIClientAuthorizationList(ctx context.Context, options ListOptions) (APIClientAuthorizationList, error)
347 APIClientAuthorizationDelete(ctx context.Context, options DeleteOptions) (APIClientAuthorization, error)
348 APIClientAuthorizationUpdate(ctx context.Context, options UpdateOptions) (APIClientAuthorization, error)
349 APIClientAuthorizationGet(ctx context.Context, options GetOptions) (APIClientAuthorization, error)