@@ -3,6 +3,7 @@ package param
33import (
44 "../goNixArgParser"
55 "../serverErrHandler"
6+ "errors"
67 "io/ioutil"
78 "os"
89 "strings"
@@ -50,6 +51,18 @@ func init() {
5051 err = options .AddFlagValues ("corsdirs" , "--cors-dir" , "" , nil , "file system path that enable CORS headers" )
5152 serverErrHandler .CheckFatal (err )
5253
54+ err = options .AddFlag ("globalauth" , "--global-auth" , "GHFS_GLOBAL_AUTH" , "require Basic Auth for all directories" )
55+ serverErrHandler .CheckFatal (err )
56+
57+ err = options .AddFlagValues ("authurls" , "--auth" , "" , nil , "url path that require Basic Auth" )
58+ serverErrHandler .CheckFatal (err )
59+
60+ err = options .AddFlagValues ("authdirs" , "--auth-dir" , "" , nil , "file system path that require Basic Auth" )
61+ serverErrHandler .CheckFatal (err )
62+
63+ err = options .AddFlagValues ("users" , "--user" , "" , nil , "user info: <username>:<password>" )
64+ serverErrHandler .CheckFatal (err )
65+
5366 err = options .AddFlagsValue ("key" , []string {"-k" , "--key" }, "GHFS_KEY" , "" , "TLS certificate key path" )
5467 serverErrHandler .CheckFatal (err )
5568
@@ -152,6 +165,7 @@ func doParseCli() []*Param {
152165 param .GlobalUpload = result .HasKey ("globalupload" )
153166 param .GlobalArchive = result .HasKey ("globalarchive" )
154167 param .GlobalCors = result .HasKey ("globalcors" )
168+ param .GlobalAuth = result .HasKey ("globalauth" )
155169 param .Key , _ = result .GetString ("key" )
156170 param .Cert , _ = result .GetString ("cert" )
157171 param .Hostnames , _ = result .GetStrings ("hostnames" )
@@ -198,6 +212,34 @@ func doParseCli() []*Param {
198212 arrCorsDirs , _ := result .GetStrings ("corsdirs" )
199213 param .CorsDirs = normalizeFsPaths (arrCorsDirs )
200214
215+ // normalize auth urls
216+ arrAuthUrls , _ := result .GetStrings ("authurls" )
217+ param .AuthUrls = normalizeUrlPaths (arrAuthUrls )
218+
219+ // normalize auth dirs
220+ arrAuthDirs , _ := result .GetStrings ("authdirs" )
221+ param .AuthDirs = normalizeFsPaths (arrAuthDirs )
222+
223+ // normalize users
224+ param .Users = map [string ]string {}
225+ arrUsers , _ := result .GetStrings ("users" )
226+ for _ , userEntry := range arrUsers {
227+ username := userEntry
228+ password := ""
229+
230+ colonIndex := strings .IndexByte (userEntry , ':' )
231+ if colonIndex >= 0 {
232+ username = userEntry [:colonIndex ]
233+ password = userEntry [colonIndex + 1 :]
234+ }
235+
236+ if _ , ok := param .Users [username ]; ok {
237+ serverErrHandler .CheckError (errors .New ("Duplicated username: " + username ))
238+ } else {
239+ param .Users [username ] = password
240+ }
241+ }
242+
201243 // shows
202244 shows , err := getWildcardRegexp (result .GetStrings ("shows" ))
203245 serverErrHandler .CheckFatal (err )
0 commit comments