From 85f010b8959803310de6044ef4b0ede322e99b48 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Sun, 8 Nov 2020 23:04:32 +0100 Subject: [PATCH] Add Delete support to activitypub --- activityPub.go | 33 ++++++++++++++++++++++++--------- go.mod | 2 +- go.sum | 4 ++-- postsDb.go | 17 ++++++++++++----- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/activityPub.go b/activityPub.go index 1d727d0..3528a95 100644 --- a/activityPub.go +++ b/activityPub.go @@ -219,15 +219,18 @@ func apRemoveFollower(blog, follower string) error { } func apPost(p *post) { + if !appConfig.ActivityPub.Enabled { + return + } n := p.toASNote() - create := make(map[string]interface{}) - create["@context"] = asContext - create["actor"] = appConfig.Blogs[p.Blog].apIri() - create["id"] = appConfig.Server.PublicAddress + p.Path - create["published"] = n.Published - create["type"] = "Create" - create["object"] = n - apSendToAllFollowers(p.Blog, create) + createActivity := make(map[string]interface{}) + createActivity["@context"] = asContext + createActivity["actor"] = appConfig.Blogs[p.Blog].apIri() + createActivity["id"] = appConfig.Server.PublicAddress + p.Path + createActivity["published"] = n.Published + createActivity["type"] = "Create" + createActivity["object"] = n + apSendToAllFollowers(p.Blog, createActivity) } func apUpdate(p *post) { @@ -235,7 +238,19 @@ func apUpdate(p *post) { } func apDelete(p *post) { - // TODO + if !appConfig.ActivityPub.Enabled { + return + } + deleteActivity := make(map[string]interface{}) + deleteActivity["@context"] = asContext + deleteActivity["actor"] = appConfig.Blogs[p.Blog].apIri() + deleteActivity["id"] = appConfig.Server.PublicAddress + p.Path + "#delete" + deleteActivity["type"] = "Delete" + deleteActivity["object"] = map[string]string{ + "id": appConfig.Server.PublicAddress + p.Path, + "type": "Tombstone", + } + apSendToAllFollowers(p.Blog, deleteActivity) } func apAccept(blogName string, blog *configBlog, follow map[string]interface{}) { diff --git a/go.mod b/go.mod index 9ed3366..049b496 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 // indirect golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 - golang.org/x/sys v0.0.0-20201106081118-db71ae66460a // indirect + golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf // indirect golang.org/x/text v0.3.4 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect diff --git a/go.sum b/go.sum index 6d55f10..2786584 100644 --- a/go.sum +++ b/go.sum @@ -574,8 +574,8 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c h1:UIcGWL6/wpCfyGuJnRFJRurA+yj8RrW7Q6x2YMCXt6c= golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201106081118-db71ae66460a h1:ALUFBKlIyeY7y5ZgPJmblk/vKz+zBQSnNiPkt41sgeg= -golang.org/x/sys v0.0.0-20201106081118-db71ae66460a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf h1:kt3wY1Lu5MJAnKTfoMR52Cu4gwvna4VTzNOiT8tY73s= +golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= diff --git a/postsDb.go b/postsDb.go index 2f2727c..66c7038 100644 --- a/postsDb.go +++ b/postsDb.go @@ -147,7 +147,7 @@ func (p *post) createOrReplace(new bool) error { return err } finishWritingToDb() - go purgeCache() + purgeCache() defer func(p *post) { postPostHooks(p.Path) go apPost(p) @@ -159,19 +159,23 @@ func deletePost(path string) error { if path == "" { return nil } + p, err := getPost(path) + if err != nil { + return err + } startWritingToDb() tx, err := appDb.Begin() if err != nil { finishWritingToDb() return err } - _, err = tx.Exec("delete from posts where path=?", path) + _, err = tx.Exec("delete from posts where path=?", p.Path) if err != nil { _ = tx.Rollback() finishWritingToDb() return err } - _, err = tx.Exec("delete from post_parameters where path=?", path) + _, err = tx.Exec("delete from post_parameters where path=?", p.Path) if err != nil { _ = tx.Rollback() finishWritingToDb() @@ -183,7 +187,10 @@ func deletePost(path string) error { return err } finishWritingToDb() - go purgeCache() - defer postDeleteHooks(path) + purgeCache() + defer func(p *post) { + postDeleteHooks(p.Path) + apDelete(p) + }(p) return reloadRouter() }