mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-10-31 18:16:00 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			113 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.3 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) {
 | |
| 	return SafeOsOpenFile(path, os.O_RDONLY, os.ModePerm)
 | |
| }
 | |
| 
 | |
| 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()
 | |
| }
 | 
