package cmd import ( "fmt" "github.com/akrylysov/pogreb" "github.com/urfave/cli/v2" "codeberg.org/codeberg/pages/server/database" ) var Certs = &cli.Command{ Name: "certs", Usage: "manage certs manually", Subcommands: []*cli.Command{ { Name: "list", Usage: "list all certificates in the database", Action: listCerts, }, { Name: "remove", Usage: "remove a certificate from the database", Action: removeCert, }, }, Flags: []cli.Flag{ // Cert Storage // TODO: remove in next version &cli.StringFlag{ // DEPRICATED Name: "db-pogreb", Value: "key-database.pogreb", EnvVars: []string{"DB_POGREB"}, }, }, } func listCerts(ctx *cli.Context) error { keyDatabase, err := database.NewPogreb(ctx.String("db-pogreb")) if err != nil { return fmt.Errorf("could not create database: %v", err) } items := keyDatabase.Items() for domain, _, err := items.Next(); err != pogreb.ErrIterationDone; domain, _, err = items.Next() { if err != nil { return err } if domain[0] == '.' { fmt.Printf("*") } fmt.Printf("%s\n", domain) } return nil } func removeCert(ctx *cli.Context) error { if ctx.Args().Len() < 1 { return fmt.Errorf("'certs remove' requires at least one domain as an argument") } domains := ctx.Args().Slice() keyDatabase, err := database.NewPogreb(ctx.String("db-pogreb")) if err != nil { return fmt.Errorf("could not create database: %v", err) } for _, domain := range domains { fmt.Printf("Removing domain %s from the database...\n", domain) if err := keyDatabase.Delete(domain); err != nil { return err } } if err := keyDatabase.Close(); err != nil { return err } return nil }