mirror of
https://github.com/whyour/qinglong.git
synced 2025-05-23 06:46:09 +08:00
修复登录通知失败造成服务重启
This commit is contained in:
parent
9a399f8de8
commit
8a18baa921
|
@ -58,78 +58,6 @@ export function getToken(req: any) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getNetIp(req: any) {
|
|
||||||
const ipArray = [
|
|
||||||
...new Set([
|
|
||||||
...(req.headers['x-real-ip'] || '').split(','),
|
|
||||||
...(req.headers['x-forwarded-for'] || '').split(','),
|
|
||||||
req.ip,
|
|
||||||
...req.ips,
|
|
||||||
req.socket.remoteAddress,
|
|
||||||
]),
|
|
||||||
].filter(Boolean);
|
|
||||||
|
|
||||||
let ip = ipArray[0];
|
|
||||||
|
|
||||||
if (ipArray.length > 1) {
|
|
||||||
for (let i = 0; i < ipArray.length; i++) {
|
|
||||||
const ipNumArray = ipArray[i].split('.');
|
|
||||||
const tmp = ipNumArray[0] + '.' + ipNumArray[1];
|
|
||||||
if (
|
|
||||||
tmp === '192.168' ||
|
|
||||||
(ipNumArray[0] === '172' &&
|
|
||||||
ipNumArray[1] >= 16 &&
|
|
||||||
ipNumArray[1] <= 32) ||
|
|
||||||
tmp === '10.7' ||
|
|
||||||
tmp === '127.0'
|
|
||||||
) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ip = ipArray[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ip = ip.substr(ip.lastIndexOf(':') + 1, ip.length);
|
|
||||||
if (ip.includes('127.0') || ip.includes('192.168') || ip.includes('10.7')) {
|
|
||||||
ip = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ip) {
|
|
||||||
return { address: `获取失败`, ip };
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const csdnApi = got
|
|
||||||
.get(`https://searchplugin.csdn.net/api/v1/ip/get?ip=${ip}`, {
|
|
||||||
timeout: 10000,
|
|
||||||
retry: 0,
|
|
||||||
})
|
|
||||||
.text();
|
|
||||||
const pconlineApi = got
|
|
||||||
.get(`https://whois.pconline.com.cn/ipJson.jsp?ip=${ip}&json=true`, {
|
|
||||||
timeout: 10000,
|
|
||||||
retry: 0,
|
|
||||||
})
|
|
||||||
.buffer();
|
|
||||||
const [csdnBody, pconlineBody] = await await Promise.all<any>([
|
|
||||||
csdnApi,
|
|
||||||
pconlineApi,
|
|
||||||
]);
|
|
||||||
const csdnRes = JSON.parse(csdnBody);
|
|
||||||
const pconlineRes = JSON.parse(iconv.decode(pconlineBody, 'GBK'));
|
|
||||||
let address = '';
|
|
||||||
if (csdnBody && csdnRes.code == 200) {
|
|
||||||
address = csdnRes.data.address;
|
|
||||||
} else if (pconlineRes && pconlineRes.addr) {
|
|
||||||
address = pconlineRes.addr;
|
|
||||||
}
|
|
||||||
return { address, ip };
|
|
||||||
} catch (error) {
|
|
||||||
return { address: `获取失败`, ip };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getPlatform(userAgent: string): 'mobile' | 'desktop' {
|
export function getPlatform(userAgent: string): 'mobile' | 'desktop' {
|
||||||
const ua = userAgent.toLowerCase();
|
const ua = userAgent.toLowerCase();
|
||||||
const testUa = (regexp: RegExp) => regexp.test(ua);
|
const testUa = (regexp: RegExp) => regexp.test(ua);
|
||||||
|
|
|
@ -19,7 +19,7 @@ export class HttpServerService {
|
||||||
resolve(this.server);
|
resolve(this.server);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.server.on('error', (err: Error) => {
|
this.server?.on('error', (err: Error) => {
|
||||||
Logger.error('Failed to start HTTP service:', err);
|
Logger.error('Failed to start HTTP service:', err);
|
||||||
reject(err);
|
reject(err);
|
||||||
});
|
});
|
||||||
|
|
|
@ -59,7 +59,7 @@ export default class NotificationService {
|
||||||
try {
|
try {
|
||||||
return await notificationModeAction?.call(this);
|
return await notificationModeAction?.call(this);
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
throw error;
|
console.error(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Service, Inject } from 'typedi';
|
import { Service, Inject } from 'typedi';
|
||||||
import winston from 'winston';
|
import winston from 'winston';
|
||||||
import { createRandomString, getNetIp } from '../config/util';
|
import { createRandomString } from '../config/util';
|
||||||
import config from '../config';
|
import config from '../config';
|
||||||
import jwt from 'jsonwebtoken';
|
import jwt from 'jsonwebtoken';
|
||||||
import { authenticator } from '@otplib/preset-default';
|
import { authenticator } from '@otplib/preset-default';
|
||||||
|
@ -271,7 +271,16 @@ export default class UserService {
|
||||||
if (isValid) {
|
if (isValid) {
|
||||||
return this.login({ username, password }, req, false);
|
return this.login({ username, password }, req, false);
|
||||||
} else {
|
} else {
|
||||||
const { ip, address } = await getNetIp(req);
|
const ip = requestIp.getClientIp(req) || '';
|
||||||
|
const query = new IP2Region();
|
||||||
|
const ipAddress = query.search(ip);
|
||||||
|
let address = '';
|
||||||
|
if (ipAddress) {
|
||||||
|
const { country, province, city, isp } = ipAddress;
|
||||||
|
address = uniq([country, province, city, isp])
|
||||||
|
.filter(Boolean)
|
||||||
|
.join(' ');
|
||||||
|
}
|
||||||
await this.updateAuthInfo(authInfo, {
|
await this.updateAuthInfo(authInfo, {
|
||||||
lastip: ip,
|
lastip: ip,
|
||||||
lastaddr: address,
|
lastaddr: address,
|
||||||
|
|
|
@ -54,7 +54,7 @@ def run():
|
||||||
|
|
||||||
task_before = os.getenv("task_before")
|
task_before = os.getenv("task_before")
|
||||||
if task_before:
|
if task_before:
|
||||||
escaped_task_before = task_before.replace("'", "'\\''")
|
escaped_task_before = task_before.replace('"', '\\"').replace("$", "\\$")
|
||||||
commands.append(f"eval '{escaped_task_before}'")
|
commands.append(f"eval '{escaped_task_before}'")
|
||||||
print("执行前置命令\n")
|
print("执行前置命令\n")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user