https://github.com/kernelerr/courier-backend-v1
北邮Paste Bin初代后端代码。
https://github.com/kernelerr/courier-backend-v1
Last synced: about 1 month ago
JSON representation
北邮Paste Bin初代后端代码。
- Host: GitHub
- URL: https://github.com/kernelerr/courier-backend-v1
- Owner: KernelErr
- License: mpl-2.0
- Created: 2020-12-09T15:18:33.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-12-09T15:20:09.000Z (over 5 years ago)
- Last Synced: 2025-03-09T03:07:33.288Z (over 1 year ago)
- Language: Python
- Homepage:
- Size: 12.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Courier Backend
这是北邮Paste Bin,或内部代号Courier的初代后端代码,现以MPL 2.0协议开源。北邮Paste Bin是一款基于MongoDB和S3服务的代码、文件分享应用。
## 依赖
- FastAPI
- S3-like
- MongoDB
## API参考文档
#### 登录用户
Endpoint: /v1/user
Method: Post
Body: JSON
```json
{
"username": "111",
"password": "123",
"type": 1
}
```
username - 用户名
password - 密码
type - 认证类型,目前只有1
Response: JSON
```json
{
"token": "RtqSjc21xkxEqD7e6hFn5vr37QpTFVa5"
}
```
代表当前用户的Token
#### 上传代码/文件
Endpoint: /v1/record
Method: Post
Authoritarian: Bearer Token
Body: JSON
```json
{
"nickname":"li",
"validPeriod": 3,
"contentType": "application/x-iso9660-image",
"contentLength": 2502909952,
"contentHash": "rA1gLZ8LdHJcADtqWhGShg==",
"filename": "System.iso"
}
```
nickname - 用户填写的昵称
validPeriod - 有效期,整数天数
contentType - 文件类型,如果为代码的话使用“text/语言”,如"text/python",文件则保持原状
contentLength - 文件长度
contentHash - 2进制MD5哈希后Base64,openssl的生成方法是`openssl dgst -md5 -binary System.iso | base64`
fileName - 文件名称,注意,如果用户没有指定代码的文件名称的话,那就生成`语言 日期.后缀`,如`Python 2020-11-3 21:24.py`
Response: JSON
```json
{
"link": "BKMTjFc3",
"validPeriod": 3,
"endpoint": "http://127.0.0.1:9000/***********",
"headers": {
"Content-Type": "application/x-iso9660-image",
"Content-Length": 2502909952,
"Content-MD5": "rA1gLZ8LdHJcADtqWhGShg==",
"x-amz-meta-link": "QktNVGpGYzM=",
"x-amz-meta-nickname": "bGk=",
"x-amz-meta-filename": "*********",
"x-amz-meta-validperiod": "Mw==",
"x-amz-meta-token": "*********",
"x-amz-meta-crypto": "*********"
},
"cURL": "curl -X PUT -H 'Content-Type: application/x-iso9660-image' -H 'Content-Length: 2502909952' -H 'Content-MD5: rA1gLZ8LdHJcADtqWhGShg==' -H 'x-amz-meta-link: QktNVGpGYzM=' -H 'x-amz-meta-nickname: bGk=' -H 'x-amz-meta-filename: V2luZG93c183XzMy5L2NX+S4reaWh+S4k+S4mueJiC5pc28=' -H 'x-amz-meta-validperiod: Mw==' -H 'x-amz-meta-token: U2wrOVUvZk1FT0xrb240Uzg2VDRheVZYK1BVYkZnOGQ4OVRHTjhEeUJtbz0=' -H 'x-amz-meta-crypto: ZmtyMGJSSkJxZTJEVGpRS0lnb1Bmdz09' 'http://127.0.0.1:9000/***********' --data-binary [CURLFILE]"
}
```
link - 生成的短链接
validPeriod - 有效期,用于确认
endpoint - 上传文件的链接,直接put即可
headers - 上传文件应该带有的header,错误即无法上传
cURL - cURL命令示例
#### 下载文件
有两个链接,用户从 http://domain/s/link 或者 http://domain/raw/link 进入
##### s
这时候会从后台查询数据展示在网页上,注意判断是文件还是代码。(如果文件类型以text开头且大小小于3M算代码,否则让用户下载)
Endpoint: v1/record/{link}
Method: Get
Response: JSON
```json
{
"link": "HY3UZRbp",
"nickname": "li",
"filename": "sun.png",
"contentType": "image/png",
"contentLength": 4039,
"contentHash": "398319897239c86b21ad901f88dc4a4b",
"visitTimes": 2,
"endpoint": "http://127.0.0.1:9000/***********"
}
```
link - 链接
nickname - 上传者昵称
filename - 文件名
contentType - 文件类型
contentLength - 文件大小
contentHash - 十进制的md5,`md5sum`即可生成
visitTimes - 访问次数
endpoint - 直链下载地址
##### raw
会直接跳转到下载的直链地址,可以直接放进第三方下载工具。
Endpoint: /raw/{link}
## 搭建开发环境
1. 修改 `utils/config.py` 中的相关配置。
2. 安装Python依赖:
```
python -m pip install -r requirements.txt
```
3. 运行!
```
uvicorn main:app --reload
```