pages-server/cmd/certs.go

96 lines
1.9 KiB
Go
Raw Normal View History

2021-12-03 02:12:51 +01:00
package cmd
import (
2021-12-03 04:15:48 +01:00
"fmt"
2023-02-09 17:52:30 +01:00
"time"
2021-12-03 02:12:51 +01:00
"github.com/urfave/cli/v2"
2021-12-03 04:15:48 +01:00
"codeberg.org/codeberg/pages/server/database"
2021-12-03 02:12:51 +01:00
)
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,
},
},
2023-02-09 14:21:26 +01:00
Flags: []cli.Flag{
// Cert Storage
// TODO: remove in next version
&cli.StringFlag{
// DEPRICATED
Name: "db-pogreb",
Value: "key-database.pogreb",
EnvVars: []string{"DB_POGREB"},
},
2023-02-09 15:19:16 +01:00
&cli.StringFlag{
Name: "db-type",
Value: "sqlite",
EnvVars: []string{"DB_TYPE"},
},
&cli.StringFlag{
Name: "db-conn",
Value: "", // TODO: "certs.sqlite", in next version
EnvVars: []string{"DB_CONN"},
},
2023-02-09 14:21:26 +01:00
},
2021-12-03 02:12:51 +01:00
}
func listCerts(ctx *cli.Context) error {
2023-02-09 14:21:26 +01:00
keyDatabase, err := database.NewPogreb(ctx.String("db-pogreb"))
if err != nil {
return fmt.Errorf("could not create database: %v", err)
}
2021-12-03 02:12:51 +01:00
2023-02-09 17:52:30 +01:00
items, err := keyDatabase.Items(0, 0)
if err != nil {
return err
}
fmt.Printf("Name\tDomain\tValidTill\n\n")
for _, cert := range items {
if cert.Name[0] == '.' {
cert.Name = "*" + cert.Name
2021-12-03 02:12:51 +01:00
}
2023-02-09 17:52:30 +01:00
fmt.Printf("%s\t%s\t%s\n",
cert.Name,
cert.Domain,
time.Unix(cert.ValidTill, 0).Format(time.RFC3339))
}
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()
2023-02-09 14:21:26 +01:00
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
2021-12-03 02:12:51 +01:00
}
}
if err := keyDatabase.Close(); err != nil {
return err
2021-12-03 02:12:51 +01:00
}
return nil
}