Work on AP-ing media and extending likes and whatnot
All checks were successful
/ docker (push) Successful in 1m56s
All checks were successful
/ docker (push) Successful in 1m56s
Also added two fields to roles model, but haven't ran the various generators yet
This commit is contained in:
parent
1fcf47bffc
commit
81a01fbf8b
10 changed files with 59 additions and 4 deletions
|
@ -177,6 +177,12 @@ func importRemoteNoteRecursive(
|
||||||
// In which case, you need to remove tags that don't exist anymore
|
// In which case, you need to remove tags that don't exist anymore
|
||||||
// and only create the ones not yet stored
|
// and only create the ones not yet stored
|
||||||
err = dbgen.NoteToPing.Save(pings...)
|
err = dbgen.NoteToPing.Save(pings...)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
err = dbgen.NoteTag.Save(hashtags...)
|
err = dbgen.NoteTag.Save(hashtags...)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
return dbNote.ID, nil
|
return dbNote.ID, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,9 @@ package translators
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.mstar.dev/mstar/linstrom/config"
|
||||||
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -10,17 +12,39 @@ type Media struct {
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Url string `json:"url"`
|
Url string `json:"url"`
|
||||||
MediaType string `json:"mediaType"`
|
MediaType string `json:"mediaType"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Summary string `json:"summary"`
|
||||||
|
Sensitive bool `json:"sensitive"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func MediaFromStorage(ctx context.Context, id string) (*Media, error) {
|
func MediaFromStorage(ctx context.Context, id string) (*Media, error) {
|
||||||
metadata, err := dbgen.MediaMetadata.Where(dbgen.MediaMetadata.ID.Eq(id)).First()
|
metadata, err := dbgen.MediaMetadata.Where(dbgen.MediaMetadata.ID.Eq(id), dbgen.MediaMetadata.Remote.Is(false)).
|
||||||
|
First()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
data := Media{
|
data := Media{
|
||||||
Type: "Image", // FIXME: Change this to a sort of dynamic detection based on mimetype
|
|
||||||
MediaType: metadata.Type,
|
MediaType: metadata.Type,
|
||||||
Url: metadata.Location,
|
Url: config.GlobalConfig.General.GetFullPublicUrl() + "/media/" + id,
|
||||||
|
Name: metadata.AltText,
|
||||||
|
Summary: metadata.AltText,
|
||||||
|
Sensitive: metadata.Blurred,
|
||||||
|
}
|
||||||
|
switch strings.SplitN(metadata.Type, "/", 2)[0] {
|
||||||
|
case "audio":
|
||||||
|
data.Type = "Audio"
|
||||||
|
case "application":
|
||||||
|
data.Type = "Document"
|
||||||
|
case "image":
|
||||||
|
data.Type = "Image"
|
||||||
|
case "video":
|
||||||
|
data.Type = "Video"
|
||||||
|
case "text":
|
||||||
|
data.Type = "Document"
|
||||||
|
case "font":
|
||||||
|
data.Type = "Document"
|
||||||
|
default:
|
||||||
|
data.Type = "Document"
|
||||||
}
|
}
|
||||||
return &data, nil
|
return &data, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,9 @@ func UserFromStorage(ctx context.Context, id string) (*User, error) {
|
||||||
Preload(dbgen.User.Icon).Preload(dbgen.User.Banner).
|
Preload(dbgen.User.Icon).Preload(dbgen.User.Banner).
|
||||||
Preload(dbgen.User.BeingTypes).
|
Preload(dbgen.User.BeingTypes).
|
||||||
First()
|
First()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
err = storage.EnsureLocalUserIdHasLinks(id)
|
err = storage.EnsureLocalUserIdHasLinks(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -85,6 +85,9 @@ type Role struct {
|
||||||
HasMentionCountLimit *bool // Local & remote
|
HasMentionCountLimit *bool // Local & remote
|
||||||
MentionLimit *uint32 // Local & remote
|
MentionLimit *uint32 // Local & remote
|
||||||
|
|
||||||
|
MaxIndividualFileSize *uint64 // Local
|
||||||
|
MaxTotalFileSize *uint64 // Local
|
||||||
|
|
||||||
// CanViewBoosts *bool
|
// CanViewBoosts *bool
|
||||||
// CanViewQuotes *bool
|
// CanViewQuotes *bool
|
||||||
// CanViewMedia *bool
|
// CanViewMedia *bool
|
||||||
|
|
|
@ -42,6 +42,9 @@ var DefaultUserRole = Role{
|
||||||
uint32(math.MaxUint32),
|
uint32(math.MaxUint32),
|
||||||
), // Set this to max, even if not used due to *HasMentionCountLimit == false
|
), // Set this to max, even if not used due to *HasMentionCountLimit == false
|
||||||
|
|
||||||
|
MaxIndividualFileSize: other.IntoPointer(uint64(10 << 20)), // 10 MB
|
||||||
|
MaxTotalFileSize: other.IntoPointer(uint64(500 << 20)), // 500 MB
|
||||||
|
|
||||||
AutoNsfwMedia: other.IntoPointer(false),
|
AutoNsfwMedia: other.IntoPointer(false),
|
||||||
AutoCwPosts: other.IntoPointer(false),
|
AutoCwPosts: other.IntoPointer(false),
|
||||||
AutoCwPostsText: nil,
|
AutoCwPostsText: nil,
|
||||||
|
|
|
@ -122,6 +122,11 @@ func postAs(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = tx.NoteToPing.Create(dbPings...)
|
err = tx.NoteToPing.Create(dbPings...)
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Msg("Failed to create note pings in db")
|
||||||
|
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
activity := models.Activity{
|
activity := models.Activity{
|
||||||
Id: shared.NewId(),
|
Id: shared.NewId(),
|
||||||
Type: string(models.ActivityCreate),
|
Type: string(models.ActivityCreate),
|
||||||
|
|
|
@ -1 +1,5 @@
|
||||||
package activitypub
|
package activitypub
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
func activityLike(w http.ResponseWriter, r *http.Request) {}
|
||||||
|
|
5
web/public/api/activitypub/objectEmote.go
Normal file
5
web/public/api/activitypub/objectEmote.go
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package activitypub
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
func objectEmote(w http.ResponseWriter, r *http.Request) {}
|
|
@ -16,7 +16,9 @@ func BuildActivitypubRouter() http.Handler {
|
||||||
router.HandleFunc("GET /activity/reject/{id}", activityReject)
|
router.HandleFunc("GET /activity/reject/{id}", activityReject)
|
||||||
router.HandleFunc("GET /activity/update/{id}", activityUpdate)
|
router.HandleFunc("GET /activity/update/{id}", activityUpdate)
|
||||||
router.HandleFunc("GET /activity/follow/{id}", activityFollow)
|
router.HandleFunc("GET /activity/follow/{id}", activityFollow)
|
||||||
|
router.HandleFunc("GET /activity/like/{id}", activityLike)
|
||||||
router.HandleFunc("GET /note/{id}", objectNote)
|
router.HandleFunc("GET /note/{id}", objectNote)
|
||||||
router.HandleFunc("GET /note/{id}/reactions", noteReactions)
|
router.HandleFunc("GET /note/{id}/reactions", noteReactions)
|
||||||
|
router.HandleFunc("GET /emote/{id}", objectEmote)
|
||||||
return router
|
return router
|
||||||
}
|
}
|
||||||
|
|
|
@ -236,7 +236,7 @@ func postPostRequest(resp *http.Response, reqErr error, dbId uint64) {
|
||||||
// If response status is ok (< 400) delete entry in db to not process it again
|
// If response status is ok (< 400) delete entry in db to not process it again
|
||||||
if resp.StatusCode < 400 {
|
if resp.StatusCode < 400 {
|
||||||
update = false
|
update = false
|
||||||
fr.Where(fr.Id.Eq(dbId)).Delete()
|
_, _ = fr.Where(fr.Id.Eq(dbId)).Delete()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if resp.StatusCode == 429 {
|
if resp.StatusCode == 429 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue