code.gitea.io/gitea@v1.22.3/cmd/admin_auth.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package cmd
     5  
     6  import (
     7  	"errors"
     8  	"fmt"
     9  	"os"
    10  	"text/tabwriter"
    11  
    12  	auth_model "code.gitea.io/gitea/models/auth"
    13  	"code.gitea.io/gitea/models/db"
    14  	auth_service "code.gitea.io/gitea/services/auth"
    15  
    16  	"github.com/urfave/cli/v2"
    17  )
    18  
    19  var (
    20  	microcmdAuthDelete = &cli.Command{
    21  		Name:   "delete",
    22  		Usage:  "Delete specific auth source",
    23  		Flags:  []cli.Flag{idFlag},
    24  		Action: runDeleteAuth,
    25  	}
    26  	microcmdAuthList = &cli.Command{
    27  		Name:   "list",
    28  		Usage:  "List auth sources",
    29  		Action: runListAuth,
    30  		Flags: []cli.Flag{
    31  			&cli.IntFlag{
    32  				Name:  "min-width",
    33  				Usage: "Minimal cell width including any padding for the formatted table",
    34  				Value: 0,
    35  			},
    36  			&cli.IntFlag{
    37  				Name:  "tab-width",
    38  				Usage: "width of tab characters in formatted table (equivalent number of spaces)",
    39  				Value: 8,
    40  			},
    41  			&cli.IntFlag{
    42  				Name:  "padding",
    43  				Usage: "padding added to a cell before computing its width",
    44  				Value: 1,
    45  			},
    46  			&cli.StringFlag{
    47  				Name:  "pad-char",
    48  				Usage: `ASCII char used for padding if padchar == '\\t', the Writer will assume that the width of a '\\t' in the formatted output is tabwidth, and cells are left-aligned independent of align_left (for correct-looking results, tabwidth must correspond to the tab width in the viewer displaying the result)`,
    49  				Value: "\t",
    50  			},
    51  			&cli.BoolFlag{
    52  				Name:  "vertical-bars",
    53  				Usage: "Set to true to print vertical bars between columns",
    54  			},
    55  		},
    56  	}
    57  )
    58  
    59  func runListAuth(c *cli.Context) error {
    60  	ctx, cancel := installSignals()
    61  	defer cancel()
    62  
    63  	if err := initDB(ctx); err != nil {
    64  		return err
    65  	}
    66  
    67  	authSources, err := db.Find[auth_model.Source](ctx, auth_model.FindSourcesOptions{})
    68  	if err != nil {
    69  		return err
    70  	}
    71  
    72  	flags := tabwriter.AlignRight
    73  	if c.Bool("vertical-bars") {
    74  		flags |= tabwriter.Debug
    75  	}
    76  
    77  	padChar := byte('\t')
    78  	if len(c.String("pad-char")) > 0 {
    79  		padChar = c.String("pad-char")[0]
    80  	}
    81  
    82  	// loop through each source and print
    83  	w := tabwriter.NewWriter(os.Stdout, c.Int("min-width"), c.Int("tab-width"), c.Int("padding"), padChar, flags)
    84  	fmt.Fprintf(w, "ID\tName\tType\tEnabled\n")
    85  	for _, source := range authSources {
    86  		fmt.Fprintf(w, "%d\t%s\t%s\t%t\n", source.ID, source.Name, source.Type.String(), source.IsActive)
    87  	}
    88  	w.Flush()
    89  
    90  	return nil
    91  }
    92  
    93  func runDeleteAuth(c *cli.Context) error {
    94  	if !c.IsSet("id") {
    95  		return errors.New("--id flag is missing")
    96  	}
    97  
    98  	ctx, cancel := installSignals()
    99  	defer cancel()
   100  
   101  	if err := initDB(ctx); err != nil {
   102  		return err
   103  	}
   104  
   105  	source, err := auth_model.GetSourceByID(ctx, c.Int64("id"))
   106  	if err != nil {
   107  		return err
   108  	}
   109  
   110  	return auth_service.DeleteSource(ctx, source)
   111  }