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 EndpointGroupContents2 = APIEndpoint{"GET", "arvados/v1/groups/{uuid}/contents", ""}
60 EndpointGroupShared = APIEndpoint{"GET", "arvados/v1/groups/shared", ""}
61 EndpointGroupDelete = APIEndpoint{"DELETE", "arvados/v1/groups/{uuid}", ""}
62 EndpointGroupUntrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/untrash", ""}
63 EndpointUserActivate = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""}
64 EndpointUserCreate = APIEndpoint{"POST", "arvados/v1/users", "user"}
65 EndpointUserCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
66 EndpointUserDelete = APIEndpoint{"DELETE", "arvados/v1/users/{uuid}", ""}
67 EndpointUserGet = APIEndpoint{"GET", "arvados/v1/users/{uuid}", ""}
68 EndpointUserGetCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
69 EndpointUserGetSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
70 EndpointUserList = APIEndpoint{"GET", "arvados/v1/users", ""}
71 EndpointUserMerge = APIEndpoint{"POST", "arvados/v1/users/merge", ""}
72 EndpointUserSetup = APIEndpoint{"POST", "arvados/v1/users/setup", "user"}
73 EndpointUserSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
74 EndpointUserUnsetup = APIEndpoint{"POST", "arvados/v1/users/{uuid}/unsetup", ""}
75 EndpointUserUpdate = APIEndpoint{"PATCH", "arvados/v1/users/{uuid}", "user"}
76 EndpointUserUpdateUUID = APIEndpoint{"POST", "arvados/v1/users/{uuid}/update_uuid", ""}
77 EndpointUserBatchUpdate = APIEndpoint{"PATCH", "arvados/v1/users/batch_update", ""}
78 EndpointUserAuthenticate = APIEndpoint{"POST", "arvados/v1/users/authenticate", ""}
79 EndpointAPIClientAuthorizationCurrent = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/current", ""}
82 type ContainerSSHOptions struct {
83 UUID string `json:"uuid"`
84 DetachKeys string `json:"detach_keys"`
85 LoginUsername string `json:"login_username"`
88 type ContainerSSHConnection struct {
89 Conn net.Conn `json:"-"`
90 Bufrw *bufio.ReadWriter `json:"-"`
91 Logger logrus.FieldLogger `json:"-"`
94 type GetOptions struct {
95 UUID string `json:"uuid,omitempty"`
96 Select []string `json:"select"`
97 IncludeTrash bool `json:"include_trash"`
98 ForwardedFor string `json:"forwarded_for,omitempty"`
99 Remote string `json:"remote,omitempty"`
102 type UntrashOptions struct {
103 UUID string `json:"uuid"`
104 EnsureUniqueName bool `json:"ensure_unique_name"`
107 type ListOptions struct {
108 ClusterID string `json:"cluster_id"`
109 Select []string `json:"select"`
110 Filters []Filter `json:"filters"`
111 Where map[string]interface{} `json:"where"`
112 Limit int64 `json:"limit"`
113 Offset int64 `json:"offset"`
114 Order []string `json:"order"`
115 Distinct bool `json:"distinct"`
116 Count string `json:"count"`
117 IncludeTrash bool `json:"include_trash"`
118 IncludeOldVersions bool `json:"include_old_versions"`
119 BypassFederation bool `json:"bypass_federation"`
120 ForwardedFor string `json:"forwarded_for,omitempty"`
121 Include string `json:"include"`
124 type CreateOptions struct {
125 ClusterID string `json:"cluster_id"`
126 EnsureUniqueName bool `json:"ensure_unique_name"`
127 Select []string `json:"select"`
128 Attrs map[string]interface{} `json:"attrs"`
131 type UpdateOptions struct {
132 UUID string `json:"uuid"`
133 Attrs map[string]interface{} `json:"attrs"`
134 BypassFederation bool `json:"bypass_federation"`
137 type GroupContentsOptions struct {
138 UUID string `json:"uuid,omitempty"`
139 Select []string `json:"select"`
140 Filters []Filter `json:"filters"`
141 Limit int64 `json:"limit"`
142 Offset int64 `json:"offset"`
143 Order []string `json:"order"`
144 Include string `json:"include"`
145 Recursive bool `json:"recursive"`
146 ExcludeHomeProject bool `json:"exclude_home_project"`
149 type UpdateUUIDOptions struct {
150 UUID string `json:"uuid"`
151 NewUUID string `json:"new_uuid"`
154 type UserActivateOptions struct {
155 UUID string `json:"uuid"`
158 type UserSetupOptions struct {
159 UUID string `json:"uuid,omitempty"`
160 Email string `json:"email,omitempty"`
161 OpenIDPrefix string `json:"openid_prefix,omitempty"`
162 RepoName string `json:"repo_name,omitempty"`
163 VMUUID string `json:"vm_uuid,omitempty"`
164 SendNotificationEmail bool `json:"send_notification_email,omitempty"`
165 Attrs map[string]interface{} `json:"attrs"`
168 type UserMergeOptions struct {
169 NewUserUUID string `json:"new_user_uuid,omitempty"`
170 OldUserUUID string `json:"old_user_uuid,omitempty"`
171 NewOwnerUUID string `json:"new_owner_uuid,omitempty"`
172 NewUserToken string `json:"new_user_token,omitempty"`
173 RedirectToNewUser bool `json:"redirect_to_new_user"`
176 type UserBatchUpdateOptions struct {
177 Updates map[string]map[string]interface{} `json:"updates"`
180 type UserBatchUpdateResponse struct{}
182 type DeleteOptions struct {
183 UUID string `json:"uuid"`
186 type LoginOptions struct {
187 ReturnTo string `json:"return_to"` // On success, redirect to this target with api_token=xxx query param
188 Remote string `json:"remote,omitempty"` // Salt token for remote Cluster ID
189 Code string `json:"code,omitempty"` // OAuth2 callback code
190 State string `json:"state,omitempty"` // OAuth2 callback state
193 type UserAuthenticateOptions struct {
194 Username string `json:"username,omitempty"` // PAM username
195 Password string `json:"password,omitempty"` // PAM password
198 type LogoutOptions struct {
199 ReturnTo string `json:"return_to"` // Redirect to this URL after logging out
203 ConfigGet(ctx context.Context) (json.RawMessage, error)
204 Login(ctx context.Context, options LoginOptions) (LoginResponse, error)
205 Logout(ctx context.Context, options LogoutOptions) (LogoutResponse, error)
206 CollectionCreate(ctx context.Context, options CreateOptions) (Collection, error)
207 CollectionUpdate(ctx context.Context, options UpdateOptions) (Collection, error)
208 CollectionGet(ctx context.Context, options GetOptions) (Collection, error)
209 CollectionList(ctx context.Context, options ListOptions) (CollectionList, error)
210 CollectionProvenance(ctx context.Context, options GetOptions) (map[string]interface{}, error)
211 CollectionUsedBy(ctx context.Context, options GetOptions) (map[string]interface{}, error)
212 CollectionDelete(ctx context.Context, options DeleteOptions) (Collection, error)
213 CollectionTrash(ctx context.Context, options DeleteOptions) (Collection, error)
214 CollectionUntrash(ctx context.Context, options UntrashOptions) (Collection, error)
215 ContainerCreate(ctx context.Context, options CreateOptions) (Container, error)
216 ContainerUpdate(ctx context.Context, options UpdateOptions) (Container, error)
217 ContainerGet(ctx context.Context, options GetOptions) (Container, error)
218 ContainerList(ctx context.Context, options ListOptions) (ContainerList, error)
219 ContainerDelete(ctx context.Context, options DeleteOptions) (Container, error)
220 ContainerLock(ctx context.Context, options GetOptions) (Container, error)
221 ContainerUnlock(ctx context.Context, options GetOptions) (Container, error)
222 ContainerSSH(ctx context.Context, options ContainerSSHOptions) (ContainerSSHConnection, error)
223 ContainerRequestCreate(ctx context.Context, options CreateOptions) (ContainerRequest, error)
224 ContainerRequestUpdate(ctx context.Context, options UpdateOptions) (ContainerRequest, error)
225 ContainerRequestGet(ctx context.Context, options GetOptions) (ContainerRequest, error)
226 ContainerRequestList(ctx context.Context, options ListOptions) (ContainerRequestList, error)
227 ContainerRequestDelete(ctx context.Context, options DeleteOptions) (ContainerRequest, error)
228 GroupCreate(ctx context.Context, options CreateOptions) (Group, error)
229 GroupUpdate(ctx context.Context, options UpdateOptions) (Group, error)
230 GroupGet(ctx context.Context, options GetOptions) (Group, error)
231 GroupList(ctx context.Context, options ListOptions) (GroupList, error)
232 GroupContents(ctx context.Context, options GroupContentsOptions) (ObjectList, error)
233 GroupShared(ctx context.Context, options ListOptions) (GroupList, error)
234 GroupDelete(ctx context.Context, options DeleteOptions) (Group, error)
235 GroupUntrash(ctx context.Context, options UntrashOptions) (Group, error)
236 SpecimenCreate(ctx context.Context, options CreateOptions) (Specimen, error)
237 SpecimenUpdate(ctx context.Context, options UpdateOptions) (Specimen, error)
238 SpecimenGet(ctx context.Context, options GetOptions) (Specimen, error)
239 SpecimenList(ctx context.Context, options ListOptions) (SpecimenList, error)
240 SpecimenDelete(ctx context.Context, options DeleteOptions) (Specimen, error)
241 UserCreate(ctx context.Context, options CreateOptions) (User, error)
242 UserUpdate(ctx context.Context, options UpdateOptions) (User, error)
243 UserUpdateUUID(ctx context.Context, options UpdateUUIDOptions) (User, error)
244 UserMerge(ctx context.Context, options UserMergeOptions) (User, error)
245 UserActivate(ctx context.Context, options UserActivateOptions) (User, error)
246 UserSetup(ctx context.Context, options UserSetupOptions) (map[string]interface{}, error)
247 UserUnsetup(ctx context.Context, options GetOptions) (User, error)
248 UserGet(ctx context.Context, options GetOptions) (User, error)
249 UserGetCurrent(ctx context.Context, options GetOptions) (User, error)
250 UserGetSystem(ctx context.Context, options GetOptions) (User, error)
251 UserList(ctx context.Context, options ListOptions) (UserList, error)
252 UserDelete(ctx context.Context, options DeleteOptions) (User, error)
253 UserBatchUpdate(context.Context, UserBatchUpdateOptions) (UserList, error)
254 UserAuthenticate(ctx context.Context, options UserAuthenticateOptions) (APIClientAuthorization, error)
255 APIClientAuthorizationCurrent(ctx context.Context, options GetOptions) (APIClientAuthorization, error)