mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-29 00:55:51 +08:00
154 lines
3.0 KiB
Go
154 lines
3.0 KiB
Go
package plg_backend_psql
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
"strings"
|
|
|
|
. "github.com/mickael-kerjean/filestash/server/common"
|
|
|
|
_ "github.com/lib/pq"
|
|
)
|
|
|
|
type PSQL struct {
|
|
db *sql.DB
|
|
ctx context.Context
|
|
}
|
|
|
|
func init() {
|
|
Backend.Register("psql", PSQL{})
|
|
}
|
|
|
|
func (this PSQL) Init(params map[string]string, app *App) (IBackend, error) {
|
|
host := params["host"]
|
|
port := withDefault(params["port"], "5432")
|
|
user := params["user"]
|
|
password := params["password"]
|
|
dbname := withDefault(params["dbname"], "postgres")
|
|
sslmode := withDefault(params["sslmode"], "disable")
|
|
|
|
if host == "" || user == "" || password == "" {
|
|
return nil, ErrNotValid
|
|
}
|
|
db, err := sql.Open(
|
|
"postgres",
|
|
fmt.Sprintf(
|
|
"host=%s port=%s user=%s password=%s dbname=%s sslmode=%s",
|
|
host, port, user, password, dbname, sslmode,
|
|
),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
} else if err := db.Ping(); err != nil {
|
|
Log.Debug("plg_backend_psql::init err=%s", err.Error())
|
|
return nil, ErrNotValid
|
|
}
|
|
backend := &PSQL{
|
|
db: db,
|
|
ctx: app.Context,
|
|
}
|
|
return backend, nil
|
|
}
|
|
|
|
func withDefault(val string, def string) string {
|
|
if val == "" {
|
|
return def
|
|
}
|
|
return val
|
|
}
|
|
|
|
func (this PSQL) LoginForm() Form {
|
|
return Form{
|
|
Elmnts: []FormElement{
|
|
FormElement{
|
|
Name: "type",
|
|
Type: "hidden",
|
|
Value: "psql",
|
|
},
|
|
FormElement{
|
|
Name: "host",
|
|
Type: "text",
|
|
Placeholder: "Host",
|
|
},
|
|
FormElement{
|
|
Name: "port",
|
|
Type: "number",
|
|
Placeholder: "Port",
|
|
},
|
|
FormElement{
|
|
Name: "user",
|
|
Type: "text",
|
|
Placeholder: "User",
|
|
},
|
|
FormElement{
|
|
Name: "password",
|
|
Type: "password",
|
|
Placeholder: "Password",
|
|
},
|
|
FormElement{
|
|
Name: "dbname",
|
|
Type: "text",
|
|
Placeholder: "DB Name",
|
|
},
|
|
FormElement{
|
|
Name: "sslmode",
|
|
Type: "text",
|
|
Placeholder: "SSL Mode",
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (this PSQL) Touch(path string) error {
|
|
defer this.Close()
|
|
if !strings.HasSuffix(path, ".form") {
|
|
return NewError("Create a form file instead. eg: xxxx.form", 403)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (this PSQL) Mkdir(path string) error {
|
|
defer this.Close()
|
|
return ErrNotValid
|
|
}
|
|
|
|
func (this PSQL) Mv(from string, to string) error {
|
|
defer this.Close()
|
|
return ErrNotValid
|
|
}
|
|
|
|
func (this PSQL) Meta(path string) Metadata {
|
|
location, _ := getPath(path)
|
|
return Metadata{
|
|
CanCreateDirectory: NewBool(false),
|
|
CanCreateFile: func(l LocationRow) *bool {
|
|
if l.table == "" {
|
|
return NewBool(false)
|
|
}
|
|
return NewBool(true)
|
|
}(location),
|
|
CanRename: NewBool(false),
|
|
CanDelete: func(l LocationRow) *bool {
|
|
if l.table == "" {
|
|
return NewBool(false)
|
|
}
|
|
return NewBool(true)
|
|
}(location),
|
|
CanMove: NewBool(false),
|
|
CanUpload: func(l LocationRow) *bool {
|
|
if l.row == "" {
|
|
return NewBool(false)
|
|
}
|
|
return NewBool(true)
|
|
}(location),
|
|
RefreshOnCreate: NewBool(true),
|
|
HideExtension: NewBool(true),
|
|
}
|
|
}
|
|
|
|
func (this PSQL) Close() error {
|
|
this.db.Close()
|
|
return nil
|
|
}
|