eh
This commit is contained in:
parent
bcddab9af6
commit
59068bb961
@ -198,8 +198,6 @@ type ModEngine interface {
|
||||
AllowBan(pubkey string) bool
|
||||
// allow janitor
|
||||
AllowJanitor(pubkey string) bool
|
||||
// load a mod message
|
||||
LoadMessage(msgid string) NNTPMessage
|
||||
// execute 1 mod action line by a mod with pubkey
|
||||
Execute(ev ModEvent, pubkey string)
|
||||
// do a mod event unconditionally
|
||||
@ -227,10 +225,6 @@ func (self *modEngine) MarkSpam(msgid string) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (self *modEngine) LoadMessage(msgid string) NNTPMessage {
|
||||
return self.store.GetMessage(msgid)
|
||||
}
|
||||
|
||||
func (self *modEngine) BanAddress(cidr string) (err error) {
|
||||
return self.database.BanAddr(cidr)
|
||||
}
|
||||
@ -345,22 +339,23 @@ func (self *modEngine) AllowDelete(pubkey, msgid string) (allow bool) {
|
||||
}
|
||||
|
||||
func (mod *modEngine) HandleMessage(msgid string) {
|
||||
nntp := mod.store.GetMessage(msgid)
|
||||
if nntp == nil {
|
||||
log.Println("failed to load", msgid, "in mod engine, missing message")
|
||||
return
|
||||
}
|
||||
// sanity check
|
||||
if nntp.Newsgroup() == "ctl" {
|
||||
pubkey := nntp.Pubkey()
|
||||
for _, line := range strings.Split(nntp.Message(), "\n") {
|
||||
line = strings.Trim(line, "\r\t\n ")
|
||||
if len(line) > 0 {
|
||||
ev := ParseModEvent(line)
|
||||
mod.Execute(ev, pubkey)
|
||||
mod.store.GetMessage(msgid, func(nntp NNTPMessage) {
|
||||
if nntp == nil {
|
||||
log.Println("failed to load", msgid, "in mod engine, missing message")
|
||||
return
|
||||
}
|
||||
// sanity check
|
||||
if nntp.Newsgroup() == "ctl" {
|
||||
pubkey := nntp.Pubkey()
|
||||
for _, line := range strings.Split(nntp.Message(), "\n") {
|
||||
line = strings.Trim(line, "\r\t\n ")
|
||||
if len(line) > 0 {
|
||||
ev := ParseModEvent(line)
|
||||
mod.Execute(ev, pubkey)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (mod *modEngine) Do(ev ModEvent) {
|
||||
|
@ -75,7 +75,7 @@ type ArticleStore interface {
|
||||
// register signed message
|
||||
RegisterSigned(msgid, pk string) error
|
||||
|
||||
GetMessage(msgid string) NNTPMessage
|
||||
GetMessage(msgid string, visit func(NNTPMessage))
|
||||
|
||||
// get size of message on disk
|
||||
GetMessageSize(msgid string) (int64, error)
|
||||
@ -584,7 +584,7 @@ func (self *articleStore) ProcessMessage(wr io.Writer, msg io.Reader, spamfilter
|
||||
return
|
||||
}
|
||||
|
||||
func (self *articleStore) GetMessage(msgid string) (nntp NNTPMessage) {
|
||||
func (self *articleStore) GetMessage(msgid string, visit func(NNTPMessage)) {
|
||||
r, err := self.OpenMessage(msgid)
|
||||
if err == nil {
|
||||
defer r.Close()
|
||||
@ -597,7 +597,7 @@ func (self *articleStore) GetMessage(msgid string) (nntp NNTPMessage) {
|
||||
// inject pubkey for mod
|
||||
n.Headers().Set("X-PubKey-Ed25519", hdr.Get("X-PubKey-Ed25519"))
|
||||
}
|
||||
nntp = n
|
||||
visit(n)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user