feedizer/cmd/feedizer/main.go

93 lines
1.9 KiB
Go

package main
import (
"bufio"
"errors"
"flag"
"fmt"
"log"
"os"
"git.zom.bi/fanir/feedizer/cmd/feedizer/config"
"git.zom.bi/fanir/feedizer/cmd/feedizer/database"
"github.com/golang-migrate/migrate/v4"
)
func main() {
configFile := flag.String("C", "", "custom config file path")
autoMigrate := flag.Bool("m", true, "Automatically migrate the database to the highest version.")
flag.Parse()
switch flag.Arg(0) {
case "", "run":
startApp(*autoMigrate)
case "newconfig":
path, err := config.WriteFile(*configFile)
if err != nil {
fmt.Printf("cannot write config file %s: %s", path, err)
os.Exit(1)
}
fmt.Println("wrote config file", path)
case "purgedb":
purgeDB()
default:
fmt.Printf("invalid action %s\n\n", flag.Arg(0))
fmt.Println("valid actions are probably: run (default), newconfig, purgedb")
}
}
func startApp(automigrate bool) {
cfg, err := config.Load()
if err != nil {
log.Fatalln(err)
}
if !cfg.AllowRoot && os.Geteuid() == 0 {
log.Fatalln("do not run feedizer as root")
}
db, err := database.Open(cfg.Database)
if err != nil {
log.Fatalln(err)
}
if automigrate {
log.Println("migrating database...")
if err = database.Migrate(db); err != nil && !errors.Is(err, migrate.ErrNoChange) {
log.Fatalln(err)
}
log.Println("migration successful")
}
}
func purgeDB() {
cfg, err := config.Load()
if err != nil {
log.Fatalln(err)
}
db, err := database.Open(cfg.Database)
if err != nil {
log.Fatalln(err)
}
fmt.Printf("PURGE database %s? You will loose all data. [yes/no]\n", database.LogName)
in, err := bufio.NewReader(os.Stdin).ReadString('\n')
if err != nil {
log.Fatalln(err)
}
if in != "yes\n" {
fmt.Println("Aborting. (You must type \"yes\" to continue)")
return
}
fmt.Println("purging database...")
if err = (database.Purgeable{DB: db}).Purge(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
log.Fatalln(err)
}
fmt.Println("purging successful")
}