Skip to content
This repository was archived by the owner on Jun 27, 2020. It is now read-only.

Commit 08e406d

Browse files
committed
feat: plugin working
License: MIT Signed-off-by: Henrique Dias <hacdias@gmail.com>
1 parent f0e2cd1 commit 08e406d

File tree

1 file changed

+65
-6
lines changed

1 file changed

+65
-6
lines changed

parser.go

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import (
77
"os"
88
"path/filepath"
99

10-
"github.com/filebrowser/filebrowser/auth"
11-
1210
"github.com/asdine/storm"
11+
"github.com/filebrowser/filebrowser/auth"
12+
"github.com/filebrowser/filebrowser/errors"
1313
"github.com/filebrowser/filebrowser/http"
1414
"github.com/filebrowser/filebrowser/settings"
15+
"github.com/filebrowser/filebrowser/storage"
1516
"github.com/filebrowser/filebrowser/storage/bolt"
16-
17+
"github.com/filebrowser/filebrowser/users"
1718
"github.com/mholt/caddy"
1819
"github.com/mholt/caddy/caddyhttp/httpserver"
1920
)
@@ -68,16 +69,31 @@ func parse(c *caddy.Controller) (*handler, error) {
6869
BaseURL: values["baseURL"],
6970
}
7071

71-
// quick setup
72+
ser.Root, err = filepath.Abs(ser.Root)
73+
if err != nil {
74+
return nil, err
75+
}
7276

7377
db, err := storm.Open(values["database"])
7478
if err != nil {
7579
return nil, err
7680
}
7781

78-
sto := bolt.NewStorage(db)
82+
sto, err := bolt.NewStorage(db)
83+
if err != nil {
84+
return nil, err
85+
}
7986

8087
set, err := sto.Settings.Get()
88+
if err == errors.ErrNotExist {
89+
err = quickSetup(sto, values)
90+
if err != nil {
91+
return nil, err
92+
}
93+
94+
set, err = sto.Settings.Get()
95+
}
96+
8197
if err != nil {
8298
return nil, err
8399
}
@@ -134,6 +150,49 @@ func parse(c *caddy.Controller) (*handler, error) {
134150
}, nil
135151
}
136152

153+
func quickSetup(sto *storage.Storage, values map[string]string) error {
154+
key, err := settings.GenerateKey()
155+
if err != nil {
156+
return err
157+
}
158+
159+
set := &settings.Settings{
160+
Key: key,
161+
Signup: false,
162+
Defaults: settings.UserDefaults{
163+
Scope: ".",
164+
Locale: "en",
165+
Perm: users.Permissions{
166+
Admin: false,
167+
Execute: true,
168+
Create: true,
169+
Rename: true,
170+
Modify: true,
171+
Delete: true,
172+
Share: true,
173+
Download: true,
174+
},
175+
},
176+
}
177+
178+
err = sto.Settings.Save(set)
179+
if err != nil {
180+
return err
181+
}
182+
183+
password, err := users.HashPwd("admin")
184+
user := &users.User{
185+
Username: "admin",
186+
Password: password,
187+
LockPassword: false,
188+
}
189+
190+
set.Defaults.Apply(user)
191+
user.Perm.Admin = true
192+
193+
return sto.Users.Save(user)
194+
}
195+
137196
var warningTemplate = `[WARNING] A database is going to be created for your File Browser
138197
instance at the following configuration:
139198
@@ -162,7 +221,7 @@ func parseDatabasePath(c *caddy.Controller, values map[string]string) error {
162221
hasher.Write([]byte(cfg.Addr.Host + cfg.Addr.Path + values["baseURL"]))
163222
sha := hex.EncodeToString(hasher.Sum(nil))
164223
database = filepath.Join(assets, sha+".db")
165-
fmt.Printf(warningTemplate, cfg.Addr.Host, cfg.Addr.Path, values["baseURL"], sha)
224+
fmt.Printf(warningTemplate+"\n", cfg.Addr.Host, cfg.Addr.Path, values["baseURL"], sha)
166225
}
167226

168227
values["database"] = database

0 commit comments

Comments
 (0)