cli.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // Copyright 2018 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package cli // import "miniflux.app/cli"
  5. import (
  6. "flag"
  7. "fmt"
  8. "miniflux.app/config"
  9. "miniflux.app/database"
  10. "miniflux.app/logger"
  11. "miniflux.app/storage"
  12. "miniflux.app/version"
  13. )
  14. const (
  15. flagInfoHelp = "Show application information"
  16. flagVersionHelp = "Show application version"
  17. flagMigrateHelp = "Run SQL migrations"
  18. flagFlsuhSessionsHelp = "Flush all sessions (disconnect users)"
  19. flagCreateAdminHelp = "Create admin user"
  20. flagResetPasswordHelp = "Reset user password"
  21. flagResetFeedErrorsHelp = "Clear all feed errors for all users"
  22. flagDebugModeHelp = "Show debug logs"
  23. )
  24. // Parse parses command line arguments.
  25. func Parse() {
  26. var (
  27. flagInfo bool
  28. flagVersion bool
  29. flagMigrate bool
  30. flagFlushSessions bool
  31. flagCreateAdmin bool
  32. flagResetPassword bool
  33. flagResetFeedErrors bool
  34. flagDebugMode bool
  35. )
  36. flag.BoolVar(&flagInfo, "info", false, flagInfoHelp)
  37. flag.BoolVar(&flagInfo, "i", false, flagInfoHelp)
  38. flag.BoolVar(&flagVersion, "version", false, flagVersionHelp)
  39. flag.BoolVar(&flagVersion, "v", false, flagVersionHelp)
  40. flag.BoolVar(&flagMigrate, "migrate", false, flagMigrateHelp)
  41. flag.BoolVar(&flagFlushSessions, "flush-sessions", false, flagFlsuhSessionsHelp)
  42. flag.BoolVar(&flagCreateAdmin, "create-admin", false, flagCreateAdminHelp)
  43. flag.BoolVar(&flagResetPassword, "reset-password", false, flagResetPasswordHelp)
  44. flag.BoolVar(&flagResetFeedErrors, "reset-feed-errors", false, flagResetFeedErrorsHelp)
  45. flag.BoolVar(&flagDebugMode, "debug", false, flagDebugModeHelp)
  46. flag.Parse()
  47. cfg := config.NewConfig()
  48. if flagDebugMode || cfg.HasDebugMode() {
  49. logger.EnableDebug()
  50. }
  51. db, err := database.NewConnectionPool(cfg.DatabaseURL(), cfg.DatabaseMinConns(), cfg.DatabaseMaxConns())
  52. if err != nil {
  53. logger.Fatal("Unable to connect to the database: %v", err)
  54. }
  55. defer db.Close()
  56. store := storage.NewStorage(db)
  57. if flagInfo {
  58. info()
  59. return
  60. }
  61. if flagVersion {
  62. fmt.Println(version.Version)
  63. return
  64. }
  65. if flagMigrate {
  66. database.Migrate(db)
  67. return
  68. }
  69. if flagResetFeedErrors {
  70. store.ResetFeedErrors()
  71. return
  72. }
  73. if flagFlushSessions {
  74. flushSessions(store)
  75. return
  76. }
  77. if flagCreateAdmin {
  78. createAdmin(store)
  79. return
  80. }
  81. if flagResetPassword {
  82. resetPassword(store)
  83. return
  84. }
  85. // Run migrations and start the deamon.
  86. if cfg.RunMigrations() {
  87. database.Migrate(db)
  88. }
  89. // Create admin user and start the deamon.
  90. if cfg.CreateAdmin() {
  91. createAdmin(store)
  92. }
  93. startDaemon(cfg, store)
  94. }