44 "context"
55 "fmt"
66 "net/http"
7+ "net/url"
78 "strconv"
89
910 "github.com/google/uuid"
@@ -28,7 +29,25 @@ type OIDCMapping struct {
2829 UUID uuid.UUID `json:"uuid"`
2930}
3031
32+ type OIDCUser struct {
33+ Username string `json:"username"`
34+ SubjectIdentifier string `json:"subjectIdentifier"`
35+ Email string `json:"email"`
36+ Teams []Team `json:"teams"`
37+ Permissions []Permission `json:"permissions"`
38+ }
39+
40+ type OIDCTokens struct {
41+ ID string `json:"idToken"`
42+ Access string `json:"accessToken,omitempty"`
43+ }
44+
3145func (s OIDCService ) Available (ctx context.Context ) (available bool , err error ) {
46+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
47+ if err != nil {
48+ return
49+ }
50+
3251 req , err := s .client .newRequest (ctx , http .MethodGet , "api/v1/oidc/available" , withAcceptContentType ("text/plain" ))
3352 if err != nil {
3453 return
@@ -44,22 +63,28 @@ func (s OIDCService) Available(ctx context.Context) (available bool, err error)
4463 return
4564}
4665
47- func (s OIDCService ) GetAllGroups (ctx context.Context , po PageOptions ) (p Page [ OIDCGroup ] , err error ) {
48- req , err : = s .client .newRequest ( ctx , http . MethodGet , "api/v1/oidc/group" , withPageOptions ( po ) )
66+ func (s OIDCService ) GetAllGroups (ctx context.Context ) (groups [] OIDCGroup , err error ) {
67+ err = s .client .assertServerVersionAtLeast ( "4.0.0" )
4968 if err != nil {
5069 return
5170 }
5271
53- res , err := s .client .doRequest ( req , & p . Items )
72+ req , err := s .client .newRequest ( ctx , http . MethodGet , "api/v1/oidc/group" )
5473 if err != nil {
5574 return
5675 }
5776
58- p . TotalCount = res . TotalCount
77+ _ , err = s . client . doRequest ( req , & groups )
5978 return
79+
6080}
6181
6282func (s OIDCService ) CreateGroup (ctx context.Context , name string ) (g OIDCGroup , err error ) {
83+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
84+ if err != nil {
85+ return
86+ }
87+
6388 req , err := s .client .newRequest (ctx , http .MethodPut , "api/v1/oidc/group" , withBody (OIDCGroup {Name : name }))
6489 if err != nil {
6590 return
@@ -69,6 +94,11 @@ func (s OIDCService) CreateGroup(ctx context.Context, name string) (g OIDCGroup,
6994 return
7095}
7196func (s OIDCService ) UpdateGroup (ctx context.Context , group OIDCGroup ) (g OIDCGroup , err error ) {
97+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
98+ if err != nil {
99+ return
100+ }
101+
72102 req , err := s .client .newRequest (ctx , http .MethodPost , "api/v1/oidc/group" , withBody (group ))
73103 if err != nil {
74104 return
@@ -79,6 +109,11 @@ func (s OIDCService) UpdateGroup(ctx context.Context, group OIDCGroup) (g OIDCGr
79109}
80110
81111func (s OIDCService ) DeleteGroup (ctx context.Context , groupUUID uuid.UUID ) (err error ) {
112+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
113+ if err != nil {
114+ return
115+ }
116+
82117 req , err := s .client .newRequest (ctx , http .MethodDelete , fmt .Sprintf ("api/v1/oidc/group/%s" , groupUUID .String ()))
83118 if err != nil {
84119 return
@@ -88,22 +123,27 @@ func (s OIDCService) DeleteGroup(ctx context.Context, groupUUID uuid.UUID) (err
88123 return
89124}
90125
91- func (s OIDCService ) GetAllTeamsOf (ctx context.Context , group OIDCGroup , po PageOptions ) (p Page [ Team ] , err error ) {
92- req , err : = s .client .newRequest ( ctx , http . MethodGet , fmt . Sprintf ( "api/v1/oidc/group/%s/team" , group . UUID . String ()), withPageOptions ( po ) )
126+ func (s OIDCService ) GetAllTeamsOf (ctx context.Context , group OIDCGroup ) (teams [] Team , err error ) {
127+ err = s .client .assertServerVersionAtLeast ( "4.0.0" )
93128 if err != nil {
94129 return
95130 }
96131
97- res , err := s .client .doRequest ( req , & p . Items )
132+ req , err := s .client .newRequest ( ctx , http . MethodGet , fmt . Sprintf ( "api/v1/oidc/group/%s/team" , group . UUID . String ()) )
98133 if err != nil {
99134 return
100135 }
101136
102- p . TotalCount = res . TotalCount
137+ _ , err = s . client . doRequest ( req , & teams )
103138 return
104139}
105140
106141func (s OIDCService ) AddTeamMapping (ctx context.Context , mapping OIDCMappingRequest ) (m OIDCMapping , err error ) {
142+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
143+ if err != nil {
144+ return
145+ }
146+
107147 req , err := s .client .newRequest (ctx , http .MethodPut , "api/v1/oidc/mapping" , withBody (mapping ))
108148 if err != nil {
109149 return
@@ -114,6 +154,11 @@ func (s OIDCService) AddTeamMapping(ctx context.Context, mapping OIDCMappingRequ
114154}
115155
116156func (s OIDCService ) RemoveTeamMapping (ctx context.Context , mappingID uuid.UUID ) (err error ) {
157+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
158+ if err != nil {
159+ return
160+ }
161+
117162 req , err := s .client .newRequest (ctx , http .MethodDelete , fmt .Sprintf ("api/v1/oidc/mapping/%s" , mappingID .String ()))
118163 if err != nil {
119164 return
@@ -122,3 +167,87 @@ func (s OIDCService) RemoveTeamMapping(ctx context.Context, mappingID uuid.UUID)
122167 _ , err = s .client .doRequest (req , nil )
123168 return
124169}
170+
171+ func (s OIDCService ) RemoveTeamMapping2 (ctx context.Context , groupID , teamID uuid.UUID ) (err error ) {
172+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
173+ if err != nil {
174+ return
175+ }
176+
177+ req , err := s .client .newRequest (ctx , http .MethodDelete , fmt .Sprintf ("api/v1/oidc/group/%s/team/%s/mapping" , groupID .String (), teamID .String ()))
178+ if err != nil {
179+ return
180+ }
181+
182+ _ , err = s .client .doRequest (req , nil )
183+ return
184+ }
185+
186+ func (s OIDCService ) GetAllUsers (ctx context.Context ) (p Page [OIDCUser ], err error ) {
187+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
188+ if err != nil {
189+ return
190+ }
191+
192+ req , err := s .client .newRequest (ctx , http .MethodGet , "api/v1/user/oidc" )
193+ if err != nil {
194+ return
195+ }
196+
197+ res , err := s .client .doRequest (req , & p .Items )
198+ if err != nil {
199+ return
200+ }
201+
202+ p .TotalCount = res .TotalCount
203+ return
204+ }
205+
206+ func (s OIDCService ) CreateUser (ctx context.Context , userReq OIDCUser ) (userRes OIDCUser , err error ) {
207+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
208+ if err != nil {
209+ return
210+ }
211+
212+ req , err := s .client .newRequest (ctx , http .MethodPut , "api/v1/user/oidc" , withBody (userReq ))
213+ if err != nil {
214+ return
215+ }
216+
217+ _ , err = s .client .doRequest (req , & userRes )
218+ return
219+ }
220+
221+ func (s OIDCService ) DeleteUser (ctx context.Context , user OIDCUser ) (err error ) {
222+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
223+ if err != nil {
224+ return
225+ }
226+
227+ req , err := s .client .newRequest (ctx , http .MethodDelete , "api/v1/user/oidc" , withBody (user ))
228+ if err != nil {
229+ return
230+ }
231+
232+ _ , err = s .client .doRequest (req , nil )
233+ return
234+ }
235+
236+ func (s OIDCService ) Login (ctx context.Context , tokens OIDCTokens ) (token string , err error ) {
237+ err = s .client .assertServerVersionAtLeast ("4.0.0" )
238+ if err != nil {
239+ return
240+ }
241+
242+ body := url.Values {}
243+ body .Set ("idToken" , tokens .ID )
244+ body .Set ("accessToken" , tokens .Access )
245+
246+ req , err := s .client .newRequest (ctx , http .MethodPost , "api/v1/user/oidc/login" , withBody (body ))
247+ if err != nil {
248+ return
249+ }
250+
251+ _ , err = s .client .doRequest (req , & token )
252+ return
253+ }
0 commit comments