16212: Fix wrong API endpoint for users/batch_update.
[arvados.git] / sdk / go / arvados / api.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 package arvados
6
7 import (
8         "context"
9         "encoding/json"
10 )
11
12 type APIEndpoint struct {
13         Method string
14         Path   string
15         // "new attributes" key for create/update requests
16         AttrsKey string
17 }
18
19 var (
20         EndpointConfigGet                     = APIEndpoint{"GET", "arvados/v1/config", ""}
21         EndpointLogin                         = APIEndpoint{"GET", "login", ""}
22         EndpointLogout                        = APIEndpoint{"GET", "logout", ""}
23         EndpointCollectionCreate              = APIEndpoint{"POST", "arvados/v1/collections", "collection"}
24         EndpointCollectionUpdate              = APIEndpoint{"PATCH", "arvados/v1/collections/{uuid}", "collection"}
25         EndpointCollectionGet                 = APIEndpoint{"GET", "arvados/v1/collections/{uuid}", ""}
26         EndpointCollectionList                = APIEndpoint{"GET", "arvados/v1/collections", ""}
27         EndpointCollectionProvenance          = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/provenance", ""}
28         EndpointCollectionUsedBy              = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/used_by", ""}
29         EndpointCollectionDelete              = APIEndpoint{"DELETE", "arvados/v1/collections/{uuid}", ""}
30         EndpointCollectionTrash               = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/trash", ""}
31         EndpointCollectionUntrash             = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/untrash", ""}
32         EndpointSpecimenCreate                = APIEndpoint{"POST", "arvados/v1/specimens", "specimen"}
33         EndpointSpecimenUpdate                = APIEndpoint{"PATCH", "arvados/v1/specimens/{uuid}", "specimen"}
34         EndpointSpecimenGet                   = APIEndpoint{"GET", "arvados/v1/specimens/{uuid}", ""}
35         EndpointSpecimenList                  = APIEndpoint{"GET", "arvados/v1/specimens", ""}
36         EndpointSpecimenDelete                = APIEndpoint{"DELETE", "arvados/v1/specimens/{uuid}", ""}
37         EndpointContainerCreate               = APIEndpoint{"POST", "arvados/v1/containers", "container"}
38         EndpointContainerUpdate               = APIEndpoint{"PATCH", "arvados/v1/containers/{uuid}", "container"}
39         EndpointContainerGet                  = APIEndpoint{"GET", "arvados/v1/containers/{uuid}", ""}
40         EndpointContainerList                 = APIEndpoint{"GET", "arvados/v1/containers", ""}
41         EndpointContainerDelete               = APIEndpoint{"DELETE", "arvados/v1/containers/{uuid}", ""}
42         EndpointContainerLock                 = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""}
43         EndpointContainerUnlock               = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""}
44         EndpointUserActivate                  = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""}
45         EndpointUserCreate                    = APIEndpoint{"POST", "arvados/v1/users", "user"}
46         EndpointUserCurrent                   = APIEndpoint{"GET", "arvados/v1/users/current", ""}
47         EndpointUserDelete                    = APIEndpoint{"DELETE", "arvados/v1/users/{uuid}", ""}
48         EndpointUserGet                       = APIEndpoint{"GET", "arvados/v1/users/{uuid}", ""}
49         EndpointUserGetCurrent                = APIEndpoint{"GET", "arvados/v1/users/current", ""}
50         EndpointUserGetSystem                 = APIEndpoint{"GET", "arvados/v1/users/system", ""}
51         EndpointUserList                      = APIEndpoint{"GET", "arvados/v1/users", ""}
52         EndpointUserMerge                     = APIEndpoint{"POST", "arvados/v1/users/merge", ""}
53         EndpointUserSetup                     = APIEndpoint{"POST", "arvados/v1/users/setup", "user"}
54         EndpointUserSystem                    = APIEndpoint{"GET", "arvados/v1/users/system", ""}
55         EndpointUserUnsetup                   = APIEndpoint{"POST", "arvados/v1/users/{uuid}/unsetup", ""}
56         EndpointUserUpdate                    = APIEndpoint{"PATCH", "arvados/v1/users/{uuid}", "user"}
57         EndpointUserUpdateUUID                = APIEndpoint{"POST", "arvados/v1/users/{uuid}/update_uuid", ""}
58         EndpointUserBatchUpdate               = APIEndpoint{"PATCH", "arvados/v1/users/batch_update", ""}
59         EndpointUserAuthenticate              = APIEndpoint{"POST", "arvados/v1/users/authenticate", ""}
60         EndpointAPIClientAuthorizationCurrent = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/current", ""}
61 )
62
63 type GetOptions struct {
64         UUID         string   `json:"uuid"`
65         Select       []string `json:"select"`
66         IncludeTrash bool     `json:"include_trash"`
67         ForwardedFor string   `json:"forwarded_for"`
68         Remote       string   `json:"remote"`
69 }
70
71 type UntrashOptions struct {
72         UUID             string `json:"uuid"`
73         EnsureUniqueName bool   `json:"ensure_unique_name"`
74 }
75
76 type ListOptions struct {
77         ClusterID          string                 `json:"cluster_id"`
78         Select             []string               `json:"select"`
79         Filters            []Filter               `json:"filters"`
80         Where              map[string]interface{} `json:"where"`
81         Limit              int                    `json:"limit"`
82         Offset             int                    `json:"offset"`
83         Order              []string               `json:"order"`
84         Distinct           bool                   `json:"distinct"`
85         Count              string                 `json:"count"`
86         IncludeTrash       bool                   `json:"include_trash"`
87         IncludeOldVersions bool                   `json:"include_old_versions"`
88 }
89
90 type CreateOptions struct {
91         ClusterID        string                 `json:"cluster_id"`
92         EnsureUniqueName bool                   `json:"ensure_unique_name"`
93         Select           []string               `json:"select"`
94         Attrs            map[string]interface{} `json:"attrs"`
95 }
96
97 type UpdateOptions struct {
98         UUID  string                 `json:"uuid"`
99         Attrs map[string]interface{} `json:"attrs"`
100 }
101
102 type UpdateUUIDOptions struct {
103         UUID    string `json:"uuid"`
104         NewUUID string `json:"new_uuid"`
105 }
106
107 type UserActivateOptions struct {
108         UUID string `json:"uuid"`
109 }
110
111 type UserSetupOptions struct {
112         UUID                  string                 `json:"uuid,omitempty"`
113         Email                 string                 `json:"email,omitempty"`
114         OpenIDPrefix          string                 `json:"openid_prefix,omitempty"`
115         RepoName              string                 `json:"repo_name,omitempty"`
116         VMUUID                string                 `json:"vm_uuid,omitempty"`
117         SendNotificationEmail bool                   `json:"send_notification_email,omitempty"`
118         Attrs                 map[string]interface{} `json:"attrs"`
119 }
120
121 type UserMergeOptions struct {
122         NewUserUUID       string `json:"new_user_uuid,omitempty"`
123         OldUserUUID       string `json:"old_user_uuid,omitempty"`
124         NewOwnerUUID      string `json:"new_owner_uuid,omitempty"`
125         NewUserToken      string `json:"new_user_token,omitempty"`
126         RedirectToNewUser bool   `json:"redirect_to_new_user"`
127 }
128
129 type UserBatchUpdateOptions struct {
130         Updates map[string]map[string]interface{} `json:"updates"`
131 }
132
133 type UserBatchUpdateResponse struct{}
134
135 type DeleteOptions struct {
136         UUID string `json:"uuid"`
137 }
138
139 type LoginOptions struct {
140         ReturnTo string `json:"return_to"`        // On success, redirect to this target with api_token=xxx query param
141         Remote   string `json:"remote,omitempty"` // Salt token for remote Cluster ID
142         Code     string `json:"code,omitempty"`   // OAuth2 callback code
143         State    string `json:"state,omitempty"`  // OAuth2 callback state
144 }
145
146 type UserAuthenticateOptions struct {
147         Username string `json:"username,omitempty"` // PAM username
148         Password string `json:"password,omitempty"` // PAM password
149 }
150
151 type LogoutOptions struct {
152         ReturnTo string `json:"return_to"` // Redirect to this URL after logging out
153 }
154
155 type API interface {
156         ConfigGet(ctx context.Context) (json.RawMessage, error)
157         Login(ctx context.Context, options LoginOptions) (LoginResponse, error)
158         Logout(ctx context.Context, options LogoutOptions) (LogoutResponse, error)
159         CollectionCreate(ctx context.Context, options CreateOptions) (Collection, error)
160         CollectionUpdate(ctx context.Context, options UpdateOptions) (Collection, error)
161         CollectionGet(ctx context.Context, options GetOptions) (Collection, error)
162         CollectionList(ctx context.Context, options ListOptions) (CollectionList, error)
163         CollectionProvenance(ctx context.Context, options GetOptions) (map[string]interface{}, error)
164         CollectionUsedBy(ctx context.Context, options GetOptions) (map[string]interface{}, error)
165         CollectionDelete(ctx context.Context, options DeleteOptions) (Collection, error)
166         CollectionTrash(ctx context.Context, options DeleteOptions) (Collection, error)
167         CollectionUntrash(ctx context.Context, options UntrashOptions) (Collection, error)
168         ContainerCreate(ctx context.Context, options CreateOptions) (Container, error)
169         ContainerUpdate(ctx context.Context, options UpdateOptions) (Container, error)
170         ContainerGet(ctx context.Context, options GetOptions) (Container, error)
171         ContainerList(ctx context.Context, options ListOptions) (ContainerList, error)
172         ContainerDelete(ctx context.Context, options DeleteOptions) (Container, error)
173         ContainerLock(ctx context.Context, options GetOptions) (Container, error)
174         ContainerUnlock(ctx context.Context, options GetOptions) (Container, error)
175         SpecimenCreate(ctx context.Context, options CreateOptions) (Specimen, error)
176         SpecimenUpdate(ctx context.Context, options UpdateOptions) (Specimen, error)
177         SpecimenGet(ctx context.Context, options GetOptions) (Specimen, error)
178         SpecimenList(ctx context.Context, options ListOptions) (SpecimenList, error)
179         SpecimenDelete(ctx context.Context, options DeleteOptions) (Specimen, error)
180         UserCreate(ctx context.Context, options CreateOptions) (User, error)
181         UserUpdate(ctx context.Context, options UpdateOptions) (User, error)
182         UserUpdateUUID(ctx context.Context, options UpdateUUIDOptions) (User, error)
183         UserMerge(ctx context.Context, options UserMergeOptions) (User, error)
184         UserActivate(ctx context.Context, options UserActivateOptions) (User, error)
185         UserSetup(ctx context.Context, options UserSetupOptions) (map[string]interface{}, error)
186         UserUnsetup(ctx context.Context, options GetOptions) (User, error)
187         UserGet(ctx context.Context, options GetOptions) (User, error)
188         UserGetCurrent(ctx context.Context, options GetOptions) (User, error)
189         UserGetSystem(ctx context.Context, options GetOptions) (User, error)
190         UserList(ctx context.Context, options ListOptions) (UserList, error)
191         UserDelete(ctx context.Context, options DeleteOptions) (User, error)
192         UserBatchUpdate(context.Context, UserBatchUpdateOptions) (UserList, error)
193         UserAuthenticate(ctx context.Context, options UserAuthenticateOptions) (APIClientAuthorization, error)
194         APIClientAuthorizationCurrent(ctx context.Context, options GetOptions) (APIClientAuthorization, error)
195 }