You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.6 KiB
110 lines
2.6 KiB
package apmodels |
|
|
|
import ( |
|
"encoding/json" |
|
"net/url" |
|
"path" |
|
"path/filepath" |
|
|
|
"github.com/go-fed/activity/streams" |
|
"github.com/go-fed/activity/streams/vocab" |
|
"github.com/owncast/owncast/core/data" |
|
log "github.com/sirupsen/logrus" |
|
) |
|
|
|
// MakeRemoteIRIForResource will create an IRI for a remote location. |
|
func MakeRemoteIRIForResource(resourcePath string, host string) (*url.URL, error) { |
|
generatedURL := "https://" + host |
|
u, err := url.Parse(generatedURL) |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
u.Path = path.Join(u.Path, "federation", resourcePath) |
|
|
|
return u, nil |
|
} |
|
|
|
// MakeLocalIRIForResource will create an IRI for the local server. |
|
func MakeLocalIRIForResource(resourcePath string) *url.URL { |
|
host := data.GetServerURL() |
|
u, err := url.Parse(host) |
|
if err != nil { |
|
log.Errorln("unable to parse local IRI url", host, err) |
|
return nil |
|
} |
|
|
|
u.Path = path.Join(u.Path, "federation", resourcePath) |
|
|
|
return u |
|
} |
|
|
|
// MakeLocalIRIForAccount will return a full IRI for the local server account username. |
|
func MakeLocalIRIForAccount(account string) *url.URL { |
|
host := data.GetServerURL() |
|
u, err := url.Parse(host) |
|
if err != nil { |
|
log.Errorln("unable to parse local IRI account server url", err) |
|
return nil |
|
} |
|
|
|
u.Path = path.Join(u.Path, "federation", "user", account) |
|
|
|
return u |
|
} |
|
|
|
// Serialize will serialize an ActivityPub object to a byte slice. |
|
func Serialize(obj vocab.Type) ([]byte, error) { |
|
var jsonmap map[string]interface{} |
|
jsonmap, _ = streams.Serialize(obj) |
|
b, err := json.Marshal(jsonmap) |
|
|
|
return b, err |
|
} |
|
|
|
// MakeLocalIRIForStreamURL will return a full IRI for the local server stream url. |
|
func MakeLocalIRIForStreamURL() *url.URL { |
|
host := data.GetServerURL() |
|
u, err := url.Parse(host) |
|
if err != nil { |
|
log.Errorln("unable to parse local IRI stream url", err) |
|
return nil |
|
} |
|
|
|
u.Path = path.Join(u.Path, "/hls/stream.m3u8") |
|
|
|
return u |
|
} |
|
|
|
// MakeLocalIRIforLogo will return a full IRI for the local server logo. |
|
func MakeLocalIRIforLogo() *url.URL { |
|
host := data.GetServerURL() |
|
u, err := url.Parse(host) |
|
if err != nil { |
|
log.Errorln("unable to parse local IRI stream url", err) |
|
return nil |
|
} |
|
|
|
u.Path = path.Join(u.Path, "/logo/external") |
|
|
|
return u |
|
} |
|
|
|
// GetLogoType will return the rel value for the webfinger response and |
|
// the default static image is of type png. |
|
func GetLogoType() string { |
|
imageFilename := data.GetLogoPath() |
|
if imageFilename == "" { |
|
return "image/png" |
|
} |
|
|
|
logoType := "image/jpeg" |
|
if filepath.Ext(imageFilename) == ".svg" { |
|
logoType = "image/svg+xml" |
|
} else if filepath.Ext(imageFilename) == ".gif" { |
|
logoType = "image/gif" |
|
} else if filepath.Ext(imageFilename) == ".png" { |
|
logoType = "image/png" |
|
} |
|
return logoType |
|
}
|
|
|