summaryrefslogtreecommitdiff
path: root/internal/api/s2s/user/common.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2021-09-16 11:35:09 +0200
committerLibravatar GitHub <noreply@github.com>2021-09-16 11:35:09 +0200
commit92186c8c6f1c374146f085b46a440b69a1d97aa8 (patch)
tree06d7aea58ee399c4939ffa9052bcc548427cbfa4 /internal/api/s2s/user/common.go
parentFix mentions not notifying (#230) (diff)
downloadgotosocial-92186c8c6f1c374146f085b46a440b69a1d97aa8.tar.xz
federated authentication better logging + tidying (#232)
* change trace logging in authenticator * messing about * lil changes * go fmt * error fix * Fix broken test
Diffstat (limited to 'internal/api/s2s/user/common.go')
-rw-r--r--internal/api/s2s/user/common.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/internal/api/s2s/user/common.go b/internal/api/s2s/user/common.go
new file mode 100644
index 000000000..8a3846901
--- /dev/null
+++ b/internal/api/s2s/user/common.go
@@ -0,0 +1,59 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package user
+
+import (
+ "context"
+ "fmt"
+
+ "github.com/gin-gonic/gin"
+ "github.com/superseriousbusiness/gotosocial/internal/util"
+)
+
+// ActivityPubAcceptHeaders represents the Accept headers mentioned here:
+// https://www.w3.org/TR/activitypub/#retrieving-objects
+var ActivityPubAcceptHeaders = []string{
+ `application/activity+json`,
+ `application/ld+json; profile="https://www.w3.org/ns/activitystreams"`,
+}
+
+// populateContext transfers the signature verifier and signature from the gin context to the request context
+func populateContext(c *gin.Context) context.Context {
+ ctx := c.Request.Context()
+
+ verifier, signed := c.Get(string(util.APRequestingPublicKeyVerifier))
+ if signed {
+ ctx = context.WithValue(ctx, util.APRequestingPublicKeyVerifier, verifier)
+ }
+
+ signature, signed := c.Get(string(util.APRequestingPublicKeySignature))
+ if signed {
+ ctx = context.WithValue(ctx, util.APRequestingPublicKeySignature, signature)
+ }
+
+ return ctx
+}
+
+func negotiateFormat(c *gin.Context) (string, error) {
+ format := c.NegotiateFormat(ActivityPubAcceptHeaders...)
+ if format == "" {
+ return "", fmt.Errorf("no format can be offered for Accept headers %s", c.Request.Header.Get("Accept"))
+ }
+ return format, nil
+}