73 lines · 1.5 KB · Go
RawDownload
// Copyright 2025 The Forgejo Authors. All rights reserved.// SPDX-License-Identifier: MIT package cmd import (	"context"	"fmt" 	auth_model "forgejo.org/models/auth"	user_model "forgejo.org/models/user" 	"github.com/urfave/cli/v3") func microcmdUserResetMFA() *cli.Command {	return &cli.Command{		Name:   "reset-mfa",		Usage:  "Remove all two-factor authentication configurations for a user",		Action: runResetMFA,		Flags: []cli.Flag{			&cli.StringFlag{				Name:    "username",				Aliases: []string{"u"},				Value:   "",				Usage:   "The user to update",			},		},	}} func runResetMFA(ctx context.Context, c *cli.Command) error {	if err := argsSet(c, "username"); err != nil {		return err	} 	ctx, cancel := installSignals(ctx)	defer cancel() 	if err := initDB(ctx); err != nil {		return err	} 	user, err := user_model.GetUserByName(ctx, c.String("username"))	if err != nil {		return err	} 	webAuthnList, err := auth_model.GetWebAuthnCredentialsByUID(ctx, user.ID)	if err != nil {		return err	} 	for _, credential := range webAuthnList {		if _, err := auth_model.DeleteCredential(ctx, credential.ID, user.ID); err != nil {			return err		}	} 	tfaModes, err := auth_model.GetTwoFactorByUID(ctx, user.ID)	if err == nil && tfaModes != nil {		if err := auth_model.DeleteTwoFactorByID(ctx, tfaModes.ID, user.ID); err != nil {			return err		}	} else {		if _, is := err.(auth_model.ErrTwoFactorNotEnrolled); !is {			return err		}	} 	fmt.Printf("%s's two-factor authentication settings have been removed!\n", user.Name)	return nil}