mirror of
https://github.com/GlueOps/autoglue.git
synced 2026-02-13 21:00:06 +01:00
54 lines
1008 B
Go
54 lines
1008 B
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
pgapi "github.com/sosedoff/pgweb/pkg/api"
|
|
pgclient "github.com/sosedoff/pgweb/pkg/client"
|
|
pgcmd "github.com/sosedoff/pgweb/pkg/command"
|
|
)
|
|
|
|
func PgwebHandler(dbURL, prefix string, readonly bool) (http.Handler, error) {
|
|
// Normalize prefix for pgweb:
|
|
// - no leading slash
|
|
// - always trailing slash if not empty
|
|
prefix = strings.Trim(prefix, "/")
|
|
if prefix != "" {
|
|
prefix = prefix + "/"
|
|
}
|
|
|
|
pgcmd.Opts = pgcmd.Options{
|
|
URL: dbURL,
|
|
Prefix: prefix, // e.g. "db-studio/"
|
|
ReadOnly: readonly,
|
|
Sessions: false,
|
|
LockSession: true,
|
|
SkipOpen: true,
|
|
}
|
|
|
|
cli, err := pgclient.NewFromUrl(dbURL, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if readonly {
|
|
_ = cli.SetReadOnlyMode()
|
|
}
|
|
|
|
if err := cli.Test(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
pgapi.DbClient = cli
|
|
|
|
gin.SetMode(gin.ReleaseMode)
|
|
g := gin.New()
|
|
g.Use(gin.Recovery())
|
|
|
|
pgapi.SetupRoutes(g)
|
|
pgapi.SetupMetrics(g)
|
|
|
|
return g, nil
|
|
}
|