158 lines
2.9 KiB
Go
158 lines
2.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"git.omicron.one/omicron/linkshare/internal/database"
|
|
"git.omicron.one/omicron/linkshare/internal/util"
|
|
"git.omicron.one/omicron/linkshare/internal/version"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
dbPath string
|
|
verbosity int
|
|
)
|
|
|
|
var (
|
|
paths *util.AppPaths
|
|
db *database.DB
|
|
)
|
|
|
|
func exitIfError(err error) {
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func setupPaths() error {
|
|
if paths != nil {
|
|
return nil
|
|
}
|
|
paths_, err := util.FindDirectories(dbPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
paths = paths_
|
|
return nil
|
|
}
|
|
|
|
func setupDb() error {
|
|
if db != nil {
|
|
return nil
|
|
}
|
|
err := setupPaths()
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
db_, err := database.Open(dbPath)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
db = db_
|
|
return nil
|
|
}
|
|
|
|
func cleanupDb() error {
|
|
if db != nil {
|
|
err := db.Close()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
rootCmd := &cobra.Command{
|
|
Use: "linkctl",
|
|
Short: "LinkShare CLI tool",
|
|
Long: `Command line tool to manage your self-hosted LinkShare service.`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
cmd.Help()
|
|
},
|
|
}
|
|
rootCmd.CompletionOptions.DisableDefaultCmd = true
|
|
|
|
rootCmd.PersistentFlags().StringVarP(&dbPath, "db", "d", "", "Database file path")
|
|
rootCmd.PersistentFlags().CountVarP(&verbosity, "verbose", "v", "Increase verbosity level")
|
|
|
|
configCmd := &cobra.Command{
|
|
Use: "config",
|
|
Short: "Configuration commands",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
cmd.Help()
|
|
},
|
|
PersistentPreRunE: configPreRun,
|
|
PersistentPostRunE: configPostRun,
|
|
}
|
|
|
|
configSetCmd := &cobra.Command{
|
|
Use: "set",
|
|
Short: "Set a configuration value",
|
|
Run: configSetHandler,
|
|
}
|
|
|
|
configGetCmd := &cobra.Command{
|
|
Use: "get",
|
|
Short: "Get a configuration value",
|
|
Run: configGetHandler,
|
|
}
|
|
|
|
configListCmd := &cobra.Command{
|
|
Use: "list",
|
|
Short: "List all configuration values",
|
|
Run: configListHandler,
|
|
}
|
|
|
|
configCmd.AddCommand(configSetCmd, configGetCmd, configListCmd)
|
|
|
|
dbCmd := &cobra.Command{
|
|
Use: "db",
|
|
Short: "Database commands",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
cmd.Help()
|
|
},
|
|
PersistentPreRunE: dbPreRun,
|
|
PersistentPostRunE: dbPostRun,
|
|
}
|
|
|
|
dbInitCmd := &cobra.Command{
|
|
Use: "init",
|
|
Short: "Initialize the database",
|
|
Run: dbInitHandler,
|
|
}
|
|
|
|
dbBackupCmd := &cobra.Command{
|
|
Use: "backup",
|
|
Short: "Backup the database",
|
|
Run: dbBackupHandler,
|
|
}
|
|
|
|
dbUpdateCmd := &cobra.Command{
|
|
Use: "update",
|
|
Short: "Update the database schema",
|
|
Run: dbUpdateHandler,
|
|
}
|
|
|
|
dbCmd.AddCommand(dbInitCmd, dbBackupCmd, dbUpdateCmd)
|
|
|
|
versionCmd := &cobra.Command{
|
|
Use: "version",
|
|
Short: "Display version information",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
version.Print()
|
|
},
|
|
}
|
|
|
|
rootCmd.AddCommand(configCmd, dbCmd, versionCmd)
|
|
|
|
if err := rootCmd.Execute(); err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
}
|