@@ -7,15 +7,27 @@ import (
77 "os"
88 "path/filepath"
99
10+ "github.com/filebrowser/filebrowser/auth"
11+
12+ "github.com/asdine/storm"
13+ "github.com/filebrowser/filebrowser/http"
14+ "github.com/filebrowser/filebrowser/settings"
15+ "github.com/filebrowser/filebrowser/storage/bolt"
16+
1017 "github.com/mholt/caddy"
1118 "github.com/mholt/caddy/caddyhttp/httpserver"
1219)
1320
1421func parse (c * caddy.Controller ) (* handler , error ) {
1522 values := map [string ]string {
16- "baseURL" : "/" ,
17- "scope" : "." ,
18- "database" : "" ,
23+ "baseURL" : "/" ,
24+ "scope" : "." ,
25+ "database" : "" ,
26+ "auth_method" : "json" ,
27+ "auth_header" : "" ,
28+ "recaptcha_host" : "" ,
29+ "recaptcha_key" : "" ,
30+ "recaptcha_secret" : "" ,
1931 }
2032
2133 args := c .RemainingArgs ()
@@ -31,8 +43,8 @@ func parse(c *caddy.Controller) (*handler, error) {
3143 for c .NextBlock () {
3244 switch val := c .Val (); val {
3345 case "database" ,
34- "locale" ,
3546 "auth_method" ,
47+ "auth_header" ,
3648 "recaptcha_host" ,
3749 "recaptcha_key" ,
3850 "recaptcha_secret" :
@@ -51,69 +63,75 @@ func parse(c *caddy.Controller) (*handler, error) {
5163 return nil , err
5264 }
5365
54- /*
55-
56-
57- u.Scope = scope
58- u.FileSystem = fileutils.Dir(scope)
59-
60- var db *storm.DB
61- if stored, ok := databases[database]; ok {
62- db = stored
63- } else {
64- db, err = storm.Open(database)
65- databases[database] = db
66- }
67-
68- if err != nil {
69- return nil, err
70- }
66+ ser := & settings.Server {
67+ Root : values ["root" ],
68+ BaseURL : values ["baseURL" ],
69+ }
7170
72- authMethod := "default"
73- if noAuth {
74- authMethod = "none"
75- }
71+ // quick setup
7672
77- m := &l.FileBrowser{
78- BaseURL: "",
79- PrefixURL: "",
80- DefaultUser: u,
81- Auth: &l.Auth{
82- Method: authMethod,
83- },
84- ReCaptcha: &l.ReCaptcha{
85- Host: reCaptchaHost,
86- Key: reCaptchaKey,
87- Secret: reCaptchaSecret,
88- },
89- Store: &l.Store{
90- Config: bolt.ConfigStore{DB: db},
91- Users: bolt.UsersStore{DB: db},
92- Share: bolt.ShareStore{DB: db},
93- },
94- NewFS: func(scope string) l.FileSystem {
95- return fileutils.Dir(scope)
96- },
97- }
73+ db , err := storm .Open (values ["database" ])
74+ if err != nil {
75+ return nil , err
76+ }
9877
99- err = m.Setup()
100- if err != nil {
101- return nil, err
102- }
78+ sto := bolt .NewStorage (db )
10379
80+ set , err := sto .Settings .Get ()
81+ if err != nil {
82+ return nil , err
83+ }
10484
85+ var auther auth.Auther
86+
87+ switch settings .AuthMethod (values ["auth_method" ]) {
88+ case auth .MethodJSONAuth :
89+ set .AuthMethod = auth .MethodJSONAuth
90+ auther = & auth.JSONAuth {
91+ ReCaptcha : & auth.ReCaptcha {
92+ Host : values ["recaptcha_host" ],
93+ Key : values ["recaptcha_key" ],
94+ Secret : values ["recaptcha_secret" ],
95+ },
96+ }
97+ case auth .MethodNoAuth :
98+ set .AuthMethod = auth .MethodNoAuth
99+ auther = & auth.NoAuth {}
100+ case auth .MethodProxyAuth :
101+ set .AuthMethod = auth .MethodProxyAuth
102+ header := values ["auth_header" ]
103+ if header == "" {
104+ return nil , c .ArgErr ()
105+ }
106+ auther = & auth.ProxyAuth {Header : header }
107+ default :
108+ return nil , c .ArgErr ()
109+ }
105110
106- if err != nil {
107- return nil, err
108- }
111+ err = sto .Settings .Save (set )
112+ if err != nil {
113+ return nil , err
114+ }
109115
110- m.SetBaseURL(baseURL)
111- m.SetPrefixURL(strings.TrimSuffix(caddyConf.Addr.Path, "/"))
116+ err = sto .Settings .SaveServer (ser )
117+ if err != nil {
118+ return nil , err
119+ }
112120
121+ err = sto .Auth .Save (auther )
122+ if err != nil {
123+ return nil , err
124+ }
113125
114- } */
126+ httpHandler , err := http .NewHandler (sto , ser )
127+ if err != nil {
128+ return nil , err
129+ }
115130
116- return nil , nil
131+ return & handler {
132+ Handler : httpHandler ,
133+ baseURL : values ["baseURL" ],
134+ }, nil
117135}
118136
119137var warningTemplate = `[WARNING] A database is going to be created for your File Browser
0 commit comments