mirror of
https://github.com/owncast/owncast.git
synced 2024-11-21 20:28:15 +03:00
Extending webfinger response (issue:2851) (#3053)
* Extending webfinger response #2851 1. Added Logo - rel: avatar as there wasn't any appropriate value in [Link relations registry](https://www.iana.org/assignments/link-relations/) - type: default value image/png or else it is determined file type extension 2. Added Stream - rel: stream as there wasn't appropriate value in [Link relations registry](https://www.iana.org/assignments/link-relations/) - type: video/H264 based on [IANA media types](https://www.iana.org/assignments/media-types/media-types.xhtml#video) Changes after review: 1. Updated the rel type for avatar based on webfinger rel. 2. Updated the rel type for stream link and href value that closely associates to it. * adding period after comments * updating typo
This commit is contained in:
parent
c295e4f215
commit
1ed51859b0
2 changed files with 61 additions and 1 deletions
|
@ -4,6 +4,7 @@ import (
|
|||
"encoding/json"
|
||||
"net/url"
|
||||
"path"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/go-fed/activity/streams"
|
||||
"github.com/go-fed/activity/streams/vocab"
|
||||
|
@ -60,3 +61,50 @@ func Serialize(obj vocab.Type) ([]byte, error) {
|
|||
|
||||
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
|
||||
}
|
||||
|
|
|
@ -26,7 +26,9 @@ type Link struct {
|
|||
// MakeWebfingerResponse will create a new Webfinger response.
|
||||
func MakeWebfingerResponse(account string, inbox string, host string) WebfingerResponse {
|
||||
accountIRI := MakeLocalIRIForAccount(account)
|
||||
|
||||
streamIRI := MakeLocalIRIForStreamURL()
|
||||
logoIRI := MakeLocalIRIforLogo()
|
||||
logoType := GetLogoType()
|
||||
return WebfingerResponse{
|
||||
Subject: fmt.Sprintf("acct:%s@%s", account, host),
|
||||
Aliases: []string{
|
||||
|
@ -43,6 +45,16 @@ func MakeWebfingerResponse(account string, inbox string, host string) WebfingerR
|
|||
Type: "text/html",
|
||||
Href: accountIRI.String(),
|
||||
},
|
||||
{
|
||||
Rel: "http://webfinger.net/rel/avatar",
|
||||
Type: logoType,
|
||||
Href: logoIRI.String(),
|
||||
},
|
||||
{
|
||||
Rel: "alternate",
|
||||
Type: "application/x-mpegURL",
|
||||
Href: streamIRI.String(),
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue