1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: Apache-2.0
13 "github.com/sirupsen/logrus"
16 type APIEndpoint struct {
19 // "new attributes" key for create/update requests
24 EndpointConfigGet = APIEndpoint{"GET", "arvados/v1/config", ""}
25 EndpointLogin = APIEndpoint{"GET", "login", ""}
26 EndpointLogout = APIEndpoint{"GET", "logout", ""}
27 EndpointCollectionCreate = APIEndpoint{"POST", "arvados/v1/collections", "collection"}
28 EndpointCollectionUpdate = APIEndpoint{"PATCH", "arvados/v1/collections/{uuid}", "collection"}
29 EndpointCollectionGet = APIEndpoint{"GET", "arvados/v1/collections/{uuid}", ""}
30 EndpointCollectionList = APIEndpoint{"GET", "arvados/v1/collections", ""}
31 EndpointCollectionProvenance = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/provenance", ""}
32 EndpointCollectionUsedBy = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/used_by", ""}
33 EndpointCollectionDelete = APIEndpoint{"DELETE", "arvados/v1/collections/{uuid}", ""}
34 EndpointCollectionTrash = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/trash", ""}
35 EndpointCollectionUntrash = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/untrash", ""}
36 EndpointSpecimenCreate = APIEndpoint{"POST", "arvados/v1/specimens", "specimen"}
37 EndpointSpecimenUpdate = APIEndpoint{"PATCH", "arvados/v1/specimens/{uuid}", "specimen"}
38 EndpointSpecimenGet = APIEndpoint{"GET", "arvados/v1/specimens/{uuid}", ""}
39 EndpointSpecimenList = APIEndpoint{"GET", "arvados/v1/specimens", ""}
40 EndpointSpecimenDelete = APIEndpoint{"DELETE", "arvados/v1/specimens/{uuid}", ""}
41 EndpointContainerCreate = APIEndpoint{"POST", "arvados/v1/containers", "container"}
42 EndpointContainerUpdate = APIEndpoint{"PATCH", "arvados/v1/containers/{uuid}", "container"}
43 EndpointContainerGet = APIEndpoint{"GET", "arvados/v1/containers/{uuid}", ""}
44 EndpointContainerList = APIEndpoint{"GET", "arvados/v1/containers", ""}
45 EndpointContainerDelete = APIEndpoint{"DELETE", "arvados/v1/containers/{uuid}", ""}
46 EndpointContainerLock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""}
47 EndpointContainerUnlock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""}
48 EndpointContainerSSH = APIEndpoint{"GET", "arvados/v1/connect/{uuid}/ssh", ""} // move to /containers after #17014 fixes routing
49 EndpointContainerRequestCreate = APIEndpoint{"POST", "arvados/v1/container_requests", "container_request"}
50 EndpointContainerRequestUpdate = APIEndpoint{"PATCH", "arvados/v1/container_requests/{uuid}", "container_request"}
51 EndpointContainerRequestGet = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}", ""}
52 EndpointContainerRequestList = APIEndpoint{"GET", "arvados/v1/container_requests", ""}
53 EndpointContainerRequestDelete = APIEndpoint{"DELETE", "arvados/v1/container_requests/{uuid}", ""}
54 EndpointGroupCreate = APIEndpoint{"POST", "arvados/v1/groups", "group"}
55 EndpointGroupUpdate = APIEndpoint{"PATCH", "arvados/v1/groups/{uuid}", "group"}
56 EndpointGroupGet = APIEndpoint{"GET", "arvados/v1/groups/{uuid}", ""}
57 EndpointGroupList = APIEndpoint{"GET", "arvados/v1/groups", ""}
58 EndpointGroupContents = APIEndpoint{"GET", "arvados/v1/groups/contents", ""}
59 EndpointGroupContentsUUIDInPath = APIEndpoint{"GET", "arvados/v1/groups/{uuid}/contents", ""} // Alternative HTTP route; client-side code should always use EndpointGroupContents instead
60 EndpointGroupShared = APIEndpoint{"GET", "arvados/v1/groups/shared", ""}
61 EndpointGroupDelete = APIEndpoint{"DELETE", "arvados/v1/groups/{uuid}", ""}
62 EndpointGroupTrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/trash", ""}
63 EndpointGroupUntrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/untrash", ""}
64 EndpointUserActivate = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""}
65 EndpointUserCreate = APIEndpoint{"POST", "arvados/v1/users", "user"}
66 EndpointUserCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
67 EndpointUserDelete = APIEndpoint{"DELETE", "arvados/v1/users/{uuid}", ""}
68 EndpointUserGet = APIEndpoint{"GET", "arvados/v1/users/{uuid}", ""}
69 EndpointUserGetCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
70 EndpointUserGetSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
71 EndpointUserList = APIEndpoint{"GET", "arvados/v1/users", ""}
72 EndpointUserMerge = APIEndpoint{"POST", "arvados/v1/users/merge", ""}
73 EndpointUserSetup = APIEndpoint{"POST", "arvados/v1/users/setup", "user"}
74 EndpointUserSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
75 EndpointUserUnsetup = APIEndpoint{"POST", "arvados/v1/users/{uuid}/unsetup", ""}
76 EndpointUserUpdate = APIEndpoint{"PATCH", "arvados/v1/users/{uuid}", "user"}
77 EndpointUserUpdateUUID = APIEndpoint{"POST", "arvados/v1/users/{uuid}/update_uuid", ""}
78 EndpointUserBatchUpdate = APIEndpoint{"PATCH", "arvados/v1/users/batch_update", ""}
79 EndpointUserAuthenticate = APIEndpoint{"POST", "arvados/v1/users/authenticate", ""}
80 EndpointAPIClientAuthorizationCurrent = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/current", ""}
83 type ContainerSSHOptions struct {
84 UUID string `json:"uuid"`
85 DetachKeys string `json:"detach_keys"`
86 LoginUsername string `json:"login_username"`
89 type ContainerSSHConnection struct {
90 Conn net.Conn `json:"-"`
91 Bufrw *bufio.ReadWriter `json:"-"`
92 Logger logrus.FieldLogger `json:"-"`
95 type GetOptions struct {
96 UUID string `json:"uuid,omitempty"`
97 Select []string `json:"select"`
98 IncludeTrash bool `json:"include_trash"`
99 ForwardedFor string `json:"forwarded_for,omitempty"`
100 Remote string `json:"remote,omitempty"`
103 type UntrashOptions struct {
104 UUID string `json:"uuid"`
105 EnsureUniqueName bool `json:"ensure_unique_name"`
108 type ListOptions struct {
109 ClusterID string `json:"cluster_id"`
110 Select []string `json:"select"`
111 Filters []Filter `json:"filters"`
112 Where map[string]interface{} `json:"where"`
113 Limit int64 `json:"limit"`
114 Offset int64 `json:"offset"`
115 Order []string `json:"order"`
116 Distinct bool `json:"distinct"`
117 Count string `json:"count"`
118 IncludeTrash bool `json:"include_trash"`
119 IncludeOldVersions bool `json:"include_old_versions"`
120 BypassFederation bool `json:"bypass_federation"`
121 ForwardedFor string `json:"forwarded_for,omitempty"`
122 Include string `json:"include"`
125 type CreateOptions struct {
126 ClusterID string `json:"cluster_id"`
127 EnsureUniqueName bool `json:"ensure_unique_name"`
128 Select []string `json:"select"`
129 Attrs map[string]interface{} `json:"attrs"`
132 type UpdateOptions struct {
133 UUID string `json:"uuid"`
134 Attrs map[string]interface{} `json:"attrs"`
135 BypassFederation bool `json:"bypass_federation"`
138 type GroupContentsOptions struct {
139 UUID string `json:"uuid,omitempty"`
140 Select []string `json:"select"`
141 Filters []Filter `json:"filters"`
142 Limit int64 `json:"limit"`
143 Offset int64 `json:"offset"`
144 Order []string `json:"order"`
145 Distinct bool `json:"distinct"`
146 Count string `json:"count"`
147 Include string `json:"include"`
148 Recursive bool `json:"recursive"`
149 IncludeTrash bool `json:"include_trash"`
150 IncludeOldVersions bool `json:"include_old_versions"`
151 ExcludeHomeProject bool `json:"exclude_home_project"`
154 type UpdateUUIDOptions struct {
155 UUID string `json:"uuid"`
156 NewUUID string `json:"new_uuid"`
159 type UserActivateOptions struct {
160 UUID string `json:"uuid"`
163 type UserSetupOptions struct {
164 UUID string `json:"uuid,omitempty"`
165 Email string `json:"email,omitempty"`
166 OpenIDPrefix string `json:"openid_prefix,omitempty"`
167 RepoName string `json:"repo_name,omitempty"`
168 VMUUID string `json:"vm_uuid,omitempty"`
169 SendNotificationEmail bool `json:"send_notification_email,omitempty"`
170 Attrs map[string]interface{} `json:"attrs"`
173 type UserMergeOptions struct {
174 NewUserUUID string `json:"new_user_uuid,omitempty"`
175 OldUserUUID string `json:"old_user_uuid,omitempty"`
176 NewOwnerUUID string `json:"new_owner_uuid,omitempty"`
177 NewUserToken string `json:"new_user_token,omitempty"`
178 RedirectToNewUser bool `json:"redirect_to_new_user"`
181 type UserBatchUpdateOptions struct {
182 Updates map[string]map[string]interface{} `json:"updates"`
185 type UserBatchUpdateResponse struct{}
187 type DeleteOptions struct {
188 UUID string `json:"uuid"`
191 type LoginOptions struct {
192 ReturnTo string `json:"return_to"` // On success, redirect to this target with api_token=xxx query param
193 Remote string `json:"remote,omitempty"` // Salt token for remote Cluster ID
194 Code string `json:"code,omitempty"` // OAuth2 callback code
195 State string `json:"state,omitempty"` // OAuth2 callback state
198 type UserAuthenticateOptions struct {
199 Username string `json:"username,omitempty"` // PAM username
200 Password string `json:"password,omitempty"` // PAM password
203 type LogoutOptions struct {
204 ReturnTo string `json:"return_to"` // Redirect to this URL after logging out
208 ConfigGet(ctx context.Context) (json.RawMessage, error)
209 Login(ctx context.Context, options LoginOptions) (LoginResponse, error)
210 Logout(ctx context.Context, options LogoutOptions) (LogoutResponse, error)
211 CollectionCreate(ctx context.Context, options CreateOptions) (Collection, error)
212 CollectionUpdate(ctx context.Context, options UpdateOptions) (Collection, error)
213 CollectionGet(ctx context.Context, options GetOptions) (Collection, error)
214 CollectionList(ctx context.Context, options ListOptions) (CollectionList, error)
215 CollectionProvenance(ctx context.Context, options GetOptions) (map[string]interface{}, error)
216 CollectionUsedBy(ctx context.Context, options GetOptions) (map[string]interface{}, error)
217 CollectionDelete(ctx context.Context, options DeleteOptions) (Collection, error)
218 CollectionTrash(ctx context.Context, options DeleteOptions) (Collection, error)
219 CollectionUntrash(ctx context.Context, options UntrashOptions) (Collection, error)
220 ContainerCreate(ctx context.Context, options CreateOptions) (Container, error)
221 ContainerUpdate(ctx context.Context, options UpdateOptions) (Container, error)
222 ContainerGet(ctx context.Context, options GetOptions) (Container, error)
223 ContainerList(ctx context.Context, options ListOptions) (ContainerList, error)
224 ContainerDelete(ctx context.Context, options DeleteOptions) (Container, error)
225 ContainerLock(ctx context.Context, options GetOptions) (Container, error)
226 ContainerUnlock(ctx context.Context, options GetOptions) (Container, error)
227 ContainerSSH(ctx context.Context, options ContainerSSHOptions) (ContainerSSHConnection, error)
228 ContainerRequestCreate(ctx context.Context, options CreateOptions) (ContainerRequest, error)
229 ContainerRequestUpdate(ctx context.Context, options UpdateOptions) (ContainerRequest, error)
230 ContainerRequestGet(ctx context.Context, options GetOptions) (ContainerRequest, error)
231 ContainerRequestList(ctx context.Context, options ListOptions) (ContainerRequestList, error)
232 ContainerRequestDelete(ctx context.Context, options DeleteOptions) (ContainerRequest, error)
233 GroupCreate(ctx context.Context, options CreateOptions) (Group, error)
234 GroupUpdate(ctx context.Context, options UpdateOptions) (Group, error)
235 GroupGet(ctx context.Context, options GetOptions) (Group, error)
236 GroupList(ctx context.Context, options ListOptions) (GroupList, error)
237 GroupContents(ctx context.Context, options GroupContentsOptions) (ObjectList, error)
238 GroupShared(ctx context.Context, options ListOptions) (GroupList, error)
239 GroupDelete(ctx context.Context, options DeleteOptions) (Group, error)
240 GroupTrash(ctx context.Context, options DeleteOptions) (Group, error)
241 GroupUntrash(ctx context.Context, options UntrashOptions) (Group, error)
242 SpecimenCreate(ctx context.Context, options CreateOptions) (Specimen, error)
243 SpecimenUpdate(ctx context.Context, options UpdateOptions) (Specimen, error)
244 SpecimenGet(ctx context.Context, options GetOptions) (Specimen, error)
245 SpecimenList(ctx context.Context, options ListOptions) (SpecimenList, error)
246 SpecimenDelete(ctx context.Context, options DeleteOptions) (Specimen, error)
247 UserCreate(ctx context.Context, options CreateOptions) (User, error)
248 UserUpdate(ctx context.Context, options UpdateOptions) (User, error)
249 UserUpdateUUID(ctx context.Context, options UpdateUUIDOptions) (User, error)
250 UserMerge(ctx context.Context, options UserMergeOptions) (User, error)
251 UserActivate(ctx context.Context, options UserActivateOptions) (User, error)
252 UserSetup(ctx context.Context, options UserSetupOptions) (map[string]interface{}, error)
253 UserUnsetup(ctx context.Context, options GetOptions) (User, error)
254 UserGet(ctx context.Context, options GetOptions) (User, error)
255 UserGetCurrent(ctx context.Context, options GetOptions) (User, error)
256 UserGetSystem(ctx context.Context, options GetOptions) (User, error)
257 UserList(ctx context.Context, options ListOptions) (UserList, error)
258 UserDelete(ctx context.Context, options DeleteOptions) (User, error)
259 UserBatchUpdate(context.Context, UserBatchUpdateOptions) (UserList, error)
260 UserAuthenticate(ctx context.Context, options UserAuthenticateOptions) (APIClientAuthorization, error)
261 APIClientAuthorizationCurrent(ctx context.Context, options GetOptions) (APIClientAuthorization, error)