Add more fields to user
This commit is contained in:
parent
495b7aead2
commit
da518345d5
3 changed files with 71 additions and 4 deletions
2
go.mod
2
go.mod
|
@ -5,7 +5,7 @@ go 1.23.0
|
||||||
toolchain go1.23.7
|
toolchain go1.23.7
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.mstar.dev/mstar/goutils v1.12.2
|
git.mstar.dev/mstar/goutils v1.12.3
|
||||||
github.com/BurntSushi/toml v1.4.0
|
github.com/BurntSushi/toml v1.4.0
|
||||||
github.com/dgraph-io/ristretto v0.2.0
|
github.com/dgraph-io/ristretto v0.2.0
|
||||||
github.com/eko/gocache/lib/v4 v4.1.6
|
github.com/eko/gocache/lib/v4 v4.1.6
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -63,6 +63,8 @@ git.mstar.dev/mstar/goutils v1.12.1 h1:HZKKzMNfx7JKSUi5s8SwwUFEqEX6xvkM6NMf+Pht+
|
||||||
git.mstar.dev/mstar/goutils v1.12.1/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
git.mstar.dev/mstar/goutils v1.12.1/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
||||||
git.mstar.dev/mstar/goutils v1.12.2 h1:twCnsl+WRgP52mV5D5FRVJK6Yst1/3VtulHd77U++BY=
|
git.mstar.dev/mstar/goutils v1.12.2 h1:twCnsl+WRgP52mV5D5FRVJK6Yst1/3VtulHd77U++BY=
|
||||||
git.mstar.dev/mstar/goutils v1.12.2/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
git.mstar.dev/mstar/goutils v1.12.2/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
||||||
|
git.mstar.dev/mstar/goutils v1.12.3 h1:Wx7i8/a99Cp+Y/XcXgqQr0r9cSsJu7QkWBlKyprTH44=
|
||||||
|
git.mstar.dev/mstar/goutils v1.12.3/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
||||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
|
|
|
@ -8,17 +8,61 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
webutils "git.mstar.dev/mstar/goutils/http"
|
webutils "git.mstar.dev/mstar/goutils/http"
|
||||||
|
"git.mstar.dev/mstar/goutils/other"
|
||||||
|
"git.mstar.dev/mstar/goutils/sliceutils"
|
||||||
"github.com/rs/zerolog/hlog"
|
"github.com/rs/zerolog/hlog"
|
||||||
|
|
||||||
"git.mstar.dev/mstar/linstrom/config"
|
"git.mstar.dev/mstar/linstrom/config"
|
||||||
"git.mstar.dev/mstar/linstrom/storage-new"
|
"git.mstar.dev/mstar/linstrom/storage-new"
|
||||||
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
||||||
|
"git.mstar.dev/mstar/linstrom/storage-new/models"
|
||||||
webshared "git.mstar.dev/mstar/linstrom/web/shared"
|
webshared "git.mstar.dev/mstar/linstrom/web/shared"
|
||||||
)
|
)
|
||||||
|
|
||||||
var baseLdContext = []any{
|
var baseLdContext = []any{
|
||||||
"https://www.w3.org/ns/activitystreams",
|
"https://www.w3.org/ns/activitystreams",
|
||||||
"https://w3id.org/security/v1",
|
"https://w3id.org/security/v1",
|
||||||
|
map[string]any{
|
||||||
|
"Key": "sec:Key",
|
||||||
|
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
|
||||||
|
"sensitive": "as:sensitive",
|
||||||
|
"Hashtag": "as:Hashtag",
|
||||||
|
"quoteUrl": "as:quoteUrl",
|
||||||
|
"fedibird": "http://fedibird.com/ns#",
|
||||||
|
"quoteUri": "fedibird:quoteUri",
|
||||||
|
"toot": "http://joinmastodon.org/ns#",
|
||||||
|
"Emoji": "toot:Emoji",
|
||||||
|
"featured": "toot:featured",
|
||||||
|
"discoverable": "toot:discoverable",
|
||||||
|
"indexable": "toot:indexable",
|
||||||
|
"schema": "http://schema.org#",
|
||||||
|
"PropertyValue": "schema:PropertyValue",
|
||||||
|
"value": "schema:value",
|
||||||
|
"misskey": "https://misskey-hub.net/ns#",
|
||||||
|
"_misskey_content": "misskey:_misskey_content",
|
||||||
|
"_misskey_quote": "misskey:_misskey_quote",
|
||||||
|
"_misskey_reaction": "misskey:_misskey_reaction",
|
||||||
|
"_misskey_votes": "misskey:_misskey_votes",
|
||||||
|
"_misskey_summary": "misskey:_misskey_summary",
|
||||||
|
"_misskey_followedMessage": "misskey:_misskey_followedMessage",
|
||||||
|
"_misskey_requireSigninToViewContents": "misskey:_misskey_requireSigninToViewContents",
|
||||||
|
"_misskey_makeNotesFollowersOnlyBefore": "misskey:_misskey_makeNotesFollowersOnlyBefore",
|
||||||
|
"_misskey_makeNotesHiddenBefore": "misskey:_misskey_makeNotesHiddenBefore",
|
||||||
|
"_misskey_license": "misskey:_misskey_license",
|
||||||
|
"freeText": map[string]string{
|
||||||
|
"@id": "misskey:freeText",
|
||||||
|
"@type": "schema:text",
|
||||||
|
},
|
||||||
|
"isCat": "misskey:isCat",
|
||||||
|
"firefish": "https://joinfirefish.org/ns#",
|
||||||
|
"speakAsCat": "firefish:speakAsCat",
|
||||||
|
"sharkey": "https://joinsharkey.org/ns#",
|
||||||
|
"hideOnlineStatus": "sharkey:hideOnlineStatus",
|
||||||
|
"backgroundUrl": "sharkey:backgroundUrl",
|
||||||
|
"listenbrainz": "sharkey:listenbrainz",
|
||||||
|
"enableRss": "sharkey:enableRss",
|
||||||
|
"vcard": "http://www.w3.org/2006/vcard/ns#",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func users(w http.ResponseWriter, r *http.Request) {
|
func users(w http.ResponseWriter, r *http.Request) {
|
||||||
|
@ -45,11 +89,18 @@ func users(w http.ResponseWriter, r *http.Request) {
|
||||||
PublicUrl string `json:"url"`
|
PublicUrl string `json:"url"`
|
||||||
Icon *OutboundMedia `json:"icon,omitempty"`
|
Icon *OutboundMedia `json:"icon,omitempty"`
|
||||||
Banner *OutboundMedia `json:"image,omitempty"`
|
Banner *OutboundMedia `json:"image,omitempty"`
|
||||||
|
Discoverable bool `json:"discoverable"`
|
||||||
|
Location *string `json:"vcard:Address,omitempty"`
|
||||||
|
Birthday *string `json:"vcard:bday,omitempty"`
|
||||||
|
SpeakAsCat bool `json:"speakAsCat"`
|
||||||
|
IsCat bool `json:"isCat"`
|
||||||
|
RestrictedFollow bool `json:"manuallyApprovesFollowers"`
|
||||||
}
|
}
|
||||||
log := hlog.FromRequest(r)
|
log := hlog.FromRequest(r)
|
||||||
userId := r.PathValue("id")
|
userId := r.PathValue("id")
|
||||||
user, err := dbgen.User.Where(dbgen.User.ID.Eq(userId)).
|
user, err := dbgen.User.Where(dbgen.User.ID.Eq(userId)).
|
||||||
Preload(dbgen.User.Icon).Preload(dbgen.User.Banner).
|
Preload(dbgen.User.Icon).Preload(dbgen.User.Banner).
|
||||||
|
Preload(dbgen.User.BeingTypes).
|
||||||
First()
|
First()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
webutils.ProblemDetails(w, 500, "/errors/db-failure", "internal database failure", nil, nil)
|
webutils.ProblemDetails(w, 500, "/errors/db-failure", "internal database failure", nil, nil)
|
||||||
|
@ -82,6 +133,8 @@ func users(w http.ResponseWriter, r *http.Request) {
|
||||||
Published: user.CreatedAt,
|
Published: user.CreatedAt,
|
||||||
DisplayName: user.DisplayName,
|
DisplayName: user.DisplayName,
|
||||||
PublicUrl: config.GlobalConfig.General.GetFullPublicUrl() + "/user/" + user.Username,
|
PublicUrl: config.GlobalConfig.General.GetFullPublicUrl() + "/user/" + user.Username,
|
||||||
|
Discoverable: user.Indexable,
|
||||||
|
RestrictedFollow: user.RestrictedFollow,
|
||||||
}
|
}
|
||||||
if user.Description != "" {
|
if user.Description != "" {
|
||||||
data.Description = &user.Description
|
data.Description = &user.Description
|
||||||
|
@ -102,6 +155,18 @@ func users(w http.ResponseWriter, r *http.Request) {
|
||||||
MediaType: user.Banner.Type,
|
MediaType: user.Banner.Type,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if sliceutils.ContainsFunc(user.BeingTypes, func(t models.UserToBeing) bool {
|
||||||
|
return t.Being == models.BEING_CAT
|
||||||
|
}) {
|
||||||
|
data.IsCat = true
|
||||||
|
// data.SpeakAsCat = true // TODO: Move to check of separate field in db model
|
||||||
|
}
|
||||||
|
if user.Location.Valid {
|
||||||
|
data.Location = &user.Location.String
|
||||||
|
}
|
||||||
|
if user.Birthday.Valid {
|
||||||
|
data.Birthday = other.IntoPointer(user.Birthday.Time.Format("2006-Jan-02")) //YYYY-Month-DD
|
||||||
|
}
|
||||||
|
|
||||||
encoded, err := json.Marshal(data)
|
encoded, err := json.Marshal(data)
|
||||||
w.Header().Add("Content-Type", "application/activity+json")
|
w.Header().Add("Content-Type", "application/activity+json")
|
||||||
|
|
Loading…
Reference in a new issue