2022-01-23 02:19:32 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bufio"
|
|
|
|
"errors"
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
|
2022-01-30 20:14:49 +01:00
|
|
|
"git.zom.bi/fanir/feedizer/cmd/feedizer/internal/config"
|
|
|
|
"git.zom.bi/fanir/feedizer/cmd/feedizer/internal/database"
|
2022-02-22 00:08:19 +01:00
|
|
|
"git.zom.bi/fanir/feedizer/cmd/feedizer/internal/database/migrator"
|
2022-01-30 20:14:49 +01:00
|
|
|
"git.zom.bi/fanir/feedizer/cmd/feedizer/internal/server"
|
2022-01-23 02:19:32 +01:00
|
|
|
"github.com/golang-migrate/migrate/v4"
|
|
|
|
)
|
|
|
|
|
2022-02-22 00:08:19 +01:00
|
|
|
func Usage() {
|
|
|
|
fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n", os.Args[0])
|
|
|
|
|
|
|
|
fmt.Println(`
|
|
|
|
Flags:`)
|
|
|
|
flag.PrintDefaults()
|
|
|
|
|
|
|
|
fmt.Println(`
|
|
|
|
Commands:
|
|
|
|
run (default action)
|
|
|
|
Run the server.
|
|
|
|
newconfig
|
|
|
|
Write a new config file.
|
|
|
|
purgedb
|
|
|
|
Purge the database by undoing all migrations.
|
|
|
|
help
|
|
|
|
Show this help.
|
|
|
|
|
|
|
|
Default Config Search Paths:`)
|
|
|
|
for _, path := range config.SearchPaths() {
|
|
|
|
fmt.Println(" ", path)
|
|
|
|
}
|
|
|
|
fmt.Println(`
|
|
|
|
All paths are read in order, skipping non existant files. Settings in later files overwrite previous ones.`)
|
|
|
|
}
|
|
|
|
|
2022-01-23 02:19:32 +01:00
|
|
|
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()
|
|
|
|
|
2022-02-22 00:08:19 +01:00
|
|
|
flag.Usage = Usage
|
|
|
|
|
2022-01-23 02:19:32 +01:00
|
|
|
switch flag.Arg(0) {
|
|
|
|
case "", "run":
|
|
|
|
startApp(*autoMigrate)
|
|
|
|
|
2022-02-22 00:08:19 +01:00
|
|
|
case "help":
|
|
|
|
flag.Usage()
|
|
|
|
|
2022-01-23 02:19:32 +01:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2022-01-26 00:22:22 +01:00
|
|
|
if !cfg.AllowRoot && os.Geteuid() == 0 {
|
|
|
|
log.Fatalln("do not run feedizer as root")
|
|
|
|
}
|
|
|
|
|
2022-01-23 02:19:32 +01:00
|
|
|
if automigrate {
|
|
|
|
log.Println("migrating database...")
|
2022-02-22 00:08:19 +01:00
|
|
|
if err = migrator.New(cfg.Database).Migrate(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
2022-01-23 02:19:32 +01:00
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
log.Println("migration successful")
|
|
|
|
}
|
2022-01-26 00:40:13 +01:00
|
|
|
|
|
|
|
log.Println("starting server...")
|
|
|
|
server.Start(cfg)
|
2022-01-23 02:19:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func purgeDB() {
|
|
|
|
cfg, err := config.Load()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
|
2022-02-22 00:08:19 +01:00
|
|
|
_, err = database.ParseConfig(cfg.Database)
|
2022-01-23 02:19:32 +01:00
|
|
|
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...")
|
2022-02-22 00:08:19 +01:00
|
|
|
if err = migrator.New(cfg.Database).Purge(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
2022-01-23 02:19:32 +01:00
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
fmt.Println("purging successful")
|
|
|
|
}
|