147 lines
3.8 KiB
Go
147 lines
3.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"runtime"
|
|
"srnd"
|
|
"strings"
|
|
"syscall"
|
|
)
|
|
|
|
func main() {
|
|
|
|
daemon := new(srnd.NNTPDaemon)
|
|
if len(os.Args) > 1 {
|
|
action := os.Args[1]
|
|
if action == "setup" {
|
|
log.Println("Setting up SRNd base...")
|
|
daemon.Setup()
|
|
log.Println("Setup Done")
|
|
} else if action == "run" {
|
|
log.Printf("Starting up %s...", srnd.Version())
|
|
daemon.Setup()
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, os.Interrupt)
|
|
signal.Notify(c, syscall.SIGTERM, syscall.SIGHUP)
|
|
go func() {
|
|
for {
|
|
sig := <-c
|
|
if sig != syscall.SIGHUP {
|
|
break
|
|
}
|
|
srnd.ReloadTemplates()
|
|
daemon.Reload()
|
|
}
|
|
log.Println("Shutting down...")
|
|
daemon.End()
|
|
os.Exit(0)
|
|
}()
|
|
daemon.Run()
|
|
} else if action == "tool" {
|
|
if len(os.Args) > 2 {
|
|
tool := os.Args[2]
|
|
if tool == "mod" {
|
|
if len(os.Args) == 4 && os.Args[3] == "do" {
|
|
daemon.Setup()
|
|
eng := daemon.ModEngine()
|
|
r := bufio.NewReader(os.Stdin)
|
|
var err error
|
|
for err == nil {
|
|
var line string
|
|
fmt.Print("\nmod> ")
|
|
line, err = r.ReadString(10)
|
|
if err == nil {
|
|
line = strings.Trim(line, "\n")
|
|
if line == "help" {
|
|
fmt.Println("usage:")
|
|
fmt.Println("delete <message-id>")
|
|
fmt.Println("overchan-inet-ban 1.1.1.1/32")
|
|
fmt.Println("exit")
|
|
} else if line == "quit" || line == "exit" {
|
|
fmt.Println("bai")
|
|
return
|
|
} else {
|
|
ev := srnd.ParseModEvent(line)
|
|
eng.Do(ev)
|
|
}
|
|
}
|
|
}
|
|
} else if len(os.Args) >= 5 {
|
|
action := os.Args[3]
|
|
if action == "add" {
|
|
pk := os.Args[4]
|
|
daemon.Setup()
|
|
db := daemon.GetDatabase()
|
|
err := db.MarkModPubkeyGlobal(pk)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
} else if action == "del" {
|
|
pk := os.Args[4]
|
|
daemon.Setup()
|
|
db := daemon.GetDatabase()
|
|
err := db.UnMarkModPubkeyGlobal(pk)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
} else {
|
|
fmt.Fprintf(os.Stdout, "usage: %s tool mod [[add|del] pubkey]|[do modactiongoeshere]\n", os.Args[0])
|
|
}
|
|
} else {
|
|
fmt.Fprintf(os.Stdout, "usage: %s tool mod [[add|del] pubkey]|[do modactiongoeshere]\n", os.Args[0])
|
|
}
|
|
} else if tool == "rethumb" {
|
|
if len(os.Args) >= 4 {
|
|
threads := runtime.NumCPU()
|
|
arg := strings.ToLower(os.Args[3])
|
|
switch arg {
|
|
case "missing":
|
|
srnd.ThumbnailTool(threads, true)
|
|
return
|
|
case "all":
|
|
srnd.ThumbnailTool(threads, false)
|
|
return
|
|
}
|
|
}
|
|
fmt.Fprintf(os.Stdout, "usage: %s tool rethumb [missing|all]\n", os.Args[0])
|
|
} else if tool == "keygen" {
|
|
srnd.KeygenTool()
|
|
} else if tool == "nntp" {
|
|
if len(os.Args) >= 5 {
|
|
action := os.Args[3]
|
|
if action == "del-login" {
|
|
daemon.Setup()
|
|
daemon.DelNNTPLogin(os.Args[4])
|
|
} else if action == "add-login" {
|
|
if len(os.Args) == 6 {
|
|
username := os.Args[4]
|
|
passwd := os.Args[5]
|
|
daemon.Setup()
|
|
daemon.AddNNTPLogin(username, passwd)
|
|
} else {
|
|
fmt.Fprintf(os.Stdout, "Usage: %s tool nntp add-login username password\n", os.Args[0])
|
|
}
|
|
} else {
|
|
fmt.Fprintf(os.Stdout, "Usage: %s tool nntp [add-login|del-login]\n", os.Args[0])
|
|
}
|
|
} else {
|
|
fmt.Fprintf(os.Stdout, "Usage: %s tool nntp [add-login|del-login]\n", os.Args[0])
|
|
}
|
|
} else {
|
|
fmt.Fprintf(os.Stdout, "Usage: %s tool [rethumb|keygen|nntp|mod]\n", os.Args[0])
|
|
}
|
|
} else {
|
|
fmt.Fprintf(os.Stdout, "Usage: %s tool [rethumb|keygen|nntp|mod]\n", os.Args[0])
|
|
}
|
|
} else {
|
|
log.Println("Invalid action:", action)
|
|
}
|
|
} else {
|
|
fmt.Fprintf(os.Stdout, "Usage: %s [setup|run|tool]\n", os.Args[0])
|
|
}
|
|
}
|