amuse.git

commit 7a046688e386b68e5f7442fb07ab702628af2fbf

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 {