aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/admin_user_must_change_password.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2023-02-14 22:12:19 +0000
committerGitHub <noreply@github.com>2023-02-14 16:12:19 -0600
commitaa1d95300ab1b34a3b4c9f5902ea821f2aa99f6e (patch)
treeac14d69e9e908ceba7826058115550315ee10c87 /cmd/admin_user_must_change_password.go
parent618c9118c1652fdeea2a2ae0d1459bb1fd3d5169 (diff)
downloadgitea-aa1d95300ab1b34a3b4c9f5902ea821f2aa99f6e.tar.gz
gitea-aa1d95300ab1b34a3b4c9f5902ea821f2aa99f6e.zip
Add command to bulk set must-change-password (#22823)
As part of administration sometimes it is appropriate to forcibly tell users to update their passwords. This PR creates a new command `gitea admin user must-change-password` which will set the `MustChangePassword` flag on the provided users. Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'cmd/admin_user_must_change_password.go')
-rw-r--r--cmd/admin_user_must_change_password.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/cmd/admin_user_must_change_password.go b/cmd/admin_user_must_change_password.go
new file mode 100644
index 0000000000..eb13fbcae5
--- /dev/null
+++ b/cmd/admin_user_must_change_password.go
@@ -0,0 +1,58 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package cmd
+
+import (
+ "errors"
+ "fmt"
+
+ user_model "code.gitea.io/gitea/models/user"
+
+ "github.com/urfave/cli"
+)
+
+var microcmdUserMustChangePassword = cli.Command{
+ Name: "must-change-password",
+ Usage: "Set the must change password flag for the provided users or all users",
+ Action: runMustChangePassword,
+ Flags: []cli.Flag{
+ cli.BoolFlag{
+ Name: "all,A",
+ Usage: "All users must change password, except those explicitly excluded with --exclude",
+ },
+ cli.StringSliceFlag{
+ Name: "exclude,e",
+ Usage: "Do not change the must-change-password flag for these users",
+ },
+ cli.BoolFlag{
+ Name: "unset",
+ Usage: "Instead of setting the must-change-password flag, unset it",
+ },
+ },
+}
+
+func runMustChangePassword(c *cli.Context) error {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if c.NArg() == 0 && !c.IsSet("all") {
+ return errors.New("either usernames or --all must be provided")
+ }
+
+ mustChangePassword := !c.Bool("unset")
+ all := c.Bool("all")
+ exclude := c.StringSlice("exclude")
+
+ if err := initDB(ctx); err != nil {
+ return err
+ }
+
+ n, err := user_model.SetMustChangePassword(ctx, all, mustChangePassword, c.Args(), exclude)
+ if err != nil {
+ return err
+ }
+
+ fmt.Printf("Updated %d users setting MustChangePassword to %t\n", n, mustChangePassword)
+ return nil
+}