mirror of
https://github.com/whyour/qinglong.git
synced 2025-05-23 23:06:06 +08:00
Merge branch 'develop' into develop
This commit is contained in:
commit
022e42f8bb
|
@ -360,6 +360,31 @@ export function parseHeaders(headers: string) {
|
|||
return parsed;
|
||||
}
|
||||
|
||||
function parseString(input: string): Record<string, string> {
|
||||
const regex = /(\w+):\s*((?:(?!\n\w+:).)*)/g;
|
||||
const matches: Record<string, string> = {};
|
||||
|
||||
let match;
|
||||
while ((match = regex.exec(input)) !== null) {
|
||||
const [, key, value] = match;
|
||||
const _key = key.trim();
|
||||
if (!_key || matches[_key]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const _value = value.trim();
|
||||
|
||||
try {
|
||||
const jsonValue = JSON.parse(_value);
|
||||
matches[_key] = jsonValue;
|
||||
} catch (error) {
|
||||
matches[_key] = _value;
|
||||
}
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
|
||||
export function parseBody(
|
||||
body: string,
|
||||
contentType:
|
||||
|
@ -372,28 +397,7 @@ export function parseBody(
|
|||
return body;
|
||||
}
|
||||
|
||||
const parsed: any = {};
|
||||
let key;
|
||||
let val;
|
||||
let i;
|
||||
|
||||
body &&
|
||||
body.split('\n').forEach(function parser(line) {
|
||||
i = line.indexOf(':');
|
||||
key = line.substring(0, i).trim();
|
||||
val = line.substring(i + 1).trim();
|
||||
|
||||
if (!key || parsed[key]) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const jsonValue = JSON.parse(val);
|
||||
parsed[key] = jsonValue;
|
||||
} catch (error) {
|
||||
parsed[key] = val;
|
||||
}
|
||||
});
|
||||
const parsed = parseString(body);
|
||||
|
||||
switch (contentType) {
|
||||
case 'multipart/form-data':
|
||||
|
|
|
@ -53,7 +53,8 @@ RUN set -x \
|
|||
&& rm -rf /root/.pnpm-store \
|
||||
&& rm -rf /root/.local/share/pnpm/store \
|
||||
&& rm -rf /root/.cache \
|
||||
&& rm -rf /root/.npm
|
||||
&& rm -rf /root/.npm \
|
||||
&& ulimit -c 0
|
||||
|
||||
ARG SOURCE_COMMIT
|
||||
RUN git clone --depth=1 -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} \
|
||||
|
|
|
@ -57,7 +57,8 @@ RUN set -x \
|
|||
&& rm -rf /root/.pnpm-store \
|
||||
&& rm -rf /root/.local/share/pnpm/store \
|
||||
&& rm -rf /root/.cache \
|
||||
&& rm -rf /root/.npm
|
||||
&& rm -rf /root/.npm \
|
||||
&& ulimit -c 0
|
||||
|
||||
ARG SOURCE_COMMIT
|
||||
RUN git clone --depth=1 -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} \
|
||||
|
|
|
@ -816,7 +816,18 @@ function ChangeUserId(desp) {
|
|||
}
|
||||
}
|
||||
|
||||
function qywxamNotify(text, desp) {
|
||||
async function qywxamNotify(text, desp) {
|
||||
const MAX_LENGTH = 900;
|
||||
if (desp.length > MAX_LENGTH) {
|
||||
let d = desp.substr(0, MAX_LENGTH) + "\n==More==";
|
||||
await do_qywxamNotify(text, d);
|
||||
await qywxamNotify(text, desp.substr(MAX_LENGTH));
|
||||
} else {
|
||||
return await do_qywxamNotify(text,desp);
|
||||
}
|
||||
}
|
||||
|
||||
function do_qywxamNotify(text, desp) {
|
||||
return new Promise((resolve) => {
|
||||
if (QYWX_AM) {
|
||||
const QYWX_AM_AY = QYWX_AM.split(',');
|
||||
|
@ -1315,6 +1326,31 @@ function webhookNotify(text, desp) {
|
|||
});
|
||||
}
|
||||
|
||||
function parseString(input) {
|
||||
const regex = /(\w+):\s*((?:(?!\n\w+:).)*)/g;
|
||||
const matches = {};
|
||||
|
||||
let match;
|
||||
while ((match = regex.exec(input)) !== null) {
|
||||
const [, key, value] = match;
|
||||
const _key = key.trim();
|
||||
if (!_key || matches[_key]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const _value = value.trim();
|
||||
|
||||
try {
|
||||
const jsonValue = JSON.parse(_value);
|
||||
matches[_key] = jsonValue;
|
||||
} catch (error) {
|
||||
matches[_key] = _value;
|
||||
}
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
|
||||
function parseHeaders(headers) {
|
||||
if (!headers) return {};
|
||||
|
||||
|
@ -1344,28 +1380,7 @@ function parseBody(body, contentType) {
|
|||
return body;
|
||||
}
|
||||
|
||||
const parsed = {};
|
||||
let key;
|
||||
let val;
|
||||
let i;
|
||||
|
||||
body &&
|
||||
body.split('\n').forEach(function parser(line) {
|
||||
i = line.indexOf(':');
|
||||
key = line.substring(0, i).trim();
|
||||
val = line.substring(i + 1).trim();
|
||||
|
||||
if (!key || parsed[key]) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const jsonValue = JSON.parse(val);
|
||||
parsed[key] = jsonValue;
|
||||
} catch (error) {
|
||||
parsed[key] = val;
|
||||
}
|
||||
});
|
||||
const parsed = parseString(body);
|
||||
|
||||
switch (contentType) {
|
||||
case 'multipart/form-data':
|
||||
|
|
|
@ -646,7 +646,9 @@ def aibotk(title: str, content: str, **kwargs) -> None:
|
|||
and push_config.get("AIBOTK_NAME")
|
||||
)
|
||||
):
|
||||
print("智能微秘书 的 AIBOTK_KEY 或者 AIBOTK_TYPE 或者 AIBOTK_NAME 未设置!!\n取消推送")
|
||||
print(
|
||||
"智能微秘书 的 AIBOTK_KEY 或者 AIBOTK_TYPE 或者 AIBOTK_NAME 未设置!!\n取消推送"
|
||||
)
|
||||
return
|
||||
print("智能微秘书 服务启动")
|
||||
if kwargs.get("AIBOTK_KEY") and kwargs.get("AIBOTK_TYPE") and kwargs.get("AIBOTK_NAME"):
|
||||
|
@ -863,29 +865,25 @@ def parse_headers(headers):
|
|||
return parsed
|
||||
|
||||
|
||||
def parse_string(input_string):
|
||||
matches = {}
|
||||
pattern = r'(\w+):\s*((?:(?!\n\w+:).)*)'
|
||||
regex = re.compile(pattern)
|
||||
for match in regex.finditer(input_string):
|
||||
key, value = match.group(1).strip(), match.group(2).strip()
|
||||
try:
|
||||
json_value = json.loads(value)
|
||||
matches[key] = json_value
|
||||
except:
|
||||
matches[key] = value
|
||||
return matches
|
||||
|
||||
|
||||
def parse_body(body, content_type):
|
||||
if not body or content_type == "text/plain":
|
||||
return body
|
||||
|
||||
parsed = {}
|
||||
lines = body.split("\n")
|
||||
|
||||
for line in lines:
|
||||
i = line.find(":")
|
||||
if i == -1:
|
||||
continue
|
||||
|
||||
key = line[:i].strip()
|
||||
val = line[i + 1 :].strip()
|
||||
|
||||
if not key or key in parsed:
|
||||
continue
|
||||
|
||||
try:
|
||||
json_value = json.loads(val)
|
||||
parsed[key] = json_value
|
||||
except:
|
||||
parsed[key] = val
|
||||
parsed = parse_string(input_string)
|
||||
|
||||
if content_type == "application/x-www-form-urlencoded":
|
||||
data = urlencode(parsed, doseq=True)
|
||||
|
|
|
@ -68,13 +68,13 @@ const Log = () => {
|
|||
};
|
||||
|
||||
const onSelect = (value: any, node: any) => {
|
||||
setCurrentNode(node);
|
||||
setSelect(value);
|
||||
|
||||
if (node.key === select || !value) {
|
||||
return;
|
||||
}
|
||||
|
||||
setCurrentNode(node);
|
||||
setSelect(value);
|
||||
|
||||
if (node.type === 'directory') {
|
||||
setValue(intl.get('请选择日志文件'));
|
||||
return;
|
||||
|
|
|
@ -115,13 +115,13 @@ const Script = () => {
|
|||
};
|
||||
|
||||
const onSelect = (value: any, node: any) => {
|
||||
setSelect(node.key);
|
||||
setCurrentNode(node);
|
||||
|
||||
if (node.key === select || !value) {
|
||||
return;
|
||||
}
|
||||
|
||||
setSelect(node.key);
|
||||
setCurrentNode(node);
|
||||
|
||||
if (node.type === 'directory') {
|
||||
setValue(intl.get('请选择脚本文件'));
|
||||
return;
|
||||
|
|
18
version.yaml
18
version.yaml
|
@ -1,13 +1,7 @@
|
|||
version: 2.17.1
|
||||
changeLogLink: https://t.me/jiao_long/402
|
||||
publishTime: 2024-02-07 23:00
|
||||
version: 2.17.2
|
||||
changeLogLink: https://t.me/jiao_long/403
|
||||
publishTime: 2024-03-02 17:00
|
||||
changeLog: |
|
||||
1. 系统设置增加重启
|
||||
2. 修复 debian 系统内更新源代码分支错误
|
||||
3. 修复启动时依赖配置未初始化
|
||||
4. 修复未开启一言时多余空行, 通知渠道改发送前检查,感谢 https://github.com/Cp0204
|
||||
5. Dockerfile 添加发布端口和数据卷 https://github.com/Akimio521
|
||||
6. 修复有反向代理时脚本管理获取文件可能失败
|
||||
7. 脚本管理重命名增加默认值,增加新建(mod+o)、删除快捷键(mod+d)
|
||||
8. 修复对比工具保存文件
|
||||
9. 其他 bug 修复
|
||||
1. 依赖管理支持队列中依赖取消安装,支持状态筛选
|
||||
2. 修复 webhook 通知 body 拆分逻辑
|
||||
3. 企业微信有长度限制,超长的进行分段提交 https://github.com/pharaoh2012
|
||||
|
|
Loading…
Reference in New Issue
Block a user