Skip to content

Commit 0c15aec

Browse files
authored
Update token renewal poll timing & remove JMAP basic auth support (#32)
Signed-off-by: sami <[email protected]>
1 parent 2b25527 commit 0c15aec

File tree

5 files changed

+82
-117
lines changed

5 files changed

+82
-117
lines changed

go.mod

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ toolchain go1.23.1
77
require (
88
git.sr.ht/~rockorager/go-jmap v0.5.0
99
github.com/golang-jwt/jwt/v5 v5.2.1
10+
github.com/google/go-cmp v0.6.0
1011
github.com/google/uuid v1.6.0
11-
github.com/pkg/errors v0.9.1
1212
github.com/stretchr/testify v1.9.0
1313
golang.org/x/oauth2 v0.23.0
1414
k8s.io/apimachinery v0.30.2
@@ -41,7 +41,6 @@ require (
4141
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
4242
github.com/golang/protobuf v1.5.4 // indirect
4343
github.com/google/gnostic-models v0.6.8 // indirect
44-
github.com/google/go-cmp v0.6.0 // indirect
4544
github.com/google/go-containerregistry v0.19.1 // indirect
4645
github.com/google/gofuzz v1.2.0 // indirect
4746
github.com/huandu/xstrings v1.5.0 // indirect
@@ -60,6 +59,7 @@ require (
6059
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
6160
github.com/opencontainers/go-digest v1.0.0 // indirect
6261
github.com/opencontainers/image-spec v1.1.0-rc3 // indirect
62+
github.com/pkg/errors v0.9.1 // indirect
6363
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
6464
github.com/prometheus/client_golang v1.18.0 // indirect
6565
github.com/prometheus/client_model v0.6.1 // indirect

inbox/accounts.go

+45-50
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ package inbox
33
import (
44
"context"
55
"encoding/json"
6+
"errors"
67
"fmt"
78
"io"
89
"net/http"
910

10-
"github.com/pkg/errors"
11-
1211
apis "go.opscenter.dev/james-go-client"
1312
)
1413

@@ -20,23 +19,22 @@ func (w *WebAdminClient) createAccount(object Object) error {
2019
}
2120
objectAddr, err := generateObjectAddr(object)
2221
if err != nil {
23-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
22+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
2423
}
2524

2625
password, err := generateRandomPassword()
2726
if err != nil {
28-
return newServerError(nil, errors.Errorf("failed to generate random password: %v", err))
27+
return newServerError(nil, fmt.Errorf("failed to generate random password: %w", err))
2928
}
3029

3130
r, err := w.UsersAPI.UpsertUser(context.TODO(), objectAddr).
3231
UpsertUserRequest(apis.UpsertUserRequest{Password: password}).Execute()
33-
3432
if err != nil {
3533
return newServerError(r, err)
3634
}
3735

3836
if r.StatusCode != http.StatusNoContent {
39-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
37+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
4038
}
4139

4240
return nil
@@ -49,7 +47,7 @@ func (w *WebAdminClient) deleteAccount(object Object) error {
4947

5048
objectAddr, err := generateObjectAddr(object)
5149
if err != nil {
52-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
50+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
5351
}
5452

5553
r, err := w.UsersAPI.DeleteUser(context.TODO(), objectAddr).Execute()
@@ -58,7 +56,7 @@ func (w *WebAdminClient) deleteAccount(object Object) error {
5856
}
5957

6058
if r.StatusCode != http.StatusNoContent {
61-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
59+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
6260
}
6361

6462
return nil
@@ -87,12 +85,12 @@ func (w *WebAdminClient) AddGroups(groups []GroupAndAssociatedMember) ([]apis.Gr
8785

8886
groupAddr, err := generateObjectAddr(group.GetGroup())
8987
if err != nil {
90-
return nil, newServerError(nil, errors.Errorf("failed to generate group object address: %v", err))
88+
return nil, newServerError(nil, fmt.Errorf("failed to generate group object address: %w", err))
9189
}
9290

9391
memberAddr, err := generateObjectAddr(group.GetMember())
9492
if err != nil {
95-
return nil, newServerError(nil, errors.Errorf("failed to generate member object address: %v", err))
93+
return nil, newServerError(nil, fmt.Errorf("failed to generate member object address: %w", err))
9694
}
9795

9896
if apisGroup, ok := groupMap[groupAddr]; !ok {
@@ -113,11 +111,11 @@ func (w *WebAdminClient) AddGroups(groups []GroupAndAssociatedMember) ([]apis.Gr
113111
func (w *WebAdminClient) AddObjectAlias(object Object) error {
114112
userAddr, err := generateObjectAddr(object)
115113
if err != nil {
116-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
114+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
117115
}
118116
addrAlias, err := object.GetAddressAlias()
119117
if err != nil {
120-
return newServerError(nil, errors.Errorf("couldn't get address alias: %v", err))
118+
return newServerError(nil, fmt.Errorf("couldn't get address alias: %w", err))
121119
}
122120
addrAlias = fmt.Sprintf("%s@%s", addrAlias, GlobalMailDomain)
123121

@@ -131,7 +129,7 @@ func (w *WebAdminClient) addAddressAlias(userAddr string, alias string) error {
131129
}
132130

133131
if r.StatusCode != http.StatusNoContent {
134-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
132+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
135133
}
136134

137135
return nil
@@ -140,11 +138,11 @@ func (w *WebAdminClient) addAddressAlias(userAddr string, alias string) error {
140138
func (w *WebAdminClient) RemoveObjectAlias(object Object) error {
141139
userAddr, err := generateObjectAddr(object)
142140
if err != nil {
143-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
141+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
144142
}
145143
addrAlias, err := object.GetAddressAlias()
146144
if err != nil {
147-
return newServerError(nil, errors.Errorf("couldn't get address alias: %v", err))
145+
return newServerError(nil, fmt.Errorf("couldn't get address alias: %w", err))
148146
}
149147

150148
return w.removeAddressAlias(userAddr, addrAlias)
@@ -157,7 +155,7 @@ func (w *WebAdminClient) removeAddressAlias(userAddr string, alias string) error
157155
}
158156

159157
if r.StatusCode != http.StatusNoContent {
160-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
158+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
161159
}
162160

163161
return nil
@@ -166,7 +164,7 @@ func (w *WebAdminClient) removeAddressAlias(userAddr string, alias string) error
166164
func (w *WebAdminClient) ListObjectAliases(object Object) ([]apis.GetAlias200ResponseInner, error) {
167165
userAddr, err := generateObjectAddr(object)
168166
if err != nil {
169-
return nil, newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
167+
return nil, newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
170168
}
171169

172170
return w.listAddressAliases(userAddr)
@@ -179,7 +177,7 @@ func (w *WebAdminClient) listAddressAliases(userAddr string) ([]apis.GetAlias200
179177
}
180178

181179
if r.StatusCode != http.StatusOK {
182-
return nil, newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
180+
return nil, newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
183181
}
184182

185183
return aliases, nil
@@ -188,7 +186,7 @@ func (w *WebAdminClient) listAddressAliases(userAddr string) ([]apis.GetAlias200
188186
func (w *WebAdminClient) RemoveAllObjectAliases(object Object) error {
189187
userAddr, err := generateObjectAddr(object)
190188
if err != nil {
191-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
189+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
192190
}
193191

194192
return w.removeAllAddressAliases(userAddr)
@@ -207,7 +205,7 @@ func (w *WebAdminClient) removeAllAddressAliases(userAddr string) error {
207205
}
208206

209207
if r.StatusCode != http.StatusNoContent {
210-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
208+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
211209
}
212210
}
213211

@@ -217,22 +215,22 @@ func (w *WebAdminClient) removeAllAddressAliases(userAddr string) error {
217215
func (w *WebAdminClient) addGroups(groups []*apis.Group) ([]apis.GroupsWithMembersInfo, error) {
218216
r, err := w.AddressGroupAPI.AddGroups(context.TODO(), groups).Execute()
219217
if err != nil {
220-
return nil, newServerError(r, errors.Wrapf(err, "failed to add groups: %v", err))
218+
return nil, newServerError(r, fmt.Errorf("failed to add groups: %w", err))
221219
}
222220

223221
if r.StatusCode != http.StatusOK {
224-
return nil, newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
222+
return nil, newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
225223
}
226224

227225
body, err := io.ReadAll(r.Body)
228226
if err != nil {
229-
return nil, newServerError(r, errors.Wrapf(err, "failed to read body: %v", err))
227+
return nil, newServerError(r, fmt.Errorf("failed to read body: %w", err))
230228
}
231229

232230
var addGroupsStatus []apis.GroupsWithMembersInfo
233231
err = json.Unmarshal(body, &addGroupsStatus)
234232
if err != nil {
235-
return nil, newServerError(r, errors.Wrapf(err, "failed to unmarshal body: %v", err))
233+
return nil, newServerError(r, fmt.Errorf("failed to unmarshal body: %w", err))
236234
}
237235

238236
var failedGroups []apis.GroupsWithMembersInfo
@@ -262,7 +260,7 @@ func (w *WebAdminClient) addGroups(groups []*apis.Group) ([]apis.GroupsWithMembe
262260
}
263261

264262
if failedGroups != nil {
265-
return failedGroups, newServerError(r, errors.Errorf("failed to add groups: %v", failedGroups))
263+
return failedGroups, newServerError(r, fmt.Errorf("failed to add groups: %s", failedGroups))
266264
}
267265

268266
return nil, nil
@@ -271,12 +269,11 @@ func (w *WebAdminClient) addGroups(groups []*apis.Group) ([]apis.GroupsWithMembe
271269
func (w *WebAdminClient) AddGroupMember(grpObject, memberObject Object) error {
272270
grpAddr, err := w.GetObjectAddr(grpObject)
273271
if err != nil {
274-
return newServerError(nil, errors.Errorf("failed to generate group object address: %v", err))
272+
return newServerError(nil, fmt.Errorf("failed to generate group object address: %w", err))
275273
}
276274
memberAddr, err := w.GetObjectAddr(memberObject)
277275
if err != nil {
278-
return newServerError(nil, errors.Errorf("failed to generate member object address: %v", err))
279-
276+
return newServerError(nil, fmt.Errorf("failed to generate member object address: %w", err))
280277
}
281278

282279
return w.addGroupMember(grpAddr, memberAddr)
@@ -289,7 +286,7 @@ func (w *WebAdminClient) addGroupMember(grpAddr, memberAddr string) error {
289286
}
290287

291288
if r.StatusCode != http.StatusNoContent {
292-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
289+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
293290
}
294291

295292
return nil
@@ -298,13 +295,11 @@ func (w *WebAdminClient) addGroupMember(grpAddr, memberAddr string) error {
298295
func (w *WebAdminClient) RemoveGroupMember(grpObject, memberObject Object) error {
299296
grpAddr, err := generateObjectAddr(grpObject)
300297
if err != nil {
301-
return newServerError(nil, errors.Errorf("failed to generate group object address: %v", err))
302-
298+
return newServerError(nil, fmt.Errorf("failed to generate group object address: %w", err))
303299
}
304300
memberAddr, err := generateObjectAddr(memberObject)
305301
if err != nil {
306-
return newServerError(nil, errors.Errorf("failed to generate member object address: %v", err))
307-
302+
return newServerError(nil, fmt.Errorf("failed to generate member object address: %w", err))
308303
}
309304

310305
return w.removeGroupMember(grpAddr, memberAddr)
@@ -317,7 +312,7 @@ func (w *WebAdminClient) removeGroupMember(grpAddr, memberAddr string) error {
317312
}
318313

319314
if r.StatusCode != http.StatusNoContent {
320-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
315+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
321316
}
322317

323318
return nil
@@ -326,11 +321,11 @@ func (w *WebAdminClient) removeGroupMember(grpAddr, memberAddr string) error {
326321
func (w *WebAdminClient) CheckGroupMemberExistence(grpObject, memberObject Object) error {
327322
grpAddr, err := generateObjectAddr(grpObject)
328323
if err != nil {
329-
return newServerError(nil, errors.Errorf("failed to generate group object address: %v", err))
324+
return newServerError(nil, fmt.Errorf("failed to generate group object address: %w", err))
330325
}
331326
memberAddr, err := generateObjectAddr(memberObject)
332327
if err != nil {
333-
return newServerError(nil, errors.Errorf("failed to generate member object address: %v", err))
328+
return newServerError(nil, fmt.Errorf("failed to generate member object address: %w", err))
334329
}
335330

336331
return w.checkGroupMemberExistence(grpAddr, memberAddr)
@@ -343,7 +338,7 @@ func (w *WebAdminClient) checkGroupMemberExistence(grpAddr, memberAddr string) e
343338
}
344339

345340
if r.StatusCode != http.StatusOK {
346-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
341+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
347342
}
348343

349344
return nil
@@ -356,7 +351,7 @@ func (w *WebAdminClient) CheckMultipleGroupMemberPairExistence(groupMemberPair [
356351
}
357352

358353
if r.StatusCode != http.StatusOK {
359-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
354+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
360355
}
361356

362357
return nil
@@ -365,7 +360,7 @@ func (w *WebAdminClient) CheckMultipleGroupMemberPairExistence(groupMemberPair [
365360
func (w *WebAdminClient) createGroup(object Object) error {
366361
grpAddr, err := generateObjectAddr(object)
367362
if err != nil {
368-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
363+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
369364
}
370365
r, err := w.AddressGroupAPI.CreateGroup(context.Background(), grpAddr).Execute()
371366
if err != nil {
@@ -378,7 +373,7 @@ func (w *WebAdminClient) createGroup(object Object) error {
378373
func (w *WebAdminClient) deleteGroup(grpObject Object) error {
379374
grpAddr, err := generateObjectAddr(grpObject)
380375
if err != nil {
381-
return newServerError(nil, errors.Errorf("failed to generate group object address: %v", err))
376+
return newServerError(nil, fmt.Errorf("failed to generate group object address: %w", err))
382377
}
383378

384379
r, err := w.AddressGroupAPI.DeleteGroup(context.TODO(), grpAddr).Execute()
@@ -394,7 +389,7 @@ func (w *WebAdminClient) DeleteGroups(grpObjects []Object) error {
394389
for i := 0; i < len(grpObjects); i++ {
395390
grpAddr, err := w.GetObjectAddr(grpObjects[i])
396391
if err != nil {
397-
return newServerError(nil, errors.Errorf("failed to generate group object address: %v", err))
392+
return newServerError(nil, fmt.Errorf("failed to generate group object address: %w", err))
398393
}
399394
grpAddresses[i] = grpAddr
400395
}
@@ -409,7 +404,7 @@ func (w *WebAdminClient) DeleteGroups(grpObjects []Object) error {
409404
func (w *WebAdminClient) CheckObjectExistence(object Object) error {
410405
objectAddr, err := generateObjectAddr(object)
411406
if err != nil {
412-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
407+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
413408
}
414409

415410
return w.checkAddrExistence(objectAddr)
@@ -430,28 +425,28 @@ func (w *WebAdminClient) checkAddrExistence(objectAddr string) error {
430425
func (w *WebAdminClient) UpdateObjectAddr(oldObject, newObject Object) error {
431426
oldObjectAddr, err := generateObjectAddr(oldObject)
432427
if err != nil {
433-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
428+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
434429
}
435430
newObjectAddr, err := generateObjectAddr(newObject)
436431
if err != nil {
437-
return newServerError(nil, errors.Errorf("failed to generate object address: %v", err))
432+
return newServerError(nil, fmt.Errorf("failed to generate object address: %w", err))
438433
}
439434

440435
if err = w.checkAddrExistence(oldObjectAddr); err != nil {
441-
return errors.Errorf("address doesn't exits: %v", err)
436+
return fmt.Errorf("address doesn't exits: %w", err)
442437
}
443438

444439
err = w.createAccount(newObject)
445-
if err != nil && errors.As(err, &ErrUserAlreadyExists) {
440+
if err != nil && errors.Is(err, ErrUserAlreadyExists) {
446441
return err
447442
}
448443

449444
r, err := w.UsersAPI.ChangeUsername(context.TODO(), oldObjectAddr, newObjectAddr).Execute()
450445
if err != nil {
451-
return newServerError(r, errors.Errorf("failed to change username: %v", err))
446+
return newServerError(r, fmt.Errorf("failed to change username: %w", err))
452447
}
453448
if r.StatusCode != http.StatusCreated {
454-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
449+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
455450
}
456451

457452
return nil
@@ -498,7 +493,7 @@ func (w *WebAdminClient) HealthCheck() (*apis.CheckAllComponents200Response, err
498493
}
499494

500495
if r.StatusCode != http.StatusOK {
501-
return nil, newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
496+
return nil, newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
502497
}
503498

504499
return checkAllComponentsResponse, nil
@@ -512,7 +507,7 @@ func (w *WebAdminClient) CreateDomains(domains ...string) error {
512507
}
513508

514509
if r.StatusCode != http.StatusNoContent {
515-
return newServerError(r, errors.Errorf("unknown error: status: %v", r.Status))
510+
return newServerError(r, fmt.Errorf("unknown error: status: %s", r.Status))
516511
}
517512
}
518513

0 commit comments

Comments
 (0)