Make hooks a bit more modular

This commit is contained in:
Jan-Lukas Else 2020-11-17 22:10:13 +01:00
parent eed86794ff
commit 8332d7ee43
6 changed files with 71 additions and 31 deletions

View File

@ -29,6 +29,24 @@ var (
) )
func initActivityPub() error { func initActivityPub() error {
if !appConfig.ActivityPub.Enabled {
return nil
}
// Add hooks
postHooks[postPostHook] = append(postHooks[postPostHook], func(p *post) {
if p.isPublishedSectionPost() {
p.apPost()
}
})
postHooks[postUpdateHook] = append(postHooks[postUpdateHook], func(p *post) {
if p.isPublishedSectionPost() {
p.apUpdate()
}
})
postHooks[postDeleteHook] = append(postHooks[postDeleteHook], func(p *post) {
p.apDelete()
})
// Read key and prepare signing
pkfile, err := ioutil.ReadFile(appConfig.ActivityPub.KeyPath) pkfile, err := ioutil.ReadFile(appConfig.ActivityPub.KeyPath)
if err != nil { if err != nil {
return err return err
@ -266,9 +284,6 @@ func apRemoveFollower(blog, follower string) error {
} }
func (p *post) apPost() { func (p *post) apPost() {
if !appConfig.ActivityPub.Enabled {
return
}
n := p.toASNote() n := p.toASNote()
createActivity := make(map[string]interface{}) createActivity := make(map[string]interface{})
createActivity["@context"] = asContext createActivity["@context"] = asContext
@ -286,9 +301,6 @@ func (p *post) apPost() {
} }
func (p *post) apUpdate() { func (p *post) apUpdate() {
if !appConfig.ActivityPub.Enabled {
return
}
n := p.toASNote() n := p.toASNote()
updateActivity := make(map[string]interface{}) updateActivity := make(map[string]interface{})
updateActivity["@context"] = asContext updateActivity["@context"] = asContext
@ -301,9 +313,6 @@ func (p *post) apUpdate() {
} }
func (p *post) apAnnounce() { func (p *post) apAnnounce() {
if !appConfig.ActivityPub.Enabled {
return
}
announceActivity := make(map[string]interface{}) announceActivity := make(map[string]interface{})
announceActivity["@context"] = asContext announceActivity["@context"] = asContext
announceActivity["actor"] = appConfig.Blogs[p.Blog].apIri() announceActivity["actor"] = appConfig.Blogs[p.Blog].apIri()
@ -315,9 +324,6 @@ func (p *post) apAnnounce() {
} }
func (p *post) apDelete() { func (p *post) apDelete() {
if !appConfig.ActivityPub.Enabled {
return
}
deleteActivity := make(map[string]interface{}) deleteActivity := make(map[string]interface{})
deleteActivity["@context"] = asContext deleteActivity["@context"] = asContext
deleteActivity["actor"] = appConfig.Blogs[p.Blog].apIri() deleteActivity["actor"] = appConfig.Blogs[p.Blog].apIri()

View File

@ -17,6 +17,16 @@ func preStartHooks() {
} }
} }
type postHookType string
const (
postPostHook postHookType = "post"
postUpdateHook postHookType = "update"
postDeleteHook postHookType = "delete"
)
var postHooks = map[postHookType][]func(*post){}
func (p *post) postPostHooks() { func (p *post) postPostHooks() {
for _, cmdTmplString := range appConfig.Hooks.PostPost { for _, cmdTmplString := range appConfig.Hooks.PostPost {
go func(p *post, cmdTmplString string) { go func(p *post, cmdTmplString string) {
@ -26,12 +36,9 @@ func (p *post) postPostHooks() {
}) })
}(p, cmdTmplString) }(p, cmdTmplString)
} }
if p.Published != "" && p.Section != "" { for _, f := range postHooks[postPostHook] {
// It's a published post go f(p)
go p.apPost()
go p.tgPost()
} }
go p.sendWebmentions()
} }
func (p *post) postUpdateHooks() { func (p *post) postUpdateHooks() {
@ -43,11 +50,9 @@ func (p *post) postUpdateHooks() {
}) })
}(p, cmdTmplString) }(p, cmdTmplString)
} }
if p.Published != "" && p.Section != "" { for _, f := range postHooks[postUpdateHook] {
// It's a published post go f(p)
go p.apUpdate()
} }
go p.sendWebmentions()
} }
func (p *post) postDeleteHooks() { func (p *post) postDeleteHooks() {
@ -59,8 +64,9 @@ func (p *post) postDeleteHooks() {
}) })
}(p, cmdTmplString) }(p, cmdTmplString)
} }
go p.apDelete() for _, f := range postHooks[postDeleteHook] {
go p.sendWebmentions() go f(p)
}
} }
type hookTemplateData struct { type hookTemplateData struct {

11
main.go
View File

@ -49,13 +49,12 @@ func main() {
log.Fatal(err) log.Fatal(err)
return return
} }
if appConfig.ActivityPub.Enabled { err = initActivityPub()
err = initActivityPub() if err != nil {
if err != nil { log.Fatal(err)
log.Fatal(err) return
return
}
} }
initTelegram()
initWebmention() initWebmention()
initCache() initCache()
initNodeInfo() initNodeInfo()

View File

@ -77,3 +77,7 @@ func (p *post) translations() []*post {
} }
return translations return translations
} }
func (p *post) isPublishedSectionPost() bool {
return p.Published != "" && p.Section != ""
}

View File

@ -9,8 +9,25 @@ import (
const telegramBaseURL = "https://api.telegram.org/bot" const telegramBaseURL = "https://api.telegram.org/bot"
func initTelegram() {
enable := false
for _, b := range appConfig.Blogs {
if tg := b.Telegram; tg != nil && tg.Enabled && tg.BotToken != "" && tg.ChatID != "" {
enable = true
}
}
if enable {
postHooks[postPostHook] = append(postHooks[postPostHook], func(p *post) {
if p.isPublishedSectionPost() {
p.tgPost()
}
})
}
}
func (p *post) tgPost() { func (p *post) tgPost() {
if appConfig.Blogs[p.Blog].Telegram == nil || !appConfig.Blogs[p.Blog].Telegram.Enabled { tg := appConfig.Blogs[p.Blog].Telegram
if tg == nil || !tg.Enabled || tg.BotToken == "" || tg.ChatID == "" {
return return
} }
var message bytes.Buffer var message bytes.Buffer
@ -19,7 +36,7 @@ func (p *post) tgPost() {
message.WriteString("\n\n") message.WriteString("\n\n")
} }
message.WriteString(p.fullURL()) message.WriteString(p.fullURL())
sendTelegramMessage(message.String(), appConfig.Blogs[p.Blog].Telegram.BotToken, appConfig.Blogs[p.Blog].Telegram.ChatID) sendTelegramMessage(message.String(), tg.BotToken, tg.ChatID)
} }
func sendTelegramMessage(text, bottoken, chatID string) error { func sendTelegramMessage(text, bottoken, chatID string) error {

View File

@ -33,6 +33,14 @@ type mention struct {
} }
func initWebmention() { func initWebmention() {
// Add hooks
hookFunc := func(p *post) {
p.sendWebmentions()
}
postHooks[postPostHook] = append(postHooks[postPostHook], hookFunc)
postHooks[postUpdateHook] = append(postHooks[postUpdateHook], hookFunc)
postHooks[postDeleteHook] = append(postHooks[postDeleteHook], hookFunc)
// Start verifier
startWebmentionVerifier() startWebmentionVerifier()
} }