-
Notifications
You must be signed in to change notification settings - Fork 1
/
prompt.txt
65 lines (49 loc) · 3.24 KB
/
prompt.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
你是一个资深 golang 开发工程师,你回答的所有问题都经过多次思考,尽力给出最直接和准确的答案,尽力满足需求中的所有功能点。
实现下面的工具,直接提供代码:
需要一个很简单的命令行工具,快速方便地实现启动一个 http server,核心思想就是: 简单、方便、基础能力
使用设计:
```bash
hs serve . # 默认 serve 当前目录到 0.0.0.0:80
hs serve --auth admin:passadmin:rw --auth viever:passviewer:r # 指定 ACL 的权限, r 为可查看,w 为可上传
hs serve --path /ximg:./data/img --path /:./data/ # 指定映射的路径,例如 /ximg:./data/img 意味着 把 ./data/img 下的文件通过 /ximg 这个 http 路径访问
hs serve --https ./certs/xx.pem:./certs/xx.key # 指定 https 的证书文件
hs serve --host 127.0.0.1 --port 8080 # 指定 serve 的ip及端口
hs serve --upload ./data/upload # 指定文件上传的路径
hs serve --log ./log # 指定日志文件的路径
hs serve . -d # 后台运行
hs serve . --dash # 运行管理后台 ( / 会跳转到 /_dash/ )
hs serve . --nohidding # 所有 _xx 文件 和 .xx 文件 都会显示出来 (默认不会获取到隐藏文件)
hs serve . --insecure # 非安全模式,无需鉴权,默认所有人均有查看权限,但上传依然需要鉴权
```
权限部分:
权限是一个很重要的方面,服务从全局提供 ACL 的鉴权机制,同时提供 token 的辅助方式,优先检查 ACL 权限,再检查 token 权限。
token 的实现采用 jwt 的方式。
同时,为了能够防止 jwt 生成的 token 泄漏问题,需要提供接口删除特定的 token。
为了保证 upload 的安全性,需要显式生成 token
```bash
curl http://127.0.0.1:8080/_api/token -d '{"action": "","path": "", "file": "", "maxsize": "", "expire": "3h", "reuse": 5, "user": ""}'
# action 为操作类型,仅有 read、write 两类,read 以为可以查看文件,write 为可以上传文件,为空意味着均有权限
# path 为对特定的上传地址开放,为空意味着对所有地址均无限制
# file 为仅开放特定文件名上传,为空意味着对所有文件名均无限制
# maxsize 为单次上传最大 size, 使用 5MB、1GB 这种格式
# expire token 失效的时间,使用 m、h、d 这三种单位
# reuse 可重复使用的次数(上传次数限制)
# user 对特定 user 开放
# 接口的返回值为生成的 token 值
```
为了可以查看文件信息,需要提供接口实现
```bash
curl "http://127.0.0.1:8080/_api/list?path=/img/xx&token=xxxx&page_size=20&page_count=1"
# path 为要 list 的路径地址,上面意味着访问 /img/xx 这个路径下的文件
# token 为鉴权,若已经有 basic auth 的 ACL 鉴权,或者服务为 insecure 模式,则可以省略
# page_size 为分页的每页数量
# page_count 为当前为第几页
# 接口的返回值为
# {"data": [{"Name": "xxx", "Type": "dir", "CreatedAt": "2021-02-21 12:31", "ModifiedAt": "2021-02-22 11:21"}], "page_count": 1, "pages": 4}
```
内部接口将使用 `/_api` 为根路径,需要提供的能力有:
```
/_api/token 用于生成访问的 token
/_api/list 用于获取文件信息
```
为了提供便利性,提供一个简单的 web 页面,可用于上传、下载、查看文件。