@@ -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+
137196var warningTemplate = `[WARNING] A database is going to be created for your File Browser
138197instance 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