提交 4200469d 编写于 作者: 彭世瑜's avatar 彭世瑜

update doc

上级 c8c9e677
FLASK_APP=domain_admin/main.py
FLASK_ENV=development
FLASK_DEBUG=1
FLASK_RUN_HOST = '127.0.0.1'
FLASK_RUN_PORT = '5000'
\ No newline at end of file
The MIT License (MIT)
Copyright (c) 2018-present, Mouday
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
\ No newline at end of file
# 伪目标
.PHONY: dev pro dep-pro dep-pub build
.PHONY: dev build clean upload publish
# 运行开发环境
dev:
gunicorn --bind '127.0.0.1:5000' --reload domain_admin.main:app
# 运行生产环境
pro:
gunicorn --config gunicorn.conf.py domain_admin.main:app
gunicorn --bind '127.0.0.1:5000' --reload 'domain_admin.main:app'
# 打包
build:
python setup.py sdist bdist_wheel
# 发布
dep-pub:
bash publish.sh
\ No newline at end of file
# 清空打包产物
clean:
rm -rf dist build *.egg-info
# 上传打包产物到 pypi
upload:
twine check dist/*
twine upload dist/*
# 发布 make publish
publish:
make clean
make build
make upload
make clean
# Domain Admin
![PyPI](https://img.shields.io/pypi/v/domain-admin.svg)
![PyPI - Downloads](https://img.shields.io/pypi/dm/domain-admin)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/domain-admin)
![PyPI - License](https://img.shields.io/pypi/l/domain-admin)
![](https://raw.githubusercontent.com/mouday/domain-admin/master/image/logo.png)
基于Python + Vue.js 技术栈实现的域名SSL证书监测平台
......@@ -17,6 +23,9 @@
```bash
$ pip install domain_admin
# 升级到最新版本,可选
$ pip3 install -U domain-admin -i https://pypi.org/simple
# 启动运行
$ gunicorn 'domain_admin.main:app'
```
......
......@@ -33,12 +33,14 @@
GET
```
GET {{baseUrl}}/api/getCertInformation?domain=www.baidu.com
X-Token: <token>
```
POST
```
POST {{baseUrl}}/api/getCertInformation
Content-Type: application/json
X-Token: <token>
{
"domain": "www.baidu.com"
......
......@@ -21,6 +21,7 @@
```
POST {{baseUrl}}/api/addDomain
Content-Type: application/json
X-Token: <token>
{
"domain": "www.baidu.com",
......
......@@ -17,12 +17,14 @@
GET
```
GET {{baseUrl}}/api/checkDomainCert
X-Token: <token>
```
POST
```
POST {{baseUrl}}/api/checkDomainCert
Content-Type: application/json
X-Token: <token>
{}
```
......
......@@ -19,6 +19,7 @@
```
POST {{baseUrl}}/api/deleteDomainById
Content-Type: application/json
X-Token: <token>
{
"id": 1
......
# 获取用户的所有域名数据
1、请求地址:/api/getAllDomainListOfUser
2、请求方式:POST
3、请求参数
4、返回参数
| 参数 | 类型 | 说明 |
| -| - | - |
| domain | string | 查询的域名
5、请求示例
```
POST {{baseUrl}}/api/getAllDomainListOfUser
Content-Type: application/json
X-Token: <token>
{}
```
6、返回示例
```json
{
"code": 0,
"data": {
"list": [
{
"domain": "www.qq.com"
}
],
"total": 1
},
"msg": "success"
}
```
......@@ -38,6 +38,7 @@
```
POST {{baseUrl}}/api/getDomainById
Content-Type: application/json
X-Token: <token>
{
"id": 1
......
......@@ -21,6 +21,7 @@
```
POST {{baseUrl}}/api/getDomainList
Content-Type: application/json
X-Token: <token>
{
"page": 1,
......
......@@ -22,6 +22,7 @@
```
POST {{baseUrl}}/api/updateDomainCertInfoById
Content-Type: multipart/form-data
X-Token: <token>
file: (二进制)
```
......
......@@ -20,6 +20,7 @@
```
POST {{baseUrl}}/api/sendDomainInfoListEmail
Content-Type: application/json
X-Token: <token>
{
"to_addresses": ["xxx@qq.com"]
......
......@@ -17,12 +17,14 @@
GET
```
GET {{baseUrl}}/api/updateAllDomainCertInfo
X-Token: <token>
```
POST
```
POST {{baseUrl}}/api/updateAllDomainCertInfo
Content-Type: application/json
X-Token: <token>
{}
```
......
......@@ -17,12 +17,14 @@
GET
```
GET {{baseUrl}}/api/updateAllDomainCertInfoOfUser
X-Token: <token>
```
POST
```
POST {{baseUrl}}/api/updateAllDomainCertInfoOfUser
Content-Type: application/json
X-Token: <token>
{}
```
......
......@@ -22,6 +22,7 @@
```
POST {{baseUrl}}/api/updateDomainById
Content-Type: application/json
X-Token: <token>
{
"id": 1,
......
......@@ -20,6 +20,7 @@
```
POST {{baseUrl}}/api/updateDomainCertInfoById
Content-Type: application/json
X-Token: <token>
{
"id": 1
......
......@@ -19,6 +19,7 @@
```
POST {{baseUrl}}/api/addGroup
Content-Type: application/json
X-Token: <token>
{
"name": "项目1"
......
......@@ -19,6 +19,7 @@
```
POST {{baseUrl}}/api/deleteGroupById
Content-Type: application/json
X-Token: <token>
{
"id": 1
......
......@@ -25,6 +25,7 @@
```
POST {{baseUrl}}/api/getGroupById
Content-Type: application/json
X-Token: <token>
{
"id": 1
......
......@@ -20,6 +20,7 @@
```
POST {{baseUrl}}/api/getGroupList
Content-Type: application/json
X-Token: <token>
{}
```
......
......@@ -20,6 +20,7 @@
```
POST {{baseUrl}}/api/updateGroupById
Content-Type: application/json
X-Token: <token>
{
"id": 1,
......
......@@ -34,6 +34,7 @@ X-TOKEN: <token>
| /api/sendDomainInfoListEmail | 发送域名证书信息到邮箱 | [sendDomainInfoListEmail.md](/doc/domain/sendDomainInfoListEmail.md) |
| /api/checkDomainCert | 检查域名证书到期信息 | [checkDomainCert.md](/doc/domain/checkDomainCert.md) |
| /api/importDomainFromFile | 从文件导入域名 | [importDomainFromFile.md](/doc/domain/importDomainFromFile.md) |
| /api/getAllDomainListOfUser | 获取用户的所有域名数据 | [getAllDomainListOfUser.md](/doc/domain/getAllDomainListOfUser.md) |
分组管理
......@@ -45,7 +46,39 @@ X-TOKEN: <token>
| /api/updateGroupById | 更新数据 | [updateGroupById.md](/doc/group/updateGroupById.md) |
| /api/deleteGroupById | 删除分组 | [deleteGroupById.md](/doc/group/deleteGroupById.md) |
其他
用户信息管理
| 接口 | 说明 | 文档 |
| - | - | -|
| /api/getUserInfo | 获取当前用户信息 | [getUserInfo.md](/doc/user/getUserInfo.md) |
| /api/updateUserInfo | 更新当前用户信息 | [updateUserInfo.md](/doc/user/updateUserInfo.md) |
| /api/updateUserPassword | 更新用户密码 | [updateUserPassword.md](/doc/user/updateUserPassword.md) |
调度日志
| 接口 | 说明 | 文档 |
| - | - | -|
| /api/getLogSchedulerList | 获取调度日志列表 | [getLogSchedulerList.md](/doc/log_scheduler/getLogSchedulerList.md) |
系统管理 (管理员权限)
| 接口 | 说明 | 文档 |
| - | - | -|
| /api/getAllSystemConfig | 获取所有配置项 | [getAllSystemConfig.md](/doc/system_config/getAllSystemConfig.md) |
| /api/updateSystemConfig | 更新单个配置 | [updateSystemConfig.md](/doc/system_config/updateSystemConfig.md) |
用户管理 (管理员权限)
| 接口 | 说明 | 文档 |
| - | - | -|
| /api/getUserList | 获取用户列表 | [getUserList.md](/doc/user/getUserList.md) |
| /api/addUser | 添加用户 | [addUser.md](/doc/user/addUser.md) |
| /api/updateUserStatus | 更新账号可用状态 | [updateUserStatus.md](/doc/user/updateUserStatus.md) |
| /api/deleteUser | 删除用户账号 | [deleteUser.md](/doc/user/deleteUser.md) |
域名信息
| 接口 | 说明 | 文档 |
| - | - | -|
......
# 获取调度日志列表
1、请求地址:/api/getLogSchedulerList
2、请求方式:POST
3、请求参数
| 参数 | 类型 | 必须 | 说明 |
| -| - | - | - |
|page | int | 否 | 页码,默认1
|size | int | 否 | 每页数量,默认10
4、返回参数
| 参数 | 类型 | 说明 |
| -| - | - |
| id | int | 数据id
| status | bool | 状态
| error_message | string | 错误信息
| total_time | int | 执行时长
| total_time_label | string | 执行时长显示值
| create_time | datetime | 添加时间
| update_time | datetime | 更新时间
5、请求示例
```
POST {{baseUrl}}/api/getLogSchedulerList
Content-Type: application/json
X-Token: <token>
{
"page": 1,
"size": 1
}
```
6、返回示例
```json
{
"code": 0,
"data": {
"list": [
{
"create_time": "2022-10-09 18:10:00",
"error_message": "",
"id": 423,
"status": true,
"total_time": 11,
"total_time_label": "11s",
"update_time": "2022-10-09 18:10:11"
}
],
"total": 423
},
"msg": "success"
}
```
# 获取所有配置项
1、请求地址:/api/getAllSystemConfig
2、请求方式:POST
3、请求参数
4、返回参数
| 参数 | 类型 | 说明 |
| -| - | - |
| id | int | 数据id
| key | string | 键
| value | string | 值
| label | string | 显示
| placeholder | string | 输入提示
| create_time | datetime | 添加时间
| update_time | datetime | 更新时间
5、请求示例
```
POST {{baseUrl}}/api/getAllSystemConfig
Content-Type: application/json
X-Token: <token>
{}
```
6、返回示例
```json
{
"code": 0,
"data": {
"list": [
{
"id": 1,
"is_show_value": true,
"key": "mail_host",
"value": "smtp.163.com",
"label": "发件邮箱服务器地址",
"placeholder": "发件邮箱服务器地址",
"create_time": "2022-10-03 23:07:21",
"update_time": "2022-10-03 23:07:21"
}
],
"total": 9
},
"msg": "success"
}
```
# 更新单个配置
1、请求地址:/api/updateSystemConfig
2、请求方式:POST
3、请求参数
| 参数 | 类型 | 必须 | 说明 |
| -| - | - | - |
| key | string | 键
| value | string | 值
4、返回参数
5、请求示例
```
POST {{baseUrl}}/api/updateSystemConfig
Content-Type: application/json
X-Token: <token>
{
"key": "mail_username",
"value": "123@qq.com"
}
```
6、返回示例
```json
{
"code": 0,
"data": null,
"msg": "success"
}
```
# 添加用户
1、请求地址:/api/addUser
2、请求方式:POST
3、请求参数
| 参数 | 类型 | 必须 | 说明 |
| -| - | - | - |
| username | string | 用户名
| password | string | 登录密码
4、返回参数
5、请求示例
```
POST {{baseUrl}}/api/addUser
Content-Type: application/json
X-Token: <token>
{
"username": "mouday",
"password": "ooxx"
}
```
6、返回示例
```json
{
"code": 0,
"data": null,
"msg": "success"
}
```
# 删除用户账号
1、请求地址:/api/deleteUser
2、请求方式:POST
3、请求参数
| 参数 | 类型 | 必须 | 说明 |
| -| - | - | - |
| user_id | int | 是 | 用户id
4、返回参数
5、请求示例
```
POST {{baseUrl}}/api/deleteUser
Content-Type: application/json
X-Token: <token>
{
"user_id": 1
}
```
6、返回示例
```json
{
"code": 0,
"data": null,
"msg": "success"
}
```
# 获取当前用户信息
1、请求地址:/api/getUserInfo
2、请求方式:POST
3、请求参数
4、返回参数
| 参数 | 类型 | 说明 |
| -| - | - |
| id | int | 用户id
| username | string | 用户名
| avatar_url | string | 头像url
| before_expire_days | int | 过期前多少天提醒
| email_list | string | 邮件列表
| create_time | datetime | 添加时间
| update_time | datetime | 更新时间
5、请求示例
```
POST {{baseUrl}}/api/getUserInfo
Content-Type: application/json
X-Token: <token>
{}
```
6、返回示例
```json
{
"code": 0,
"data": {
"id": 1,
"username": "admin",
"avatar_url": "",
"before_expire_days": 3,
"email_list": [
"1940607002@qq.com"
],
"status": true,
"create_time": "2022-10-03 23:07:21",
"update_time": "2022-10-08 16:54:08"
},
"msg": "success"
}
```
\ No newline at end of file
# 获取用户列表
1、请求地址:/api/getUserList
2、请求方式:POST
3、请求参数
| 参数 | 类型 | 必须 | 说明 |
| -| - | - | - |
|page | int | 否 | 页码,默认1
|size | int | 否 | 每页数量,默认10
|keyword | string | 否 | 搜索关键词
4、返回参数
| 参数 | 类型 | 说明 |
| -| - | - |
| id | int | 用户id
| username | string | 用户名
| avatar_url | string | 头像url
| before_expire_days | int | 过期前多少天提醒
| email_list | string | 邮件列表
| create_time | datetime | 添加时间
| update_time | datetime | 更新时间
5、请求示例
```
POST {{baseUrl}}/api/getUserList
Content-Type: application/json
X-Token: <token>
{
"page": 1,
"size": 10,
"keyword": ""
}
```
6、返回示例
```json
{
"code": 0,
"data": {
"list": [
{
"id": 1,
"username": "admin",
"status": true,
"avatar_url": "https://www.image.com/image.png",
"before_expire_days": 1,
"email_list": [
"123@qq.com"
],
"create_time": "2022-10-03 23:07:21",
"update_time": "2022-10-11 17:52:56"
}
],
"total": 1
},
"msg": "success"
}
```
# 更新当前用户信息
1、请求地址:/api/updateUserInfo
2、请求方式:POST
3、请求参数
| 参数 | 类型 | 必须 | 说明 |
| -| - | - | - |
| avatar_url | string | 是 | 头像url
| before_expire_days | int | 是 | 过期前多少天提醒
| email_list | string | 是 | 邮件列表
4、返回参数
5、请求示例
```
POST {{baseUrl}}/api/updateDomainById
Content-Type: application/json
X-Token: <token>
{
"avatar_url": "https://www.image.com/image.png",
"email_list": ["123@qq.com"],
"before_expire_days": 1
}
```
6、返回示例
```json
{
"code": 0,
"data": null,
"msg": "success"
}
```
# 更新用户密码
1、请求地址:/api/updateUserPassword
2、请求方式:POST
3、请求参数
| 参数 | 类型 | 必须 | 说明 |
| -| - | - | - |
| password | string | 是 | 旧密码
| new_password | string | 是 | 新密码
4、返回参数
5、请求示例
```
POST {{baseUrl}}/api/updateUserPassword
Content-Type: application/json
X-Token: <token>
{
"password": "123456",
"new_password": "234567"
}
```
6、返回示例
```json
{
"code": 0,
"data": null,
"msg": "success"
}
```
# 更新账号可用状态
1、请求地址:/api/updateUserStatus
2、请求方式:POST
3、请求参数
| 参数 | 类型 | 必须 | 说明 |
| -| - | - | - |
| user_id | int | 是 | 用户id
| status | bool | 是 | 状态
4、返回参数
5、请求示例
```
POST {{baseUrl}}/api/updateUserStatus
Content-Type: application/json
X-Token: <token>
{
"user_id": 1,
"status": false
}
```
6、返回示例
```json
{
"code": 0,
"data": null,
"msg": "success"
}
```
......@@ -11,7 +11,7 @@ from domain_admin.model.log_scheduler_model import LogSchedulerModel
def get_log_scheduler_list():
"""
获取域名列表
获取调度日志列表
:return:
"""
current_user_id = g.user_id
......
......@@ -9,7 +9,7 @@ from domain_admin.utils import datetime_util
def update_system_config():
"""
更新配置
更新单个配置
:return:
"""
key = request.json['key']
......@@ -36,15 +36,6 @@ def get_all_system_config():
"""
lst = SystemModel.select()
def hidden_value(item):
if item.is_show_value == False:
if item.value:
item.value = '******'
return item
# lst = list(map(lambda x: hidden_value(x), lst))
return {
'list': lst,
'total': len(lst)
......
......@@ -24,7 +24,7 @@ def get_user_info():
return model_to_dict(
model=row,
exclude=[UserModel.password],
exclude=[UserModel.password, UserModel.email_list_raw],
extra_attrs=['email_list']
)
......@@ -76,7 +76,7 @@ def update_user_password():
def get_user_list():
"""
获取当前用户信息
获取用户列表
:return:
"""
page = request.json.get('page', 1)
......@@ -96,6 +96,10 @@ def get_user_list():
lst = list(map(lambda m: model_to_dict(
model=m,
exclude=[
UserModel.password,
UserModel.email_list_raw,
],
extra_attrs=[
'email_list',
]
......@@ -109,7 +113,7 @@ def get_user_list():
def add_user():
"""
获取当前用户信息
添加用户
:return:
"""
username = request.json.get('username')
......@@ -130,7 +134,7 @@ def add_user():
def update_user_status():
"""
获取当前用户信息
更新账号可用状态
:return:
"""
user_id = request.json.get('user_id')
......@@ -145,7 +149,7 @@ def update_user_status():
def delete_user():
"""
获取当前用户信息
删除用户账号
:return:
"""
user_id = request.json.get('user_id')
......
# -*- coding: utf-8 -*-
import os
from flask import request, make_response, send_file
from flask_cors import CORS
from werkzeug.middleware.proxy_fix import ProxyFix
from werkzeug.utils import safe_join
from domain_admin.config import TEMP_DIR
from domain_admin.model.base_model import db
from domain_admin.model.database import init_database
......@@ -14,10 +14,11 @@ from domain_admin.utils.flask_ext import handler
from domain_admin.utils.flask_ext import register
from domain_admin.utils.flask_ext.flask_app import FlaskApp
app = FlaskApp(__name__,
static_folder="public",
static_url_path="/"
)
app = FlaskApp(
import_name=__name__,
static_folder="public",
static_url_path="/"
)
@app.before_request
......@@ -48,20 +49,28 @@ def temp(filename):
return send_file(safe_join(TEMP_DIR, filename))
def app_init(app):
def init_app(flask_app):
"""
初始化app
:param flask_app:
:return:
"""
# 路由
register.register_app_routers(app, api_map.routes)
register.register_app_routers(flask_app, api_map.routes)
# 全局异常捕获,也相当于一个视图函数
app.register_error_handler(Exception, handler.error_handler)
flask_app.register_error_handler(Exception, handler.error_handler)
app.wsgi_app = ProxyFix(app.wsgi_app)
flask_app.wsgi_app = ProxyFix(flask_app.wsgi_app)
CORS(app, supports_credentials=True)
# 允许跨域
CORS(flask_app, supports_credentials=True)
# 初始化数据库
init_database()
# 启动定时器
scheduler_service.init_scheduler()
app_init(app)
init_app(app)
......@@ -55,7 +55,7 @@ def init_table_data():
},
{
'key': 'mail_alias',
'value': 'Domain-Admin',
'value': 'Domain Admin',
'label': '发件人邮箱名称',
'placeholder': '发件人邮箱名称',
'is_show_value': True,
......
......@@ -30,7 +30,6 @@ routes = {
"/api/sendDomainInfoListEmail": domain_api.send_domain_info_list_email,
"/api/checkDomainCert": domain_api.check_domain_cert,
"/api/importDomainFromFile": domain_api.import_domain_from_file,
# "/api/exportDomainToFile": domain_api.export_domain_to_file,
"/api/getAllDomainListOfUser": domain_api.get_all_domain_list_of_user,
# 分组管理
......@@ -40,21 +39,22 @@ routes = {
"/api/getGroupList": group_api.get_group_list,
"/api/getGroupById": group_api.get_group_by_id,
# 系统管理
'/api/getAllSystemConfig': system_api.get_all_system_config,
'/api/updateSystemConfig': system_api.update_system_config,
# 用户
'/api/getUserInfo': user_api.get_user_info,
'/api/updateUserInfo': user_api.update_user_info,
'/api/updateUserPassword': user_api.update_user_password,
# 用户管理
# 调度日志
'/api/getLogSchedulerList': log_scheduler_api.get_log_scheduler_list,
# 系统管理 (管理员权限)
'/api/getAllSystemConfig': system_api.get_all_system_config,
'/api/updateSystemConfig': system_api.update_system_config,
# 用户管理 (管理员权限)
'/api/getUserList': user_api.get_user_list,
'/api/addUser': user_api.add_user,
'/api/updateUserStatus': user_api.update_user_status,
'/api/deleteUser': user_api.delete_user,
'/api/getLogSchedulerList': log_scheduler_api.get_log_scheduler_list,
}
# -*- coding: utf-8 -*-
from datetime import datetime
import math
from time import gmtime, strftime
"""
datetime_util.py
"""
import pendulum
from datetime import datetime
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
......@@ -49,6 +49,11 @@ def format_datetime_label(date_time):
def seconds_for_human(seconds):
"""
将时间格式化为: 1d 2h 3m 4s
:param seconds:
:return:
"""
second = 1
minute = second * 60
hour = minute * 12
......@@ -56,20 +61,17 @@ def seconds_for_human(seconds):
lst = []
if seconds > 0:
if seconds > day:
days, seconds = divmod(seconds, day)
if days > 0:
lst.append(str(days) + 'd')
lst.append(str(days) + 'd')
if seconds > 0:
if seconds > hour:
hours, seconds = divmod(seconds, hour)
if hours > 0:
lst.append(str(hours) + 'h')
lst.append(str(hours) + 'h')
if seconds > 0:
if seconds > minute:
minutes, seconds = divmod(seconds, minute)
if minutes > 0:
lst.append(str(minutes) + 'm')
lst.append(str(minutes) + 'm')
if seconds > 0:
lst.append(str(seconds) + 's')
......@@ -78,4 +80,4 @@ def seconds_for_human(seconds):
if __name__ == '__main__':
print(seconds_for_human(0.010))
print(seconds_for_human(100.010))
# -*- coding: utf-8 -*-
import yaml
def read_yaml_file(filename):
with open(filename, "rb") as f:
return yaml.safe_load(f)
# -*- coding: utf-8 -*-
"""
生产环境
$ gunicorn --config gunicorn.conf.py main:app
"""
import multiprocessing
import os
# 日志文件夹
LOG_DIR = 'logs'
if not os.path.exists(LOG_DIR):
os.mkdir(LOG_DIR)
def resolve_file(filename):
return os.path.join(LOG_DIR, filename)
def get_workers():
return multiprocessing.cpu_count() * 2 + 1
# 启动端口
bind = "0.0.0.0:5001"
# 日志文件
loglevel = 'debug'
pidfile = 'gunicorn.pid'
accesslog = resolve_file("gunicorn-access.log")
errorlog = resolve_file("gunicorn-error.log")
# 启动的进程数
# workers = get_workers()
# 需要定时器,只能开一个进程
workers = 1
worker_class = 'gevent'
# 启动时钩子
def on_starting(server):
ip, port = server.address[0]
print('server address:', f'http://{ip}:{port}')
......@@ -110,3 +110,11 @@ X-TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjUzMj
{}
###
POST {{baseUrl}}/api/getAllDomainListOfUser
Content-Type: application/json
X-TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{}
###
# For a quick start check out our HTTP Requests collection (Tools|HTTP Client|Open HTTP Requests Collection).
#
# Following HTTP Request Live Templates are available:
# * 'gtrp' and 'gtr' create a GET request with or without query parameters;
# * 'ptr' and 'ptrp' create a POST request with a simple or parameter-like body;
# * 'mptr' and 'fptr' create a POST request to submit a form with a text or file field (multipart/form-data);
POST {{baseUrl}}/api/getLogSchedulerList
Content-Type: application/json
X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{}
###
\ No newline at end of file
......@@ -7,12 +7,12 @@
POST {{baseUrl}}/api/getAllSystemConfig
Content-Type: application/json
X-TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjUzMjA3ODN9.pLfVwuxWvBUr4GtJdmBzXs_X8fieaPesgLwgdsIGnv4
X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
###
POST {{baseUrl}}/api/updateSystemConfig
Content-Type: application/json
X-TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjUzMjA3ODN9.pLfVwuxWvBUr4GtJdmBzXs_X8fieaPesgLwgdsIGnv4
X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{
"key": "mail_username",
......
......@@ -7,9 +7,66 @@
POST {{baseUrl}}/api/getUserInfo
Content-Type: application/json
X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjUzNjU5OTl9.MQi-V9g2VbwtRSKRsyaNsFWfgkYXfKblYvupLpVgu9g
X-TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{}
###
POST {{baseUrl}}/api/updateUserInfo
Content-Type: application/json
X-TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{
"avatar_url": "https://www.image.com/image.png",
"email_list": ["123@qq.com"],
"before_expire_days": 1
}
###
POST {{baseUrl}}/api/updateUserPassword
Content-Type: application/json
X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{
"password": "123456",
"new_password": "234567"
}
###
POST {{baseUrl}}/api/getUserList
Content-Type: application/json
X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{
"page": 1,
"size": 10,
"keyword": ""
}
###
POST {{baseUrl}}/api/addUser
Content-Type: application/json
X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{
"username": "mouday",
"password": "ooxx"
}
###
POST {{baseUrl}}/api/updateUserStatus
Content-Type: application/json
X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2NjYwODU0MTh9.k8G3LvPMrKJm5_1Eodzto7X1YAFTz57iKbmolas7oOs
{
"user_id": 1,
"status": false
}
###
# 打包部署
rm -rf dist build *.egg-info && \
python setup.py sdist bdist_wheel && \
twine check dist/* && \
twine upload dist/* && \
rm -rf dist build *.egg-info
......@@ -6,10 +6,9 @@ peewee==3.15.3
python-dateutil==2.8.2
gunicorn==20.1.0
gevent==21.12.0
PyYAML>=6.0
apscheduler>=3.9.1
PyJWT>=2.5.0
bcrypt>=4.0.0
pendulum>=2.1.2
python-dotenv>=0.21.0
dateparser>=1.1.1
\ No newline at end of file
dateparser>=1.1.1
pytz>=2022.2.1
\ No newline at end of file
......@@ -2,6 +2,7 @@
# @Date : 2019-06-26
# @Author : Peng Shiyu
import glob
import io
import os
......
[program:domain-admin]
command=/usr/bin/python /usr/local/bin/gunicorn main:app --config gunicorn.conf.py
directory=/home/domain-admin
autostart=true
user=www
stdout_logfile=/home/domain-admin/logs/supervisor-out.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=0
stderr_logfile=/home/domain-admin/logs/supervisor-err.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=0
\ No newline at end of file
#supervisord.service
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
ExecReload=/usr/local/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册