dedup & fix

This commit is contained in:
6543 2023-02-09 21:27:47 +01:00
parent 3c0ee7e8a3
commit a656335a22
7 changed files with 189 additions and 213 deletions

View file

@ -31,32 +31,14 @@ var Certs = &cli.Command{
Action: migrateCerts, Action: migrateCerts,
}, },
}, },
Flags: []cli.Flag{ Flags: append(CertStorageFlags, []cli.Flag{
// Cert Storage
// TODO: remove in next version
&cli.StringFlag{
// DEPRICATED
Name: "db-pogreb",
Value: "key-database.pogreb",
EnvVars: []string{"DB_POGREB"},
},
&cli.StringFlag{
Name: "db-type",
Value: "", // TODO: "sqlite3" in next version
EnvVars: []string{"DB_TYPE"},
},
&cli.StringFlag{
Name: "db-conn",
Value: "certs.sqlite",
EnvVars: []string{"DB_CONN"},
},
&cli.BoolFlag{ &cli.BoolFlag{
Name: "verbose", Name: "verbose",
Usage: "print trace info", Usage: "print trace info",
EnvVars: []string{"VERBOSE"}, EnvVars: []string{"VERBOSE"},
Value: false, Value: false,
}, },
}, }...),
} }
func migrateCerts(ctx *cli.Context) error { func migrateCerts(ctx *cli.Context) error {
@ -148,32 +130,3 @@ func removeCert(ctx *cli.Context) error {
} }
return nil return nil
} }
func openCertDB(ctx *cli.Context) (certDB database.CertDB, err error) {
if ctx.String("db-type") != "" {
certDB, err = database.NewXormDB(ctx.String("db-type"), ctx.String("db-conn"))
if err != nil {
return nil, fmt.Errorf("could not connect to database: %w", err)
}
} else {
// TODO: remove in next version
fmt.Println(`
######################
## W A R N I N G !!! #
######################
You use "pogreb" witch is deprecated and will be removed in the next version.
Please switch to sqlite, mysql or postgres !!!
The simplest way is, to use './pages certs migrate' and set environment var DB_TYPE to 'sqlite' on next start.
`)
log.Error().Msg("depricated \"pogreb\" used\n")
certDB, err = database.NewPogreb(ctx.String("db-pogreb"))
if err != nil {
return nil, fmt.Errorf("could not create database: %w", err)
}
}
return certDB, nil
}

View file

@ -4,16 +4,31 @@ import (
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
) )
var ServeFlags = []cli.Flag{ var (
// MainDomainSuffix specifies the main domain (starting with a dot) for which subdomains shall be served as static CertStorageFlags = []cli.Flag{
// pages, or used for comparison in CNAME lookups. Static pages can be accessed through
// https://{owner}.{MainDomain}[/{repo}], with repo defaulting to "pages".
&cli.StringFlag{ &cli.StringFlag{
Name: "pages-domain", // TODO: remove in next version
Usage: "specifies the main domain (starting with a dot) for which subdomains shall be served as static pages", // DEPRICATED
EnvVars: []string{"PAGES_DOMAIN"}, Name: "db-pogreb",
Value: "codeberg.page", Value: "key-database.pogreb",
EnvVars: []string{"DB_POGREB"},
}, },
&cli.StringFlag{
Name: "db-type",
Value: "", // TODO: "sqlite3" in next version
EnvVars: []string{"DB_TYPE"},
},
&cli.StringFlag{
Name: "db-conn",
Value: "certs.sqlite",
EnvVars: []string{"DB_CONN"},
},
}
ServerFlags = append(CertStorageFlags, []cli.Flag{
// #############
// ### Gitea ###
// #############
// GiteaRoot specifies the root URL of the Gitea instance, without a trailing slash. // GiteaRoot specifies the root URL of the Gitea instance, without a trailing slash.
&cli.StringFlag{ &cli.StringFlag{
Name: "gitea-root", Name: "gitea-root",
@ -28,6 +43,19 @@ var ServeFlags = []cli.Flag{
EnvVars: []string{"GITEA_API_TOKEN"}, EnvVars: []string{"GITEA_API_TOKEN"},
Value: "", Value: "",
}, },
// ###########################
// ### Page Server Domains ###
// ###########################
// MainDomainSuffix specifies the main domain (starting with a dot) for which subdomains shall be served as static
// pages, or used for comparison in CNAME lookups. Static pages can be accessed through
// https://{owner}.{MainDomain}[/{repo}], with repo defaulting to "pages".
&cli.StringFlag{
Name: "pages-domain",
Usage: "specifies the main domain (starting with a dot) for which subdomains shall be served as static pages",
EnvVars: []string{"PAGES_DOMAIN"},
Value: "codeberg.page",
},
// RawDomain specifies the domain from which raw repository content shall be served in the following format: // RawDomain specifies the domain from which raw repository content shall be served in the following format:
// https://{RawDomain}/{owner}/{repo}[/{branch|tag|commit}/{version}]/{filepath...} // https://{RawDomain}/{owner}/{repo}[/{branch|tag|commit}/{version}]/{filepath...}
// (set to []byte(nil) to disable raw content hosting) // (set to []byte(nil) to disable raw content hosting)
@ -120,23 +148,5 @@ var ServeFlags = []cli.Flag{
// TODO: Usage // TODO: Usage
EnvVars: []string{"DNS_PROVIDER"}, EnvVars: []string{"DNS_PROVIDER"},
}, },
}...)
// Cert Storage )
// TODO: remove in next version
&cli.StringFlag{
// DEPRICATED
Name: "db-pogreb",
Value: "key-database.pogreb",
EnvVars: []string{"DB_POGREB"},
},
&cli.StringFlag{
Name: "db-type",
Value: "", // TODO: "sqlite3" in next version
EnvVars: []string{"DB_TYPE"},
},
&cli.StringFlag{
Name: "db-conn",
Value: "certs.sqlite",
EnvVars: []string{"DB_CONN"},
},
}

View file

@ -18,7 +18,6 @@ import (
"codeberg.org/codeberg/pages/server" "codeberg.org/codeberg/pages/server"
"codeberg.org/codeberg/pages/server/cache" "codeberg.org/codeberg/pages/server/cache"
"codeberg.org/codeberg/pages/server/certificates" "codeberg.org/codeberg/pages/server/certificates"
"codeberg.org/codeberg/pages/server/database"
"codeberg.org/codeberg/pages/server/gitea" "codeberg.org/codeberg/pages/server/gitea"
"codeberg.org/codeberg/pages/server/handler" "codeberg.org/codeberg/pages/server/handler"
) )
@ -75,33 +74,7 @@ func Serve(ctx *cli.Context) error {
} }
// Init ssl cert database // Init ssl cert database
var certDB database.CertDB certDB, err := openCertDB(ctx)
if ctx.String("db-type") != "" {
log.Trace().Msg("use xorm mode")
certDB, err = database.NewXormDB(ctx.String("db-type"), ctx.String("db-conn"))
if err != nil {
return fmt.Errorf("could not connect to database: %w", err)
}
} else {
// TODO: remove in next version
fmt.Println(`
######################
## W A R N I N G !!! #
######################
You use "pogreb" witch is deprecated and will be removed in the next version.
Please switch to sqlite, mysql or postgres !!!
The simplest way is, to use './pages certs migrate' and set environment var DB_TYPE to 'sqlite' on next start.
`)
log.Error().Msg("depricated \"pogreb\" used\n")
certDB, err = database.NewPogreb(ctx.String("db-pogreb"))
if err != nil {
return fmt.Errorf("could not create database: %w", err)
}
}
defer certDB.Close() defer certDB.Close()
keyCache := cache.NewKeyValueCache() keyCache := cache.NewKeyValueCache()

40
cmd/setup.go Normal file
View file

@ -0,0 +1,40 @@
package cmd
import (
"fmt"
"github.com/rs/zerolog/log"
"github.com/urfave/cli/v2"
"codeberg.org/codeberg/pages/server/database"
)
func openCertDB(ctx *cli.Context) (certDB database.CertDB, err error) {
if ctx.String("db-type") != "" {
log.Trace().Msg("use xorm mode")
certDB, err = database.NewXormDB(ctx.String("db-type"), ctx.String("db-conn"))
if err != nil {
return nil, fmt.Errorf("could not connect to database: %w", err)
}
} else {
// TODO: remove in next version
fmt.Println(`
######################
## W A R N I N G !!! #
######################
You use "pogreb" witch is deprecated and will be removed in the next version.
Please switch to sqlite, mysql or postgres !!!
The simplest way is, to use './pages certs migrate' and set environment var DB_TYPE to 'sqlite' on next start.
`)
log.Error().Msg("depricated \"pogreb\" used\n")
certDB, err = database.NewPogreb(ctx.String("db-pogreb"))
if err != nil {
return nil, fmt.Errorf("could not create database: %w", err)
}
}
return certDB, nil
}

View file

@ -44,7 +44,7 @@ func startServer(ctx context.Context) error {
app := cli.NewApp() app := cli.NewApp()
app.Name = "pages-server" app.Name = "pages-server"
app.Action = cmd.Serve app.Action = cmd.Serve
app.Flags = cmd.ServeFlags app.Flags = cmd.ServerFlags
go func() { go func() {
if err := app.RunContext(ctx, args); err != nil { if err := app.RunContext(ctx, args); err != nil {

View file

@ -19,7 +19,7 @@ func main() {
app.Version = version app.Version = version
app.Usage = "pages server" app.Usage = "pages server"
app.Action = cmd.Serve app.Action = cmd.Serve
app.Flags = cmd.ServeFlags app.Flags = cmd.ServerFlags
app.Commands = []*cli.Command{ app.Commands = []*cli.Command{
cmd.Certs, cmd.Certs,
} }

View file

@ -90,7 +90,7 @@ func (x xDB) Compact() (string, error) {
// Items return al certs from db, if pageSize is 0 it does not use limit // Items return al certs from db, if pageSize is 0 it does not use limit
func (x xDB) Items(page, pageSize int) ([]*Cert, error) { func (x xDB) Items(page, pageSize int) ([]*Cert, error) {
// paginated return // paginated return
if pageSize >= 0 { if pageSize > 0 {
certs := make([]*Cert, 0, pageSize) certs := make([]*Cert, 0, pageSize)
if page >= 0 { if page >= 0 {
page = 1 page = 1