kopia lustrzana https://github.com/reiver/greatape
50 wiersze
1.1 KiB
Go
50 wiersze
1.1 KiB
Go
package routes
|
|
|
|
import (
|
|
"app/models/domain"
|
|
"app/models/repos"
|
|
"config"
|
|
"contracts"
|
|
"server/route"
|
|
)
|
|
|
|
var User = route.New(contracts.HttpGet, "/u/:username", func(x contracts.IContext) error {
|
|
username := domain.Username(x.Request().Params("username"))
|
|
if username.IsEmpty() {
|
|
return x.BadRequest("username required.")
|
|
}
|
|
|
|
if username.IsFederated() {
|
|
webfinger, err := x.GetWebFinger(username)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
actor, err := x.GetActor(webfinger)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return x.Activity(actor)
|
|
} else {
|
|
user, err := repos.FindUserByUsername(username.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
str := x.StringUtil()
|
|
actor := createActor(user)
|
|
if x.Request().AcceptsActivityStream() {
|
|
return x.Activity(actor)
|
|
} else if config.ExternalClient() {
|
|
return x.Redirect(str.Format("%s://%s/u/%s", config.PROTOCOL, config.CLIENT_DOMAIN, user.Username))
|
|
} else {
|
|
return x.Render("user", contracts.ViewData{
|
|
"Title": str.Format("%s's Public Profile", user.DisplayName),
|
|
"Username": user.Username,
|
|
"Actor": actor,
|
|
})
|
|
}
|
|
}
|
|
})
|