miniflux/cli/cli.go

156 lines
3.7 KiB
Go
Raw Normal View History

// Copyright 2018 Frédéric Guillot. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.
2018-08-25 06:51:50 +02:00
package cli // import "miniflux.app/cli"
import (
"flag"
"fmt"
2018-08-25 06:51:50 +02:00
"miniflux.app/config"
"miniflux.app/database"
"miniflux.app/logger"
"miniflux.app/storage"
"miniflux.app/version"
)
2018-10-09 06:00:00 +02:00
const (
flagInfoHelp = "Show application information"
flagVersionHelp = "Show application version"
flagMigrateHelp = "Run SQL migrations"
flagFlushSessionsHelp = "Flush all sessions (disconnect users)"
flagCreateAdminHelp = "Create admin user"
flagResetPasswordHelp = "Reset user password"
2018-10-09 06:00:00 +02:00
flagResetFeedErrorsHelp = "Clear all feed errors for all users"
flagDebugModeHelp = "Show debug logs"
flagConfigFileHelp = "Load configuration file"
flagConfigDumpHelp = "Print parsed configuration values"
2018-10-09 06:00:00 +02:00
)
// Parse parses command line arguments.
func Parse() {
2018-10-09 06:00:00 +02:00
var (
err error
flagInfo bool
flagVersion bool
flagMigrate bool
flagFlushSessions bool
flagCreateAdmin bool
flagResetPassword bool
2018-10-09 06:00:00 +02:00
flagResetFeedErrors bool
flagDebugMode bool
flagConfigFile string
flagConfigDump bool
2018-10-09 06:00:00 +02:00
)
flag.BoolVar(&flagInfo, "info", false, flagInfoHelp)
flag.BoolVar(&flagInfo, "i", false, flagInfoHelp)
flag.BoolVar(&flagVersion, "version", false, flagVersionHelp)
flag.BoolVar(&flagVersion, "v", false, flagVersionHelp)
flag.BoolVar(&flagMigrate, "migrate", false, flagMigrateHelp)
flag.BoolVar(&flagFlushSessions, "flush-sessions", false, flagFlushSessionsHelp)
2018-10-09 06:00:00 +02:00
flag.BoolVar(&flagCreateAdmin, "create-admin", false, flagCreateAdminHelp)
flag.BoolVar(&flagResetPassword, "reset-password", false, flagResetPasswordHelp)
flag.BoolVar(&flagResetFeedErrors, "reset-feed-errors", false, flagResetFeedErrorsHelp)
flag.BoolVar(&flagDebugMode, "debug", false, flagDebugModeHelp)
flag.StringVar(&flagConfigFile, "config-file", "", flagConfigFileHelp)
flag.StringVar(&flagConfigFile, "c", "", flagConfigFileHelp)
flag.BoolVar(&flagConfigDump, "config-dump", false, flagConfigDumpHelp)
flag.Parse()
cfg := config.NewParser()
if flagConfigFile != "" {
config.Opts, err = cfg.ParseFile(flagConfigFile)
if err != nil {
logger.Fatal("%v", err)
}
}
config.Opts, err = cfg.ParseEnvironmentVariables()
if err != nil {
logger.Fatal("%v", err)
}
if flagConfigDump {
fmt.Print(config.Opts)
return
}
if config.Opts.LogDateTime() {
logger.EnableDateTime()
}
if flagDebugMode || config.Opts.HasDebugMode() {
logger.EnableDebug()
}
2018-10-09 06:00:00 +02:00
if flagInfo {
info()
return
}
2018-10-09 06:00:00 +02:00
if flagVersion {
fmt.Println(version.Version)
return
}
if config.Opts.IsDefaultDatabaseURL() {
logger.Info("The default value for DATABASE_URL is used")
}
db, err := database.NewConnectionPool(
config.Opts.DatabaseURL(),
config.Opts.DatabaseMinConns(),
config.Opts.DatabaseMaxConns(),
)
if err != nil {
logger.Fatal("Unable to connect to the database: %v", err)
}
defer db.Close()
2018-10-09 06:00:00 +02:00
if flagMigrate {
2018-08-02 05:28:45 +02:00
database.Migrate(db)
return
}
store := storage.NewStorage(db)
2018-10-09 06:00:00 +02:00
if flagResetFeedErrors {
2018-06-30 23:22:45 +02:00
store.ResetFeedErrors()
return
}
2018-10-09 06:00:00 +02:00
if flagFlushSessions {
flushSessions(store)
return
}
2018-10-09 06:00:00 +02:00
if flagCreateAdmin {
createAdmin(store)
return
}
2018-10-09 06:00:00 +02:00
if flagResetPassword {
2018-01-03 07:18:24 +01:00
resetPassword(store)
return
}
2018-04-16 05:27:10 +02:00
// Run migrations and start the deamon.
if config.Opts.RunMigrations() {
2018-08-02 05:28:45 +02:00
database.Migrate(db)
2018-04-16 05:27:10 +02:00
}
if err := database.IsSchemaUpToDate(db); err != nil {
logger.Fatal(`You must run the SQL migrations, %v`, err)
}
2018-04-16 05:27:10 +02:00
// Create admin user and start the deamon.
if config.Opts.CreateAdmin() {
2018-04-16 05:27:10 +02:00
createAdmin(store)
}
startDaemon(store)
}