Fix cert removal command ()

The command was using parts from the old os.Args approach and parts from the cli package, and together they didn't work at all. This fixes that and makes the command `pages-server certs remove [domain...]`.

Co-authored-by: Moritz Marquardt <git@momar.de>
Reviewed-on: https://codeberg.org/Codeberg/pages-server/pulls/50
Co-authored-by: Moritz Marquardt <momar@noreply.codeberg.org>
Co-committed-by: Moritz Marquardt <momar@noreply.codeberg.org>
This commit is contained in:
Moritz Marquardt 2022-03-20 23:18:00 +01:00 committed by 6543
parent f5e613bfdb
commit a5504acb0e
2 changed files with 53 additions and 26 deletions

View file

@ -2,8 +2,7 @@ package cmd
import ( import (
"fmt" "fmt"
"os" "github.com/akrylysov/pogreb"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"codeberg.org/codeberg/pages/server/database" "codeberg.org/codeberg/pages/server/database"
@ -12,17 +11,46 @@ import (
var Certs = &cli.Command{ var Certs = &cli.Command{
Name: "certs", Name: "certs",
Usage: "manage certs manually", Usage: "manage certs manually",
Action: certs, Subcommands: []*cli.Command{
&cli.Command{
Name: "list",
Usage: "list all certificates in the database",
Action: listCerts,
},
&cli.Command{
Name: "remove",
Usage: "remove a certificate from the database",
Action: removeCert,
},
},
} }
func certs(ctx *cli.Context) error { func listCerts(ctx *cli.Context) error {
if ctx.Args().Len() >= 1 && ctx.Args().First() == "--remove-certificate" { // TODO: make "key-database.pogreb" set via flag
if ctx.Args().Len() == 1 { keyDatabase, err := database.New("key-database.pogreb")
println("--remove-certificate requires at least one domain as an argument") if err != nil {
os.Exit(1) return fmt.Errorf("could not create database: %v", err)
} }
domains := ctx.Args().Slice()[2:] 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()
// TODO: make "key-database.pogreb" set via flag // TODO: make "key-database.pogreb" set via flag
keyDatabase, err := database.New("key-database.pogreb") keyDatabase, err := database.New("key-database.pogreb")
@ -31,14 +59,13 @@ func certs(ctx *cli.Context) error {
} }
for _, domain := range domains { for _, domain := range domains {
fmt.Printf("Removing domain %s from the database...\n", domain)
if err := keyDatabase.Delete([]byte(domain)); err != nil { if err := keyDatabase.Delete([]byte(domain)); err != nil {
panic(err) return err
} }
} }
if err := keyDatabase.Close(); err != nil { if err := keyDatabase.Close(); err != nil {
panic(err) return err
}
os.Exit(0)
} }
return nil return nil
} }