Skip to content

Commit 5c52314

Browse files
committed
feat: enable upload/mkdir/delete for specified users
1 parent 251195b commit 5c52314

File tree

11 files changed

+374
-191
lines changed

11 files changed

+374
-191
lines changed

README.md

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ go build main.go
2020
Will generate executable file "main" in current directory.
2121

2222
## Examples
23-
Start server on port 8080, root directory is current working directory:
23+
Start server on port 8080, root directory is current working directory:
2424
```sh
2525
ghfs -l 8080
2626
```
@@ -172,13 +172,33 @@ ghfs [options]
172172
--header-dir <separator><fs-path><separator><name><separator><value> ...
173173
Similar to --header, but use file system path instead of url path.
174174
175+
--user [<username>]:[<password>] ...
176+
Specify users for current virtual host for Basic Auth, empty username and/or password is allowed.
177+
--user-base64 [<username>]:[<base64-password>] ...
178+
--user-md5 [<username>]:<md5-password> ...
179+
--user-sha1 [<username>]:<sha1-password> ...
180+
--user-sha256 [<username>]:<sha256-password> ...
181+
--user-sha512 [<username>]:<sha512-password> ...
182+
Specify users for Basic Auth, with encoded password.
183+
184+
--global-auth
185+
Use Basic Auth for all url path.
186+
--auth <url-path> ...
187+
--auth-user <separator><url-path>[<separator><allowed-username>...] ...
188+
Use Basic Auth for specific url paths(and sub paths).
189+
--auth-dir <fs-path> ...
190+
--auth-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
191+
Use Basic Auth for specific file system paths(and sub paths).
192+
175193
-U|--global-upload
176194
Allow upload files for all url paths.
177195
Use it with care.
178196
-u|--upload <url-path> ...
197+
--upload-user <separator><url-path>[<separator><allowed-username>...] ...
179198
Set url paths(and sub paths) that allows to upload files.
180199
Use it with care.
181200
--upload-dir <fs-path> ...
201+
--upload-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
182202
Similar to --upload, but use file system path instead of url path.
183203
Use it with care.
184204
@@ -191,8 +211,10 @@ ghfs [options]
191211
--global-mkdir
192212
Allow create sub directory under all url paths.
193213
--mkdir <url-path> ...
214+
--mkdir-user <separator><url-path>[<separator><allowed-username>...] ...
194215
Allow create sub directory under specific url paths(and sub paths).
195216
--mkdir-dir <fs-path> ...
217+
--mkdir-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
196218
Similar to --mkdir, but use file system path instead of url path.
197219
198220
Notes for mkdir options:
@@ -201,8 +223,10 @@ ghfs [options]
201223
--global-delete
202224
Allow delete items under all url paths.
203225
--delete <url-path> ...
226+
--delete-user <separator><url-path>[<separator><allowed-username>...] ...
204227
Allow delete items under specific url paths(and sub paths).
205228
--delete-dir <fs-path> ...
229+
--delete-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
206230
Similar to --delete, but use file system path instead of url path.
207231
208232
Notes for delete options:
@@ -226,24 +250,6 @@ ghfs [options]
226250
--cors-dir <fs-path> ...
227251
Allow CORS requests for specific file system paths(and sub paths).
228252
229-
--user [<username>]:[<password>] ...
230-
Specify users for current virtual host for Basic Auth, empty username and/or password is allowed.
231-
--user-base64 [<username>]:[<base64-password>] ...
232-
--user-md5 [<username>]:<md5-password> ...
233-
--user-sha1 [<username>]:<sha1-password> ...
234-
--user-sha256 [<username>]:<sha256-password> ...
235-
--user-sha512 [<username>]:<sha512-password> ...
236-
Specify users for Basic Auth, with encoded password.
237-
238-
--global-auth
239-
Use Basic Auth for all url path.
240-
--auth <url-path> ...
241-
--auth-user <separator><url-path>[<separator><allowed-username>...] ...
242-
Use Basic Auth for specific url paths(and sub paths).
243-
--auth-dir <fs-path> ...
244-
--auth-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
245-
Use Basic Auth for specific file system paths(and sub paths).
246-
247253
-c|--cert <file> ...
248254
Specify TLS certificate file.
249255

README.zh-CN.md

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,33 @@ ghfs [选项]
163163
--header-dir <分隔符><文件系统路径><分隔符><名称><分隔符><值> ...
164164
与--header类似,但指定的是文件系统路径,而不是URL路径。
165165
166+
--user [<用户名>]:[<密码>] ...
167+
为当前虚拟主机指定用于http基本验证的用户,允许空的用户名和/或密码。
168+
--user-base64 [<用户名>]:[<base64密码>] ...
169+
--user-md5 [<用户名>]:<md5密码> ...
170+
--user-sha1 [<用户名>]:<sha1密码> ...
171+
--user-sha256 [<用户名>]:<sha256密码> ...
172+
--user-sha512 [<用户名>]:<sha512密码> ...
173+
指定http基本验证的用户,对密码使用特定的编码。
174+
175+
--global-auth
176+
对所有URL路径启用http基本验证(Basic Auth)。
177+
--auth <URL路径> ...
178+
--auth-user <分隔符><URL路径>[<分隔符><允许的用户名>...] ...
179+
对指定URL路径(及子路径)启用http基本验证。
180+
--auth-dir <文件系统路径> ...
181+
--auth-dir-user <分隔符><文件系统路径>[<分隔符><允许的用户名>...] ...
182+
对指定文件系统路径(及子路径)启用http基本验证。
183+
166184
-U|--global-upload
167185
对所有URL路径开启上传权限。
168186
请谨慎使用。
169187
-u|--upload <URL路径> ...
188+
--upload-user <分隔符><URL路径>[<分隔符><允许的用户名>...] ...
170189
设置允许上传的URL路径(及子路径)。
171190
请谨慎使用。
172191
--upload-dir <文件系统路径> ...
192+
--upload-dir-user <分隔符><文件系统路径>[<分隔符><允许的用户名>...] ...
173193
与--upload类似,但指定的是文件系统路径,而不是URL路径。
174194
175195
上传选项注意事项:
@@ -181,8 +201,10 @@ ghfs [选项]
181201
--global-mkdir
182202
对所有URL路径开启创建子目录权限。
183203
--mkdir <URL路径> ...
204+
--mkdir-user <分隔符><URL路径>[<分隔符><允许的用户名>...] ...
184205
设置允许创建子目录的URL路径(及子路径)。
185206
--mkdir-dir <文件系统路径> ...
207+
--mkdir-dir-user <分隔符><文件系统路径>[<分隔符><允许的用户名>...] ...
186208
与--mkdir类似,但指定的是文件系统路径,而不是URL路径。
187209
188210
创建子目录选项注意事项:
@@ -191,8 +213,10 @@ ghfs [选项]
191213
--global-delete
192214
对所有URL路径开启删除子项权限。
193215
--delete <URL路径> ...
216+
--delete-user <分隔符><URL路径>[<分隔符><允许的用户名>...] ...
194217
设置允许删除子项的URL路径(及子路径)。
195218
--delete-dir <文件系统路径> ...
219+
--delete-dir-user <分隔符><文件系统路径>[<分隔符><允许的用户名>...] ...
196220
与--delete类似,但指定的是文件系统路径,而不是URL路径。
197221
198222
删除选项注意事项:
@@ -216,24 +240,6 @@ ghfs [选项]
216240
--cors-dir <文件系统路径> ...
217241
接受指定文件系统路径(及子路径)的CORS跨域请求。
218242
219-
--user [<用户名>]:[<密码>] ...
220-
为当前虚拟主机指定用于http基本验证的用户,允许空的用户名和/或密码。
221-
--user-base64 [<用户名>]:[<base64密码>] ...
222-
--user-md5 [<用户名>]:<md5密码> ...
223-
--user-sha1 [<用户名>]:<sha1密码> ...
224-
--user-sha256 [<用户名>]:<sha256密码> ...
225-
--user-sha512 [<用户名>]:<sha512密码> ...
226-
指定http基本验证的用户,对密码使用特定的编码。
227-
228-
--global-auth
229-
对所有URL路径启用http基本验证(Basic Auth)。
230-
--auth <URL路径> ...
231-
--auth-user <分隔符><URL路径>[<分隔符><允许的用户名>...] ...
232-
对指定URL路径(及子路径)启用http基本验证。
233-
--auth-dir <文件系统路径> ...
234-
--auth-dir-user <分隔符><文件系统路径>[<分隔符><允许的用户名>...] ...
235-
对指定文件系统路径(及子路径)启用http基本验证。
236-
237243
-c|--cert <证书文件> ...
238244
指定TLS证书文件。
239245

src/param/cli.go

Lines changed: 97 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -75,49 +75,49 @@ func NewCliCmd() *goNixArgParser.Command {
7575
err = options.AddFlagValues("authdirsusers", "--auth-dir-user", "", nil, "file system path that require Basic Auth for specific users, <sep><fs-path>[<sep><user>...]")
7676
serverError.CheckFatal(err)
7777

78-
err = options.AddFlagValues("globalrestrictaccess", "--global-restrict-access", "GHFS_GLOBAL_RESTRICT_ACCESS", []string{}, "restrict access to all url paths from current host, with optional extra allow list")
78+
err = options.AddFlags("globalupload", []string{"-U", "--global-upload"}, "", "allow upload files for all url paths")
7979
serverError.CheckFatal(err)
8080

81-
err = options.AddFlagValues("restrictaccessurls", "--restrict-access", "", []string{}, "restrict access to specific url paths from current host, with optional extra allow list, <sep><url-path>[<sep><allowed-host>...]")
81+
err = options.AddFlagsValues("uploadurls", []string{"-u", "--upload"}, "", nil, "url path that allow upload files")
8282
serverError.CheckFatal(err)
8383

84-
err = options.AddFlagValues("restrictaccessdirs", "--restrict-access-dir", "", []string{}, "restrict access to specific file system paths from current host, with optional extra allow list, <sep><fs-path>[<sep><allowed-host>...]")
84+
err = options.AddFlagValues("uploadurlsusers", "--upload-user", "", nil, "url path that allow upload files for specific users, <sep><url-path>[<sep><user>...]")
8585
serverError.CheckFatal(err)
8686

87-
err = options.AddFlagValues("globalheaders", "--global-header", "GHFS_GLOBAL_HEADER", []string{}, "custom headers for all url paths, e.g. <name>:<value>")
87+
err = options.AddFlagsValues("uploaddirs", []string{"-p", "--upload-dir"}, "", nil, "file system path that allow upload files")
8888
serverError.CheckFatal(err)
8989

90-
err = options.AddFlagValues("headersurls", "--header", "", []string{}, "url path for custom headers, <sep><url><sep><name><sep><value>")
90+
err = options.AddFlagValues("uploaddirsusers", "--upload-dir-user", "", nil, "file system path that allow upload files for specific users, <sep><fs-path>[<sep><user>...]")
9191
serverError.CheckFatal(err)
9292

93-
err = options.AddFlagValues("headersdirs", "--header-dir", "", []string{}, "file system path for custom headers, <sep><dir><sep><name><sep><value>")
93+
err = options.AddFlag("globalmkdir", "--global-mkdir", "", "allow mkdir files for all url paths")
9494
serverError.CheckFatal(err)
9595

96-
err = options.AddFlags("globalupload", []string{"-U", "--global-upload"}, "", "allow upload files for all url paths")
96+
err = options.AddFlagValues("mkdirurls", "--mkdir", "", nil, "url path that allow mkdir files")
9797
serverError.CheckFatal(err)
9898

99-
err = options.AddFlagsValues("uploadurls", []string{"-u", "--upload"}, "", nil, "url path that allow upload files")
99+
err = options.AddFlagValues("mkdirurlsusers", "--mkdir-user", "", nil, "url path that allow mkdir files for specific users, <sep><url-path>[<sep><user>...]")
100100
serverError.CheckFatal(err)
101101

102-
err = options.AddFlagsValues("uploaddirs", []string{"-p", "--upload-dir"}, "", nil, "file system path that allow upload files")
102+
err = options.AddFlagValues("mkdirdirs", "--mkdir-dir", "", nil, "file system path that allow mkdir files")
103103
serverError.CheckFatal(err)
104104

105-
err = options.AddFlag("globalmkdir", "--global-mkdir", "", "allow mkdir files for all url paths")
105+
err = options.AddFlagValues("mkdirdirsusers", "--mkdir-dir-user", "", nil, "file system path that allow mkdir files for specific users, <sep><fs-path>[<sep><user>...]")
106106
serverError.CheckFatal(err)
107107

108-
err = options.AddFlagValues("mkdirurls", "--mkdir", "", nil, "url path that allow mkdir files")
108+
err = options.AddFlag("globaldelete", "--global-delete", "", "allow delete files for all url paths")
109109
serverError.CheckFatal(err)
110110

111-
err = options.AddFlagValues("mkdirdirs", "--mkdir-dir", "", nil, "file system path that allow mkdir files")
111+
err = options.AddFlagValues("deleteurls", "--delete", "", nil, "url path that allow delete files")
112112
serverError.CheckFatal(err)
113113

114-
err = options.AddFlag("globaldelete", "--global-delete", "", "allow delete files for all url paths")
114+
err = options.AddFlagValues("deleteurlsusers", "--delete-user", "", nil, "url path that allow delete files for specific users, <sep><url-path>[<sep><user>...]")
115115
serverError.CheckFatal(err)
116116

117-
err = options.AddFlagValues("deleteurls", "--delete", "", nil, "url path that allow delete files")
117+
err = options.AddFlagValues("deletedirs", "--delete-dir", "", nil, "file system path that allow delete files")
118118
serverError.CheckFatal(err)
119119

120-
err = options.AddFlagValues("deletedirs", "--delete-dir", "", nil, "file system path that allow delete files")
120+
err = options.AddFlagValues("deletedirsusers", "--delete-dir-user", "", nil, "file system path that allow delete files for specific users, <sep><fs-path>[<sep><user>...]")
121121
serverError.CheckFatal(err)
122122

123123
err = options.AddFlags("globalarchive", []string{"-A", "--global-archive"}, "GHFS_GLOBAL_ARCHIVE", "enable download archive for all directories")
@@ -138,6 +138,24 @@ func NewCliCmd() *goNixArgParser.Command {
138138
err = options.AddFlagValues("corsdirs", "--cors-dir", "", nil, "file system path that enable CORS headers")
139139
serverError.CheckFatal(err)
140140

141+
err = options.AddFlagValues("globalrestrictaccess", "--global-restrict-access", "GHFS_GLOBAL_RESTRICT_ACCESS", []string{}, "restrict access to all url paths from current host, with optional extra allow list")
142+
serverError.CheckFatal(err)
143+
144+
err = options.AddFlagValues("restrictaccessurls", "--restrict-access", "", []string{}, "restrict access to specific url paths from current host, with optional extra allow list, <sep><url-path>[<sep><allowed-host>...]")
145+
serverError.CheckFatal(err)
146+
147+
err = options.AddFlagValues("restrictaccessdirs", "--restrict-access-dir", "", []string{}, "restrict access to specific file system paths from current host, with optional extra allow list, <sep><fs-path>[<sep><allowed-host>...]")
148+
serverError.CheckFatal(err)
149+
150+
err = options.AddFlagValues("globalheaders", "--global-header", "GHFS_GLOBAL_HEADER", []string{}, "custom headers for all url paths, e.g. <name>:<value>")
151+
serverError.CheckFatal(err)
152+
153+
err = options.AddFlagValues("headersurls", "--header", "", []string{}, "url path for custom headers, <sep><url><sep><name><sep><value>")
154+
serverError.CheckFatal(err)
155+
156+
err = options.AddFlagValues("headersdirs", "--header-dir", "", []string{}, "file system path for custom headers, <sep><dir><sep><name><sep><value>")
157+
serverError.CheckFatal(err)
158+
141159
err = options.AddFlagsValues("certs", []string{"-c", "--cert"}, "GHFS_CERT", nil, "TLS certificate path")
142160
serverError.CheckFatal(err)
143161

@@ -316,6 +334,70 @@ func CmdResultsToParams(results []*goNixArgParser.ParseResult) (params Params, e
316334
// dir indexes
317335
param.DirIndexes, _ = result.GetStrings("dirindexes")
318336

337+
// users
338+
arrUsersPlain, _ := result.GetStrings("users")
339+
param.UsersPlain = entriesToUsers(arrUsersPlain)
340+
arrUsersBase64, _ := result.GetStrings("usersbase64")
341+
param.UsersBase64 = entriesToUsers(arrUsersBase64)
342+
arrUsersMd5, _ := result.GetStrings("usersmd5")
343+
param.UsersMd5 = entriesToUsers(arrUsersMd5)
344+
arrUsersSha1, _ := result.GetStrings("userssha1")
345+
param.UsersSha1 = entriesToUsers(arrUsersSha1)
346+
arrUsersSha256, _ := result.GetStrings("userssha256")
347+
param.UsersSha256 = entriesToUsers(arrUsersSha256)
348+
arrUsersSha512, _ := result.GetStrings("userssha512")
349+
param.UsersSha512 = entriesToUsers(arrUsersSha512)
350+
351+
// auth/upload/mkdir/delete/archive/cors urls/dirs
352+
param.GlobalAuth = result.HasKey("globalauth")
353+
param.AuthUrls, _ = result.GetStrings("authurls")
354+
param.AuthDirs, _ = result.GetStrings("authdirs")
355+
356+
param.GlobalUpload = result.HasKey("globalupload")
357+
param.UploadUrls, _ = result.GetStrings("uploadurls")
358+
param.UploadDirs, _ = result.GetStrings("uploaddirs")
359+
360+
param.GlobalMkdir = result.HasKey("globalmkdir")
361+
param.MkdirUrls, _ = result.GetStrings("mkdirurls")
362+
param.MkdirDirs, _ = result.GetStrings("mkdirdirs")
363+
364+
param.GlobalDelete = result.HasKey("globaldelete")
365+
param.DeleteUrls, _ = result.GetStrings("deleteurls")
366+
param.DeleteDirs, _ = result.GetStrings("deletedirs")
367+
368+
param.GlobalArchive = result.HasKey("globalarchive")
369+
param.ArchiveUrls, _ = result.GetStrings("archiveurls")
370+
param.ArchiveDirs, _ = result.GetStrings("archivedirs")
371+
372+
param.GlobalCors = result.HasKey("globalcors")
373+
param.CorsUrls, _ = result.GetStrings("corsurls")
374+
param.CorsDirs, _ = result.GetStrings("corsdirs")
375+
376+
// auth/upload/mkdir/delete urls/dirs urls users
377+
authUrlsUsers, _ := result.GetStrings("authurlsusers")
378+
param.AuthUrlsUsers = SplitAllKeyValues(authUrlsUsers)
379+
380+
authDirsUsers, _ := result.GetStrings("authdirsusers")
381+
param.AuthDirsUsers = SplitAllKeyValues(authDirsUsers)
382+
383+
uploadUrlsUsers, _ := result.GetStrings("uploadurlsusers")
384+
param.UploadUrlsUsers = SplitAllKeyValues(uploadUrlsUsers)
385+
386+
uploadDirsUsers, _ := result.GetStrings("uploaddirsusers")
387+
param.UploadDirsUsers = SplitAllKeyValues(uploadDirsUsers)
388+
389+
mkdirUrlsUsers, _ := result.GetStrings("mkdirurlsusers")
390+
param.MkdirUrlsUsers = SplitAllKeyValues(mkdirUrlsUsers)
391+
392+
mkdirDirsUsers, _ := result.GetStrings("mkdirdirsusers")
393+
param.MkdirDirsUsers = SplitAllKeyValues(mkdirDirsUsers)
394+
395+
deleteUrlsUsers, _ := result.GetStrings("deleteurlsusers")
396+
param.DeleteUrlsUsers = SplitAllKeyValues(deleteUrlsUsers)
397+
398+
deleteDirsUsers, _ := result.GetStrings("deletedirsusers")
399+
param.DeleteDirsUsers = SplitAllKeyValues(deleteDirsUsers)
400+
319401
// global restrict access
320402
if result.HasKey("globalrestrictaccess") {
321403
param.GlobalRestrictAccess, _ = result.GetStrings("globalrestrictaccess")
@@ -348,51 +430,6 @@ func CmdResultsToParams(results []*goNixArgParser.ParseResult) (params Params, e
348430
errs = append(errs, es...)
349431
param.Certificates = certs
350432

351-
// upload/mkdir/delete/archive/cors/auth urls/dirs
352-
param.GlobalUpload = result.HasKey("globalupload")
353-
param.UploadUrls, _ = result.GetStrings("uploadurls")
354-
param.UploadDirs, _ = result.GetStrings("uploaddirs")
355-
356-
param.GlobalMkdir = result.HasKey("globalmkdir")
357-
param.MkdirUrls, _ = result.GetStrings("mkdirurls")
358-
param.MkdirDirs, _ = result.GetStrings("mkdirdirs")
359-
360-
param.GlobalDelete = result.HasKey("globaldelete")
361-
param.DeleteUrls, _ = result.GetStrings("deleteurls")
362-
param.DeleteDirs, _ = result.GetStrings("deletedirs")
363-
364-
param.GlobalArchive = result.HasKey("globalarchive")
365-
param.ArchiveUrls, _ = result.GetStrings("archiveurls")
366-
param.ArchiveDirs, _ = result.GetStrings("archivedirs")
367-
368-
param.GlobalCors = result.HasKey("globalcors")
369-
param.CorsUrls, _ = result.GetStrings("corsurls")
370-
param.CorsDirs, _ = result.GetStrings("corsdirs")
371-
372-
param.GlobalAuth = result.HasKey("globalauth")
373-
param.AuthUrls, _ = result.GetStrings("authurls")
374-
param.AuthDirs, _ = result.GetStrings("authdirs")
375-
// auth urls users
376-
authUrlsUsers, _ := result.GetStrings("authurlsusers")
377-
param.AuthUrlsUsers = SplitAllKeyValues(authUrlsUsers)
378-
// auth dirs users
379-
authDirsUsers, _ := result.GetStrings("authdirsusers")
380-
param.AuthDirsUsers = SplitAllKeyValues(authDirsUsers)
381-
382-
// users
383-
arrUsersPlain, _ := result.GetStrings("users")
384-
param.UsersPlain = entriesToUsers(arrUsersPlain)
385-
arrUsersBase64, _ := result.GetStrings("usersbase64")
386-
param.UsersBase64 = entriesToUsers(arrUsersBase64)
387-
arrUsersMd5, _ := result.GetStrings("usersmd5")
388-
param.UsersMd5 = entriesToUsers(arrUsersMd5)
389-
arrUsersSha1, _ := result.GetStrings("userssha1")
390-
param.UsersSha1 = entriesToUsers(arrUsersSha1)
391-
arrUsersSha256, _ := result.GetStrings("userssha256")
392-
param.UsersSha256 = entriesToUsers(arrUsersSha256)
393-
arrUsersSha512, _ := result.GetStrings("userssha512")
394-
param.UsersSha512 = entriesToUsers(arrUsersSha512)
395-
396433
// listen
397434
listens, _ := result.GetStrings("listens")
398435
param.Listens = append(param.Listens, listens...)

0 commit comments

Comments
 (0)