aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/admin.go113
1 files changed, 113 insertions, 0 deletions
diff --git a/cmd/admin.go b/cmd/admin.go
index 79faf365..e9078caf 100644
--- a/cmd/admin.go
+++ b/cmd/admin.go
@@ -6,6 +6,8 @@ package cmd
import (
"fmt"
+ "reflect"
+ "runtime"
"github.com/urfave/cli"
@@ -21,6 +23,13 @@ var (
to make automatic initialization process more smoothly`,
Subcommands: []cli.Command{
subcmdCreateUser,
+ subcmdDeleteInactivateUsers,
+ subcmdDeleteRepositoryArchives,
+ subcmdDeleteMissingRepositories,
+ subcmdGitGcRepos,
+ subcmdRewriteAllPublicKeys,
+ subcmdSyncRepositoryHooks,
+ subcmdReinitMissingRepositories,
},
}
@@ -36,6 +45,90 @@ to make automatic initialization process more smoothly`,
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
},
}
+
+ subcmdDeleteInactivateUsers = cli.Command{
+ Name: "delete-inactive-users",
+ Usage: "Delete all inactive accounts",
+ Action: adminDashboardOperation(
+ models.DeleteInactivateUsers,
+ "All inactivate accounts have been deleted successfully",
+ ),
+ Flags: []cli.Flag{
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
+ },
+ }
+
+ subcmdDeleteRepositoryArchives = cli.Command{
+ Name: "delete-repository-archives",
+ Usage: "Delete all repositories archives",
+ Action: adminDashboardOperation(
+ models.DeleteRepositoryArchives,
+ "All repositories archives have been deleted successfully",
+ ),
+ Flags: []cli.Flag{
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
+ },
+ }
+
+ subcmdDeleteMissingRepositories = cli.Command{
+ Name: "delete-missing-repositories",
+ Usage: "Delete all repository records that lost Git files",
+ Action: adminDashboardOperation(
+ models.DeleteMissingRepositories,
+ "All repositories archives have been deleted successfully",
+ ),
+ Flags: []cli.Flag{
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
+ },
+ }
+
+ subcmdGitGcRepos = cli.Command{
+ Name: "collect-garbage",
+ Usage: "Do garbage collection on repositories",
+ Action: adminDashboardOperation(
+ models.GitGcRepos,
+ "All repositories have done garbage collection successfully",
+ ),
+ Flags: []cli.Flag{
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
+ },
+ }
+
+ subcmdRewriteAllPublicKeys = cli.Command{
+ Name: "rewrite-public-keys",
+ Usage: "Rewrite '.ssh/authorized_keys' file (caution: non-Gogs keys will be lost)",
+ Action: adminDashboardOperation(
+ models.RewriteAllPublicKeys,
+ "All public keys have been rewritten successfully",
+ ),
+ Flags: []cli.Flag{
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
+ },
+ }
+
+ subcmdSyncRepositoryHooks = cli.Command{
+ Name: "resync-hooks",
+ Usage: "Resync pre-receive, update and post-receive hooks",
+ Action: adminDashboardOperation(
+ models.SyncRepositoryHooks,
+ "All repositories' pre-receive, update and post-receive hooks have been resynced successfully",
+ ),
+ Flags: []cli.Flag{
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
+ },
+ }
+
+ subcmdReinitMissingRepositories = cli.Command{
+ Name: "reinit-missing-repositories",
+ Usage: "Reinitialize all repository records that lost Git files",
+ Action: adminDashboardOperation(
+ models.ReinitMissingRepositories,
+ "All repository records that lost Git files have been reinitialized successfully",
+ ),
+ Flags: []cli.Flag{
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
+ },
+ }
)
func runCreateUser(c *cli.Context) error {
@@ -68,3 +161,23 @@ func runCreateUser(c *cli.Context) error {
fmt.Printf("New user '%s' has been successfully created!\n", c.String("name"))
return nil
}
+
+func adminDashboardOperation(operation func() error, successMessage string) func(*cli.Context) error {
+ return func(c *cli.Context) error {
+ if c.IsSet("config") {
+ setting.CustomConf = c.String("config")
+ }
+
+ setting.NewContext()
+ models.LoadConfigs()
+ models.SetEngine()
+
+ if err := operation(); err != nil {
+ functionName := runtime.FuncForPC(reflect.ValueOf(operation).Pointer()).Name()
+ return fmt.Errorf("%s: %v", functionName, err)
+ }
+
+ fmt.Printf("%s\n", successMessage)
+ return nil
+ }
+}