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") }