diff options
author | zeripath <art27@cantab.net> | 2023-02-14 22:12:19 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-14 16:12:19 -0600 |
commit | aa1d95300ab1b34a3b4c9f5902ea821f2aa99f6e (patch) | |
tree | ac14d69e9e908ceba7826058115550315ee10c87 /cmd/admin_user_must_change_password.go | |
parent | 618c9118c1652fdeea2a2ae0d1459bb1fd3d5169 (diff) | |
download | gitea-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.go | 58 |
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 +} |