Compare commits
18 Commits
8adb2897bf
...
671f802894
Author | SHA1 | Date |
---|---|---|
erik | 671f802894 | 6 months ago |
erik | b981f2e5d5 | 6 months ago |
erik | fec580597a | 6 months ago |
erik | 33b63b21fe | 6 months ago |
erik | 4de3f080fb | 6 months ago |
erik | 5fd8b184be | 6 months ago |
erik | 7dba0e85dd | 6 months ago |
erik | 33781a7140 | 6 months ago |
erik | eb28e4deca | 6 months ago |
erik | 8e1c0a8cf8 | 6 months ago |
erik | b875bf47f4 | 6 months ago |
erik | 3af7539236 | 6 months ago |
erik | a35ec28326 | 6 months ago |
erik | 98b65baa2d | 6 months ago |
Michael Jerger | d4348946dd | 6 months ago |
Michael Jerger | 546cafade8 | 6 months ago |
Michael Jerger | 2e9d0ed135 | 6 months ago |
erik | 105f14641e | 6 months ago |
@ -0,0 +1,49 @@
|
||||
package activitypub
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type ActorData struct {
|
||||
schema string
|
||||
userId string
|
||||
path string
|
||||
host string
|
||||
port string // optional
|
||||
}
|
||||
|
||||
func (a ActorData) ValidateActorData() error {
|
||||
|
||||
if a.schema == "" || a.host == "" {
|
||||
return fmt.Errorf("the actor ID was not valid: Invalid Schema or Host")
|
||||
}
|
||||
|
||||
if !strings.Contains(a.path, "api/v1/activitypub/user-id") {
|
||||
return fmt.Errorf("the Path to the API was invalid: %v", a.path)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func ParseActorData(actor string) (ActorData, error) {
|
||||
u, err := url.Parse(actor)
|
||||
|
||||
// check if userID IRI is well formed url
|
||||
if err != nil {
|
||||
return ActorData{}, fmt.Errorf("the actor ID was not a valid IRI: %v", err)
|
||||
}
|
||||
|
||||
pathWithUserID := strings.Split(u.Path, "/")
|
||||
userId := pathWithUserID[len(pathWithUserID)-1]
|
||||
|
||||
return ActorData{
|
||||
schema: u.Scheme,
|
||||
userId: userId,
|
||||
host: u.Host,
|
||||
path: u.Path,
|
||||
port: u.Port(),
|
||||
}, nil
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
// Copyright 2023 The forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package activitypub
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_ActorParser(t *testing.T) {
|
||||
type testPair struct {
|
||||
item string
|
||||
want ActorData
|
||||
}
|
||||
|
||||
tests := map[string]testPair{
|
||||
"empty": {
|
||||
item: "",
|
||||
want: ActorData{},
|
||||
},
|
||||
"withValidActorID": {
|
||||
item: "https://repo.prod.meissa.de/api/v1/activitypub/user-id/1",
|
||||
want: ActorData{
|
||||
schema: "https",
|
||||
userId: "1",
|
||||
path: "/api/v1/activitypub/user-id/1",
|
||||
host: "repo.prod.meissa.de",
|
||||
port: "",
|
||||
},
|
||||
},
|
||||
"withInvalidActorID": {
|
||||
item: "https://repo.prod.meissa.de/api/activitypub/user-id/1",
|
||||
want: ActorData{
|
||||
schema: "https",
|
||||
userId: "1",
|
||||
path: "/api/v1/activitypub/user-id/1",
|
||||
host: "repo.prod.meissa.de",
|
||||
port: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for name, _ := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
_, err := ParseActorData(tests[name].item)
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("parseActor() error = \"%v\"", err)
|
||||
return
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue