Author: Adam <git@apiote.tk>
simplify throwing errors in avatar
go.mod | 6 +++--- go.sum | 6 ++++++ libamuse/user.go | 28 +++++++++++++++-------------
diff --git a/go.mod b/go.mod index 227d73aae71f96ac7b82591e5d3c67d6ebb9552b..68d11258d15083bcd37c492c9302341962ea31de 100644 --- a/go.mod +++ b/go.mod @@ -19,11 +19,11 @@ github.com/pkg/errors v0.9.1 // indirect github.com/pquerna/otp v1.2.0 github.com/sirupsen/logrus v1.5.0 // indirect github.com/stretchr/testify v1.4.0 // indirect - golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a + golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5 golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f // indirect golang.org/x/text v0.3.2 - golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e // indirect + golang.org/x/tools v0.0.0-20200423205358-59e73619c742 // indirect gopkg.in/yaml.v2 v2.2.8 // indirect - notabug.org/apiote/gott v1.1.1 + notabug.org/apiote/gott v1.1.2 zombiezen.com/go/capnproto2 v2.17.0+incompatible ) diff --git a/go.sum b/go.sum index 8ad83aeefd3a0d5dc3480ef19d3920df1035966a..b7b9fcb0594cf4bd5aec5328db2464e8f8b68088 100644 --- a/go.sum +++ b/go.sum @@ -100,6 +100,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a h1:y6sBfNd1b9Wy08a6K1Z1DZc4aXABUN5TKjkYhz7UKmo= golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5 h1:Q7tZBpemrlsc2I7IyODzhtallWRSm4Q0d09pL6XbQtU= +golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -138,6 +140,8 @@ golang.org/x/tools v0.0.0-20191220234730-f13409bbebaf h1:K7C8vSrr0PeD/cgNkkjpByDFJqzjr2YDmm3VPRjGfJM= golang.org/x/tools v0.0.0-20191220234730-f13409bbebaf/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e h1:3Dzrrxi54Io7Aoyb0PYLsI47K2TxkRQg+cqUn+m04do= golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200423205358-59e73619c742 h1:9OGWpORUXvk8AsaBJlpzzDx7Srv/rSK6rvjcsJq4rJo= +golang.org/x/tools v0.0.0-20200423205358-59e73619c742/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= @@ -160,5 +164,7 @@ notabug.org/apiote/gott v1.1.0 h1:RGGbJo9ON5Qsk/lsw0oF1tiyFeogORINGILqizbdkC8= notabug.org/apiote/gott v1.1.0/go.mod h1:Z9hFvCdzZkFSegBkLa6n0X6AuUiw2BwgG4MFLgBMjD4= notabug.org/apiote/gott v1.1.1 h1:BFKdZnZPCTZa8BrEGVSmMYhkgXD30aR9JBPcxMw1Rnc= notabug.org/apiote/gott v1.1.1/go.mod h1:Z9hFvCdzZkFSegBkLa6n0X6AuUiw2BwgG4MFLgBMjD4= +notabug.org/apiote/gott v1.1.2 h1:Z22X9/8XrK5M5oARoE2fh3sJGPAJ84GuyGg2nKOjweQ= +notabug.org/apiote/gott v1.1.2/go.mod h1:Z9hFvCdzZkFSegBkLa6n0X6AuUiw2BwgG4MFLgBMjD4= zombiezen.com/go/capnproto2 v2.17.0+incompatible h1:sIoKPFGNlM38Qh+PBLa9Wzg1j99oInS/Qlk+5N/CHa4= zombiezen.com/go/capnproto2 v2.17.0+incompatible/go.mod h1:XO5Pr2SbXgqZwn0m0Ru54QBqpOf4K5AYBO+8LAOBQEQ= diff --git a/libamuse/user.go b/libamuse/user.go index 49103246ec3356455c7cc09e7ed1c60a9b69650b..3c26306818b7c84cfae7179c873a43b9b234ee8a 100644 --- a/libamuse/user.go +++ b/libamuse/user.go @@ -84,6 +84,16 @@ result.Result = result.Body return gott.Tuple(args) } +func recovery(args ...interface{}) (interface{}, error) { + err := args[3].(error) + switch err.Error() { + case "No avatar": + return getPlaceholder(args...) + default: + return gott.Tuple(args), err + } +} + func getPlaceholder(args ...interface{}) (interface{}, error) { request := args[0].(*RequestData) result := args[1].(*Result) @@ -110,25 +120,17 @@ return gott.Tuple(args), nil } func ShowUserAvatar(username, etagReq string, auth accounts.Authentication, small bool) (Avatar, error) { + auth.Necessary = true avatar := Avatar{} - user, err := VerifyAuthToken(auth) - if err != nil { - return avatar, err - } - if user.Username == "" { - return avatar, accounts.AuthError{Err: errors.New("401")} - } - if user.Username != username { - return avatar, accounts.AuthError{Err: errors.New("403")} - } - r, err := gott. - NewResult(gott.Tuple{&RequestData{id: username, etag: etagReq, auth: auth}, &Result{}, small}). + NewResult(gott.Tuple{&RequestData{id: username, etag: etagReq, auth: auth, username: username}, &Result{}, small}). + Bind(verifyToken). + Bind(verifyUser). Bind(getUser). Bind(getAvatar). Bind(checkEtag). - Recover(getPlaceholder). + Recover(recovery). Finish() if err != nil {