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 EndpointCollectionCreate = APIEndpoint{"POST", "arvados/v1/collections", "collection"}
31 EndpointCollectionUpdate = APIEndpoint{"PATCH", "arvados/v1/collections/{uuid}", "collection"}
32 EndpointCollectionGet = APIEndpoint{"GET", "arvados/v1/collections/{uuid}", ""}
33 EndpointCollectionList = APIEndpoint{"GET", "arvados/v1/collections", ""}
34 EndpointCollectionProvenance = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/provenance", ""}
35 EndpointCollectionUsedBy = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/used_by", ""}
36 EndpointCollectionDelete = APIEndpoint{"DELETE", "arvados/v1/collections/{uuid}", ""}
37 EndpointCollectionTrash = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/trash", ""}
38 EndpointCollectionUntrash = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/untrash", ""}
39 EndpointSpecimenCreate = APIEndpoint{"POST", "arvados/v1/specimens", "specimen"}
40 EndpointSpecimenUpdate = APIEndpoint{"PATCH", "arvados/v1/specimens/{uuid}", "specimen"}
41 EndpointSpecimenGet = APIEndpoint{"GET", "arvados/v1/specimens/{uuid}", ""}
42 EndpointSpecimenList = APIEndpoint{"GET", "arvados/v1/specimens", ""}
43 EndpointSpecimenDelete = APIEndpoint{"DELETE", "arvados/v1/specimens/{uuid}", ""}
44 EndpointContainerCreate = APIEndpoint{"POST", "arvados/v1/containers", "container"}
45 EndpointContainerUpdate = APIEndpoint{"PATCH", "arvados/v1/containers/{uuid}", "container"}
46 EndpointContainerGet = APIEndpoint{"GET", "arvados/v1/containers/{uuid}", ""}
47 EndpointContainerList = APIEndpoint{"GET", "arvados/v1/containers", ""}
48 EndpointContainerDelete = APIEndpoint{"DELETE", "arvados/v1/containers/{uuid}", ""}
49 EndpointContainerLock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""}
50 EndpointContainerUnlock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""}
51 EndpointContainerSSH = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/ssh", ""} // move to /containers after #17014 fixes routing
52 EndpointContainerGatewayTunnel = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/gateway_tunnel", ""} // move to /containers after #17014 fixes routing
53 EndpointContainerRequestCreate = APIEndpoint{"POST", "arvados/v1/container_requests", "container_request"}
54 EndpointContainerRequestUpdate = APIEndpoint{"PATCH", "arvados/v1/container_requests/{uuid}", "container_request"}
55 EndpointContainerRequestGet = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}", ""}
56 EndpointContainerRequestList = APIEndpoint{"GET", "arvados/v1/container_requests", ""}
57 EndpointContainerRequestDelete = APIEndpoint{"DELETE", "arvados/v1/container_requests/{uuid}", ""}
58 EndpointGroupCreate = APIEndpoint{"POST", "arvados/v1/groups", "group"}
59 EndpointGroupUpdate = APIEndpoint{"PATCH", "arvados/v1/groups/{uuid}", "group"}
60 EndpointGroupGet = APIEndpoint{"GET", "arvados/v1/groups/{uuid}", ""}
61 EndpointGroupList = APIEndpoint{"GET", "arvados/v1/groups", ""}
62 EndpointGroupContents = APIEndpoint{"GET", "arvados/v1/groups/contents", ""}
63 EndpointGroupContentsUUIDInPath = APIEndpoint{"GET", "arvados/v1/groups/{uuid}/contents", ""} // Alternative HTTP route; client-side code should always use EndpointGroupContents instead
64 EndpointGroupShared = APIEndpoint{"GET", "arvados/v1/groups/shared", ""}
65 EndpointGroupDelete = APIEndpoint{"DELETE", "arvados/v1/groups/{uuid}", ""}
66 EndpointGroupTrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/trash", ""}
67 EndpointGroupUntrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/untrash", ""}
68 EndpointLinkCreate = APIEndpoint{"POST", "arvados/v1/links", "link"}
69 EndpointLinkUpdate = APIEndpoint{"PATCH", "arvados/v1/links/{uuid}", "link"}
70 EndpointLinkGet = APIEndpoint{"GET", "arvados/v1/links/{uuid}", ""}
71 EndpointLinkList = APIEndpoint{"GET", "arvados/v1/links", ""}
72 EndpointLinkDelete = APIEndpoint{"DELETE", "arvados/v1/links/{uuid}", ""}
73 EndpointLogCreate = APIEndpoint{"POST", "arvados/v1/logs", "log"}
74 EndpointLogUpdate = APIEndpoint{"PATCH", "arvados/v1/logs/{uuid}", "log"}
75 EndpointLogGet = APIEndpoint{"GET", "arvados/v1/logs/{uuid}", ""}
76 EndpointLogList = APIEndpoint{"GET", "arvados/v1/logs", ""}
77 EndpointLogDelete = APIEndpoint{"DELETE", "arvados/v1/logs/{uuid}", ""}
78 EndpointSysTrashSweep = APIEndpoint{"POST", "sys/trash_sweep", ""}
79 EndpointUserActivate = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""}
80 EndpointUserCreate = APIEndpoint{"POST", "arvados/v1/users", "user"}
81 EndpointUserCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
82 EndpointUserDelete = APIEndpoint{"DELETE", "arvados/v1/users/{uuid}", ""}
83 EndpointUserGet = APIEndpoint{"GET", "arvados/v1/users/{uuid}", ""}
84 EndpointUserGetCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
85 EndpointUserGetSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
86 EndpointUserList = APIEndpoint{"GET", "arvados/v1/users", ""}
87 EndpointUserMerge = APIEndpoint{"POST", "arvados/v1/users/merge", ""}
88 EndpointUserSetup = APIEndpoint{"POST", "arvados/v1/users/setup", "user"}
89 EndpointUserSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
90 EndpointUserUnsetup = APIEndpoint{"POST", "arvados/v1/users/{uuid}/unsetup", ""}
91 EndpointUserUpdate = APIEndpoint{"PATCH", "arvados/v1/users/{uuid}", "user"}
92 EndpointUserBatchUpdate = APIEndpoint{"PATCH", "arvados/v1/users/batch_update", ""}
93 EndpointUserAuthenticate = APIEndpoint{"POST", "arvados/v1/users/authenticate", ""}
94 EndpointAPIClientAuthorizationCurrent = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/current", ""}
95 EndpointAPIClientAuthorizationCreate = APIEndpoint{"POST", "arvados/v1/api_client_authorizations", "api_client_authorization"}
96 EndpointAPIClientAuthorizationUpdate = APIEndpoint{"PUT", "arvados/v1/api_client_authorizations/{uuid}", "api_client_authorization"}
97 EndpointAPIClientAuthorizationList = APIEndpoint{"GET", "arvados/v1/api_client_authorizations", ""}
98 EndpointAPIClientAuthorizationDelete = APIEndpoint{"DELETE", "arvados/v1/api_client_authorizations/{uuid}", ""}
99 EndpointAPIClientAuthorizationGet = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/{uuid}", ""}
102 type ContainerSSHOptions struct {
103 UUID string `json:"uuid"`
104 DetachKeys string `json:"detach_keys"`
105 LoginUsername string `json:"login_username"`
106 NoForward bool `json:"no_forward"`
109 type ConnectionResponse struct {
110 Conn net.Conn `json:"-"`
111 Bufrw *bufio.ReadWriter `json:"-"`
112 Logger logrus.FieldLogger `json:"-"`
113 Header http.Header `json:"-"`
116 type ContainerGatewayTunnelOptions struct {
117 UUID string `json:"uuid"`
118 AuthSecret string `json:"auth_secret"`
121 type GetOptions struct {
122 UUID string `json:"uuid,omitempty"`
123 Select []string `json:"select"`
124 IncludeTrash bool `json:"include_trash"`
125 ForwardedFor string `json:"forwarded_for,omitempty"`
126 Remote string `json:"remote,omitempty"`
129 type UntrashOptions struct {
130 UUID string `json:"uuid"`
131 EnsureUniqueName bool `json:"ensure_unique_name"`
134 type ListOptions struct {
135 ClusterID string `json:"cluster_id"`
136 Select []string `json:"select"`
137 Filters []Filter `json:"filters"`
138 Where map[string]interface{} `json:"where"`
139 Limit int64 `json:"limit"`
140 Offset int64 `json:"offset"`
141 Order []string `json:"order"`
142 Distinct bool `json:"distinct"`
143 Count string `json:"count"`
144 IncludeTrash bool `json:"include_trash"`
145 IncludeOldVersions bool `json:"include_old_versions"`
146 BypassFederation bool `json:"bypass_federation"`
147 ForwardedFor string `json:"forwarded_for,omitempty"`
148 Include string `json:"include"`
151 type CreateOptions struct {
152 ClusterID string `json:"cluster_id"`
153 EnsureUniqueName bool `json:"ensure_unique_name"`
154 Select []string `json:"select"`
155 Attrs map[string]interface{} `json:"attrs"`
156 // ReplaceFiles only applies when creating a collection.
157 ReplaceFiles map[string]string `json:"replace_files"`
160 type UpdateOptions struct {
161 UUID string `json:"uuid"`
162 Attrs map[string]interface{} `json:"attrs"`
163 Select []string `json:"select"`
164 BypassFederation bool `json:"bypass_federation"`
165 // ReplaceFiles only applies when updating a collection.
166 ReplaceFiles map[string]string `json:"replace_files"`
169 type GroupContentsOptions struct {
170 ClusterID string `json:"cluster_id"`
171 UUID string `json:"uuid,omitempty"`
172 Select []string `json:"select"`
173 Filters []Filter `json:"filters"`
174 Limit int64 `json:"limit"`
175 Offset int64 `json:"offset"`
176 Order []string `json:"order"`
177 Distinct bool `json:"distinct"`
178 Count string `json:"count"`
179 Include string `json:"include"`
180 Recursive bool `json:"recursive"`
181 IncludeTrash bool `json:"include_trash"`
182 IncludeOldVersions bool `json:"include_old_versions"`
183 ExcludeHomeProject bool `json:"exclude_home_project"`
186 type UserActivateOptions struct {
187 UUID string `json:"uuid"`
190 type UserSetupOptions struct {
191 UUID string `json:"uuid,omitempty"`
192 Email string `json:"email,omitempty"`
193 OpenIDPrefix string `json:"openid_prefix,omitempty"`
194 RepoName string `json:"repo_name,omitempty"`
195 VMUUID string `json:"vm_uuid,omitempty"`
196 SendNotificationEmail bool `json:"send_notification_email,omitempty"`
197 Attrs map[string]interface{} `json:"attrs"`
200 type UserMergeOptions struct {
201 NewUserUUID string `json:"new_user_uuid,omitempty"`
202 OldUserUUID string `json:"old_user_uuid,omitempty"`
203 NewOwnerUUID string `json:"new_owner_uuid,omitempty"`
204 NewUserToken string `json:"new_user_token,omitempty"`
205 RedirectToNewUser bool `json:"redirect_to_new_user"`
208 type UserBatchUpdateOptions struct {
209 Updates map[string]map[string]interface{} `json:"updates"`
212 type UserBatchUpdateResponse struct{}
214 type DeleteOptions struct {
215 UUID string `json:"uuid"`
218 type LoginOptions struct {
219 ReturnTo string `json:"return_to"` // On success, redirect to this target with api_token=xxx query param
220 Remote string `json:"remote,omitempty"` // Salt token for remote Cluster ID
221 Code string `json:"code,omitempty"` // OAuth2 callback code
222 State string `json:"state,omitempty"` // OAuth2 callback state
225 type UserAuthenticateOptions struct {
226 Username string `json:"username,omitempty"` // PAM username
227 Password string `json:"password,omitempty"` // PAM password
230 type LogoutOptions struct {
231 ReturnTo string `json:"return_to"` // Redirect to this URL after logging out
234 type BlockWriteOptions struct {
238 DataSize int // Must be set if Data is nil.
240 StorageClasses []string
245 type BlockWriteResponse struct {
251 ConfigGet(ctx context.Context) (json.RawMessage, error)
252 VocabularyGet(ctx context.Context) (Vocabulary, error)
253 Login(ctx context.Context, options LoginOptions) (LoginResponse, error)
254 Logout(ctx context.Context, options LogoutOptions) (LogoutResponse, error)
255 CollectionCreate(ctx context.Context, options CreateOptions) (Collection, error)
256 CollectionUpdate(ctx context.Context, options UpdateOptions) (Collection, error)
257 CollectionGet(ctx context.Context, options GetOptions) (Collection, error)
258 CollectionList(ctx context.Context, options ListOptions) (CollectionList, error)
259 CollectionProvenance(ctx context.Context, options GetOptions) (map[string]interface{}, error)
260 CollectionUsedBy(ctx context.Context, options GetOptions) (map[string]interface{}, error)
261 CollectionDelete(ctx context.Context, options DeleteOptions) (Collection, error)
262 CollectionTrash(ctx context.Context, options DeleteOptions) (Collection, error)
263 CollectionUntrash(ctx context.Context, options UntrashOptions) (Collection, error)
264 ContainerCreate(ctx context.Context, options CreateOptions) (Container, error)
265 ContainerUpdate(ctx context.Context, options UpdateOptions) (Container, error)
266 ContainerGet(ctx context.Context, options GetOptions) (Container, error)
267 ContainerList(ctx context.Context, options ListOptions) (ContainerList, error)
268 ContainerDelete(ctx context.Context, options DeleteOptions) (Container, error)
269 ContainerLock(ctx context.Context, options GetOptions) (Container, error)
270 ContainerUnlock(ctx context.Context, options GetOptions) (Container, error)
271 ContainerSSH(ctx context.Context, options ContainerSSHOptions) (ConnectionResponse, error)
272 ContainerGatewayTunnel(ctx context.Context, options ContainerGatewayTunnelOptions) (ConnectionResponse, error)
273 ContainerRequestCreate(ctx context.Context, options CreateOptions) (ContainerRequest, error)
274 ContainerRequestUpdate(ctx context.Context, options UpdateOptions) (ContainerRequest, error)
275 ContainerRequestGet(ctx context.Context, options GetOptions) (ContainerRequest, error)
276 ContainerRequestList(ctx context.Context, options ListOptions) (ContainerRequestList, error)
277 ContainerRequestDelete(ctx context.Context, options DeleteOptions) (ContainerRequest, error)
278 GroupCreate(ctx context.Context, options CreateOptions) (Group, error)
279 GroupUpdate(ctx context.Context, options UpdateOptions) (Group, error)
280 GroupGet(ctx context.Context, options GetOptions) (Group, error)
281 GroupList(ctx context.Context, options ListOptions) (GroupList, error)
282 GroupContents(ctx context.Context, options GroupContentsOptions) (ObjectList, error)
283 GroupShared(ctx context.Context, options ListOptions) (GroupList, error)
284 GroupDelete(ctx context.Context, options DeleteOptions) (Group, error)
285 GroupTrash(ctx context.Context, options DeleteOptions) (Group, error)
286 GroupUntrash(ctx context.Context, options UntrashOptions) (Group, error)
287 LinkCreate(ctx context.Context, options CreateOptions) (Link, error)
288 LinkUpdate(ctx context.Context, options UpdateOptions) (Link, error)
289 LinkGet(ctx context.Context, options GetOptions) (Link, error)
290 LinkList(ctx context.Context, options ListOptions) (LinkList, error)
291 LinkDelete(ctx context.Context, options DeleteOptions) (Link, error)
292 LogCreate(ctx context.Context, options CreateOptions) (Log, error)
293 LogUpdate(ctx context.Context, options UpdateOptions) (Log, error)
294 LogGet(ctx context.Context, options GetOptions) (Log, error)
295 LogList(ctx context.Context, options ListOptions) (LogList, error)
296 LogDelete(ctx context.Context, options DeleteOptions) (Log, error)
297 SpecimenCreate(ctx context.Context, options CreateOptions) (Specimen, error)
298 SpecimenUpdate(ctx context.Context, options UpdateOptions) (Specimen, error)
299 SpecimenGet(ctx context.Context, options GetOptions) (Specimen, error)
300 SpecimenList(ctx context.Context, options ListOptions) (SpecimenList, error)
301 SpecimenDelete(ctx context.Context, options DeleteOptions) (Specimen, error)
302 SysTrashSweep(ctx context.Context, options struct{}) (struct{}, error)
303 UserCreate(ctx context.Context, options CreateOptions) (User, error)
304 UserUpdate(ctx context.Context, options UpdateOptions) (User, error)
305 UserMerge(ctx context.Context, options UserMergeOptions) (User, error)
306 UserActivate(ctx context.Context, options UserActivateOptions) (User, error)
307 UserSetup(ctx context.Context, options UserSetupOptions) (map[string]interface{}, error)
308 UserUnsetup(ctx context.Context, options GetOptions) (User, error)
309 UserGet(ctx context.Context, options GetOptions) (User, error)
310 UserGetCurrent(ctx context.Context, options GetOptions) (User, error)
311 UserGetSystem(ctx context.Context, options GetOptions) (User, error)
312 UserList(ctx context.Context, options ListOptions) (UserList, error)
313 UserDelete(ctx context.Context, options DeleteOptions) (User, error)
314 UserBatchUpdate(context.Context, UserBatchUpdateOptions) (UserList, error)
315 UserAuthenticate(ctx context.Context, options UserAuthenticateOptions) (APIClientAuthorization, error)
316 APIClientAuthorizationCurrent(ctx context.Context, options GetOptions) (APIClientAuthorization, error)
317 APIClientAuthorizationCreate(ctx context.Context, options CreateOptions) (APIClientAuthorization, error)
318 APIClientAuthorizationList(ctx context.Context, options ListOptions) (APIClientAuthorizationList, error)
319 APIClientAuthorizationDelete(ctx context.Context, options DeleteOptions) (APIClientAuthorization, error)
320 APIClientAuthorizationUpdate(ctx context.Context, options UpdateOptions) (APIClientAuthorization, error)
321 APIClientAuthorizationGet(ctx context.Context, options GetOptions) (APIClientAuthorization, error)