mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-27 19:53:41 +08:00
125 lines
2.5 KiB
Go
125 lines
2.5 KiB
Go
package plg_backend_local
|
|
|
|
import (
|
|
. "github.com/mickael-kerjean/filestash/server/common"
|
|
"golang.org/x/crypto/bcrypt"
|
|
"io"
|
|
"os"
|
|
"os/user"
|
|
)
|
|
|
|
func init() {
|
|
Backend.Register("local", &Local{})
|
|
}
|
|
|
|
type Local struct{}
|
|
|
|
func (this Local) Init(params map[string]string, app *App) (IBackend, error) {
|
|
backend := &Local{}
|
|
if params["password"] == Config.Get("general.secret_key").String() {
|
|
return backend, nil
|
|
} else if err := bcrypt.CompareHashAndPassword(
|
|
[]byte(Config.Get("auth.admin").String()),
|
|
[]byte(params["password"]),
|
|
); err == nil {
|
|
return backend, nil
|
|
}
|
|
return nil, ErrAuthenticationFailed
|
|
}
|
|
|
|
func (this Local) LoginForm() Form {
|
|
return Form{
|
|
Elmnts: []FormElement{
|
|
{
|
|
Name: "type",
|
|
Type: "hidden",
|
|
Value: "local",
|
|
},
|
|
{
|
|
Name: "password",
|
|
Type: "password",
|
|
Placeholder: "Admin Password",
|
|
},
|
|
{
|
|
Name: "path",
|
|
Type: "text",
|
|
Placeholder: "Path",
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (this Local) Home() (string, error) {
|
|
if home, err := os.UserHomeDir(); err == nil {
|
|
return ensurePath(home), nil
|
|
}
|
|
if currentUser, err := user.Current(); err == nil && currentUser.HomeDir != "" {
|
|
return ensurePath(currentUser.HomeDir), nil
|
|
}
|
|
return "/", nil
|
|
}
|
|
|
|
func ensurePath(path string) string {
|
|
if _, err := os.Stat(path); err != nil {
|
|
return "/"
|
|
}
|
|
return path
|
|
}
|
|
|
|
func (this Local) Ls(path string) ([]os.FileInfo, error) {
|
|
f, err := SafeOsOpenFile(path, os.O_RDONLY, os.ModePerm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return f.Readdir(-1)
|
|
}
|
|
|
|
func (this Local) Cat(path string) (io.ReadCloser, error) {
|
|
f, err := SafeOsOpenFile(path, os.O_RDONLY, os.ModePerm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
fs, err := f.Stat()
|
|
if err != nil {
|
|
f.Close()
|
|
return nil, err
|
|
} else if fs.IsDir() {
|
|
f.Close()
|
|
return nil, ErrNotFound
|
|
}
|
|
return f, nil
|
|
}
|
|
|
|
func (this Local) Mkdir(path string) error {
|
|
return SafeOsMkdir(path, 0755)
|
|
}
|
|
|
|
func (this Local) Rm(path string) error {
|
|
return SafeOsRemoveAll(path)
|
|
}
|
|
|
|
func (this Local) Mv(from, to string) error {
|
|
return SafeOsRename(from, to)
|
|
}
|
|
|
|
func (this Local) Save(path string, content io.Reader) error {
|
|
f, err := SafeOsOpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0664)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = io.Copy(f, content)
|
|
return err
|
|
}
|
|
|
|
func (this Local) Touch(path string) error {
|
|
f, err := SafeOsOpenFile(path, os.O_WRONLY|os.O_CREATE, os.ModePerm)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, err = f.Write([]byte("")); err != nil {
|
|
f.Close()
|
|
return err
|
|
}
|
|
return f.Close()
|
|
}
|