ActivityPub/utils/requestChecker.go

90 lines
2.3 KiB
Go
Raw Normal View History

2020-10-17 10:13:15 +00:00
package utils
import (
"bytes"
"errors"
"fmt"
"net/http"
"strings"
"git.nutfactory.org/hoernschen/ActivityPub/config"
)
type ErrorResponse struct {
ErrorCode string `json:"errcode,omitempty"`
ErrorMessage string `json:"error,omitempty"`
RetryTime int `json:"retry_after_ms,omitempty"`
}
func CheckRequest(r *http.Request) (err error) {
if !strings.Contains(r.Header.Get("Content-Type"), "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") {
err = errors.New("Content Type not JSON")
}
return
}
func GetContentTypeString() string {
return "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\""
}
func GetDefaultContext() string {
return "https://www.w3.org/ns/activitystreams"
}
func GenerateProfileUrl(userId string) string {
return fmt.Sprintf("%s://%s/%s/", config.HttpString, config.Homeserver, userId)
}
func GenerateInboxUrl(userId string) string {
return fmt.Sprintf("%s://%s/%s/inbox/", config.HttpString, config.Homeserver, userId)
}
func GenerateOutboxUrl(userId string) string {
return fmt.Sprintf("%s://%s/%s/outbox/", config.HttpString, config.Homeserver, userId)
}
func GenerateFollowersUrl(userId string) string {
return fmt.Sprintf("%s://%s/%s/followers/", config.HttpString, config.Homeserver, userId)
}
func GenerateFollowingUrl(userId string) string {
return fmt.Sprintf("%s://%s/%s/following/", config.HttpString, config.Homeserver, userId)
}
func GenerateLikedUrl(userId string) string {
return fmt.Sprintf("%s://%s/%s/liked/", config.HttpString, config.Homeserver, userId)
}
func GetAccessToken(r *http.Request) (token string, err error) {
token = r.URL.Query().Get("access_token")
if token == "" {
token = r.Header.Get("Authorization")
if token == "" || !strings.Contains(token, "Bearer") {
err = errors.New("Missing Token")
} else {
token = strings.Split(token, " ")[1]
}
}
return
}
func HandleHTTPError(res *http.Response) (err error) {
buf := new(bytes.Buffer)
buf.ReadFrom(res.Body)
err = errors.New(fmt.Sprintf("%s (%s)", buf.String(), res.Status))
return
}
func RemoveDuplicates(array []string) []string {
keys := make(map[string]bool)
list := []string{}
for _, entry := range array {
if _, value := keys[entry]; !value {
keys[entry] = true
list = append(list, entry)
}
}
return list
}