Documentation
¶
Overview ¶
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
Package cmd Copyright © 2022 Noah Hsu<i@nn.ci>
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
Copyright © 2023 NAME HERE <EMAIL ADDRESS>
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
Index ¶
Constants ¶
This section is empty.
Variables ¶
var AdminCmd = &cobra.Command{ Use: "admin", Aliases: []string{"password"}, Short: "Show admin user's info and some operations about admin user's password", Run: func(cmd *cobra.Command, args []string) { Init() defer Release() admin, err := op.GetAdmin() if err != nil { utils.Log.Errorf("failed get admin user: %+v", err) } else { utils.Log.Infof("get admin user from CLI") fmt.Println("Admin user's username:", admin.Username) fmt.Println("The password can only be output at the first startup, and then stored as a hash value, which cannot be reversed") fmt.Println("You can reset the password with a random string by running [openlist admin random]") fmt.Println("You can also set a new password by running [openlist admin set NEW_PASSWORD]") } }, }
AdminCmd represents the password command
var Cancel2FACmd = &cobra.Command{ Use: "cancel2fa", Short: "Delete 2FA of admin user", Run: func(cmd *cobra.Command, args []string) { Init() defer Release() admin, err := op.GetAdmin() if err != nil { utils.Log.Errorf("failed to get admin user: %+v", err) } else { err := op.Cancel2FAByUser(admin) if err != nil { utils.Log.Errorf("failed to cancel 2FA: %+v", err) } else { utils.Log.Infof("2FA is canceled from CLI") fmt.Println("2FA canceled") DelAdminCacheOnline() } } }, }
Cancel2FACmd represents the delete2fa command
var CryptCmd = &cobra.Command{ Use: "crypt", Short: "Encrypt or decrypt local file or dir", Example: `openlist crypt -s ./src/encrypt/ --op=de --pwd=123456 --salt=345678`, Run: func(cmd *cobra.Command, args []string) { opt.validate() opt.cryptFileDir() }, }
CryptCmd represents the crypt command
var KillCmd = &cobra.Command{ Use: "kill", Short: "Force kill openlist server process by daemon/pid file", Run: func(cmd *cobra.Command, args []string) { kill() }, }
KillCmd represents the kill command
var LangCmd = &cobra.Command{ Use: "lang", Short: "Generate language json file", Run: func(cmd *cobra.Command, args []string) { frontendPath, _ = cmd.Flags().GetString("frontend-path") bootstrap.InitConfig() err := os.MkdirAll("lang", 0777) if err != nil { utils.Log.Fatalf("failed create folder: %s", err.Error()) } generateDriversJson() generateSettingsJson() }, }
LangCmd represents the lang command
var RandomPasswordCmd = &cobra.Command{ Use: "random", Short: "Reset admin user's password to a random string", Run: func(cmd *cobra.Command, args []string) { utils.Log.Infof("reset admin user's password to a random string from CLI") newPwd := random.String(8) setAdminPassword(newPwd) }, }
var RestartCmd = &cobra.Command{ Use: "restart", Short: "Restart openlist server by daemon/pid file", Run: func(cmd *cobra.Command, args []string) { stop() start() }, }
RestartCmd represents the restart command
var RootCmd = &cobra.Command{
Use: "openlist",
Short: "A file list program that supports multiple storage.",
Long: `A file list program that supports multiple storage,
built with love by OpenListTeam.
Complete documentation is available at https://doc.oplist.org/`,
}
var ServerCmd = &cobra.Command{ Use: "server", Short: "Start the server at the specified address", Long: `Start the server at the specified address the address is defined in config file`, Run: func(cmd *cobra.Command, args []string) { Init() if conf.Conf.DelayedStart != 0 { utils.Log.Infof("delayed start for %d seconds", conf.Conf.DelayedStart) time.Sleep(time.Duration(conf.Conf.DelayedStart) * time.Second) } bootstrap.InitOfflineDownloadTools() bootstrap.LoadStorages() bootstrap.InitTaskManager() if !flags.Debug && !flags.Dev { gin.SetMode(gin.ReleaseMode) } r := gin.New() if conf.Conf.Log.Filter.Enable { r.Use(middlewares.FilteredLogger()) } else { r.Use(gin.LoggerWithWriter(log.StandardLogger().Out)) } r.Use(gin.RecoveryWithWriter(log.StandardLogger().Out)) server.Init(r) var httpHandler http.Handler = r if conf.Conf.Scheme.EnableH2c { httpHandler = h2c.NewHandler(r, &http2.Server{}) } var httpSrv, httpsSrv, unixSrv *http.Server if conf.Conf.Scheme.HttpPort != -1 { httpBase := fmt.Sprintf("%s:%d", conf.Conf.Scheme.Address, conf.Conf.Scheme.HttpPort) fmt.Printf("start HTTP server @ %s\n", httpBase) utils.Log.Infof("start HTTP server @ %s", httpBase) httpSrv = &http.Server{Addr: httpBase, Handler: httpHandler} go func() { err := httpSrv.ListenAndServe() if err != nil && !errors.Is(err, http.ErrServerClosed) { utils.Log.Fatalf("failed to start http: %s", err.Error()) } }() } if conf.Conf.Scheme.HttpsPort != -1 { httpsBase := fmt.Sprintf("%s:%d", conf.Conf.Scheme.Address, conf.Conf.Scheme.HttpsPort) fmt.Printf("start HTTPS server @ %s\n", httpsBase) utils.Log.Infof("start HTTPS server @ %s", httpsBase) httpsSrv = &http.Server{Addr: httpsBase, Handler: r} go func() { err := httpsSrv.ListenAndServeTLS(conf.Conf.Scheme.CertFile, conf.Conf.Scheme.KeyFile) if err != nil && !errors.Is(err, http.ErrServerClosed) { utils.Log.Fatalf("failed to start https: %s", err.Error()) } }() } if conf.Conf.Scheme.UnixFile != "" { fmt.Printf("start unix server @ %s\n", conf.Conf.Scheme.UnixFile) utils.Log.Infof("start unix server @ %s", conf.Conf.Scheme.UnixFile) unixSrv = &http.Server{Handler: httpHandler} go func() { listener, err := net.Listen("unix", conf.Conf.Scheme.UnixFile) if err != nil { utils.Log.Fatalf("failed to listen unix: %+v", err) } mode, err := strconv.ParseUint(conf.Conf.Scheme.UnixFilePerm, 8, 32) if err != nil { utils.Log.Errorf("failed to parse socket file permission: %+v", err) } else { err = os.Chmod(conf.Conf.Scheme.UnixFile, os.FileMode(mode)) if err != nil { utils.Log.Errorf("failed to chmod socket file: %+v", err) } } err = unixSrv.Serve(listener) if err != nil && !errors.Is(err, http.ErrServerClosed) { utils.Log.Fatalf("failed to start unix: %s", err.Error()) } }() } if conf.Conf.S3.Port != -1 && conf.Conf.S3.Enable { s3r := gin.New() s3r.Use(gin.LoggerWithWriter(log.StandardLogger().Out), gin.RecoveryWithWriter(log.StandardLogger().Out)) server.InitS3(s3r) s3Base := fmt.Sprintf("%s:%d", conf.Conf.Scheme.Address, conf.Conf.S3.Port) fmt.Printf("start S3 server @ %s\n", s3Base) utils.Log.Infof("start S3 server @ %s", s3Base) go func() { var err error if conf.Conf.S3.SSL { httpsSrv = &http.Server{Addr: s3Base, Handler: s3r} err = httpsSrv.ListenAndServeTLS(conf.Conf.Scheme.CertFile, conf.Conf.Scheme.KeyFile) } if !conf.Conf.S3.SSL { httpSrv = &http.Server{Addr: s3Base, Handler: s3r} err = httpSrv.ListenAndServe() } if err != nil && !errors.Is(err, http.ErrServerClosed) { utils.Log.Fatalf("failed to start s3 server: %s", err.Error()) } }() } var ftpDriver *server.FtpMainDriver var ftpServer *ftpserver.FtpServer if conf.Conf.FTP.Listen != "" && conf.Conf.FTP.Enable { var err error ftpDriver, err = server.NewMainDriver() if err != nil { utils.Log.Fatalf("failed to start ftp driver: %s", err.Error()) } else { fmt.Printf("start ftp server on %s\n", conf.Conf.FTP.Listen) utils.Log.Infof("start ftp server on %s", conf.Conf.FTP.Listen) go func() { ftpServer = ftpserver.NewFtpServer(ftpDriver) err = ftpServer.ListenAndServe() if err != nil { utils.Log.Fatalf("problem ftp server listening: %s", err.Error()) } }() } } var sftpDriver *server.SftpDriver var sftpServer *sftpd.SftpServer if conf.Conf.SFTP.Listen != "" && conf.Conf.SFTP.Enable { var err error sftpDriver, err = server.NewSftpDriver() if err != nil { utils.Log.Fatalf("failed to start sftp driver: %s", err.Error()) } else { fmt.Printf("start sftp server on %s", conf.Conf.SFTP.Listen) utils.Log.Infof("start sftp server on %s", conf.Conf.SFTP.Listen) go func() { sftpServer = sftpd.NewSftpServer(sftpDriver) err = sftpServer.RunServer() if err != nil { utils.Log.Fatalf("problem sftp server listening: %s", err.Error()) } }() } } quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit utils.Log.Println("Shutdown server...") fs.ArchiveContentUploadTaskManager.RemoveAll() Release() ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() var wg sync.WaitGroup if conf.Conf.Scheme.HttpPort != -1 { wg.Add(1) go func() { defer wg.Done() if err := httpSrv.Shutdown(ctx); err != nil { utils.Log.Fatal("HTTP server shutdown err: ", err) } }() } if conf.Conf.Scheme.HttpsPort != -1 { wg.Add(1) go func() { defer wg.Done() if err := httpsSrv.Shutdown(ctx); err != nil { utils.Log.Fatal("HTTPS server shutdown err: ", err) } }() } if conf.Conf.Scheme.UnixFile != "" { wg.Add(1) go func() { defer wg.Done() if err := unixSrv.Shutdown(ctx); err != nil { utils.Log.Fatal("Unix server shutdown err: ", err) } }() } if conf.Conf.FTP.Listen != "" && conf.Conf.FTP.Enable && ftpServer != nil && ftpDriver != nil { wg.Add(1) go func() { defer wg.Done() ftpDriver.Stop() if err := ftpServer.Stop(); err != nil { utils.Log.Fatal("FTP server shutdown err: ", err) } }() } if conf.Conf.SFTP.Listen != "" && conf.Conf.SFTP.Enable && sftpServer != nil && sftpDriver != nil { wg.Add(1) go func() { defer wg.Done() if err := sftpServer.Close(); err != nil { utils.Log.Fatal("SFTP server shutdown err: ", err) } }() } wg.Wait() utils.Log.Println("Server exit") }, }
ServerCmd represents the server command
var SetPasswordCmd = &cobra.Command{ Use: "set", Short: "Set admin user's password", RunE: func(cmd *cobra.Command, args []string) error { if len(args) == 0 { return fmt.Errorf("Please enter the new password") } setAdminPassword(args[0]) return nil }, }
var ShowTokenCmd = &cobra.Command{ Use: "token", Short: "Show admin token", Run: func(cmd *cobra.Command, args []string) { Init() defer Release() token := setting.GetStr(conf.Token) utils.Log.Infof("show admin token from CLI") fmt.Println("Admin token:", token) }, }
var StartCmd = &cobra.Command{ Use: "start", Short: "Silent start openlist server with `--force-bin-dir`", Run: func(cmd *cobra.Command, args []string) { start() }, }
StartCmd represents the start command
var StopCmd = &cobra.Command{ Use: "stop", Short: "Stop openlist server by daemon/pid file", Run: func(cmd *cobra.Command, args []string) { stop() }, }
StopCmd represents the stop command
var VersionCmd = &cobra.Command{ Use: "version", Short: "Show current version of OpenList", Run: func(cmd *cobra.Command, args []string) { goVersion := fmt.Sprintf("%s %s/%s", runtime.Version(), runtime.GOOS, runtime.GOARCH) fmt.Printf(`Built At: %s Go Version: %s Author: %s Commit ID: %s Version: %s WebVersion: %s `, conf.BuiltAt, goVersion, conf.GitAuthor, conf.GitCommit, conf.Version, conf.WebVersion) os.Exit(0) }, }
VersionCmd represents the version command
Functions ¶
func DelAdminCacheOnline ¶
func DelAdminCacheOnline()
func DelUserCacheOnline ¶
func DelUserCacheOnline(username string)