diff --git a/back/api/config.ts b/back/api/config.ts
index a8168937..0e0a3258 100644
--- a/back/api/config.ts
+++ b/back/api/config.ts
@@ -3,6 +3,8 @@ import { Router, Request, Response, NextFunction } from 'express';
import { Container } from 'typedi';
import { Logger } from 'winston';
import config from '../config';
+import * as fs from 'fs';
+import { celebrate, Joi } from 'celebrate';
const route = Router();
export default (app: Router) => {
@@ -40,4 +42,26 @@ export default (app: Router) => {
}
},
);
+
+ route.post(
+ '/save',
+ celebrate({
+ body: Joi.object({
+ name: Joi.string().required(),
+ content: Joi.string().required(),
+ }),
+ }),
+ async (req: Request, res: Response, next: NextFunction) => {
+ const logger: Logger = Container.get('logger');
+ try {
+ const { name, content } = req.body;
+ const path = (config.fileMap as any)[name];
+ fs.writeFileSync(path, content);
+ res.send({ code: 200, msg: '保存成功' });
+ } catch (e) {
+ logger.error('🔥 error: %o', e);
+ return next(e);
+ }
+ },
+ );
};
diff --git a/back/api/cookie.ts b/back/api/cookie.ts
index 5aa1b099..c9ec7fe0 100644
--- a/back/api/cookie.ts
+++ b/back/api/cookie.ts
@@ -1,10 +1,7 @@
import { Router, Request, Response, NextFunction } from 'express';
import { Container } from 'typedi';
import CookieService from '../services/cookie';
-import { celebrate, Joi } from 'celebrate';
import { Logger } from 'winston';
-import { getFileContentByName } from '../config/util';
-import config from '../config';
const route = Router();
export default (app: Router) => {
@@ -49,7 +46,23 @@ export default (app: Router) => {
const logger: Logger = Container.get('logger');
try {
const cookieService = Container.get(CookieService);
- const data = await cookieService.addCookie();
+ const data = await cookieService.addCookie(req.query.cookie as string);
+ return res.send({ code: 200, data });
+ } catch (e) {
+ logger.error('🔥 error: %o', e);
+ return next(e);
+ }
+ },
+ );
+
+ route.post(
+ '/cookie/refresh',
+ async (req: Request, res: Response, next: NextFunction) => {
+ const logger: Logger = Container.get('logger');
+ try {
+ const cookieService = Container.get(CookieService);
+ console.log(req);
+ const data = await cookieService.refreshCookie(req.body);
return res.send({ code: 200, data });
} catch (e) {
logger.error('🔥 error: %o', e);
diff --git a/back/config/index.ts b/back/config/index.ts
index 48a9e867..9fdf8aeb 100644
--- a/back/config/index.ts
+++ b/back/config/index.ts
@@ -41,4 +41,9 @@ export default {
crontabFile,
sampleFile,
confFile,
+ fileMap: {
+ 'config.sh': confFile,
+ 'crontab.list': crontabFile,
+ 'diy.sh': diyFile,
+ },
};
diff --git a/back/services/cookie.ts b/back/services/cookie.ts
index 7aa36c82..6b1f584b 100644
--- a/back/services/cookie.ts
+++ b/back/services/cookie.ts
@@ -159,13 +159,13 @@ export default class CookieService {
return userCookie;
}
- public async addCookie() {
+ public async addCookie(oldCookie: string) {
const res: any = await this.checkLogin();
if (res.body.errcode === 0) {
let ucookie = this.getCookie(res);
let content = getFileContentByName(config.confFile);
const regx = /.*Cookie[0-9]{1}\=\"(.+?)\"/g;
- const lastCookie = (content.match(regx) as any[]).pop();
+ const lastCookie = oldCookie || (content.match(regx) as any[]).pop();
const cookieRegx = /Cookie([0-9]+)\=.+?/.exec(lastCookie);
if (cookieRegx) {
const num = parseInt(cookieRegx[1]) + 1;
@@ -246,6 +246,17 @@ export default class CookieService {
return result;
}
+ public async refreshCookie(body: any) {
+ const { cookie } = body;
+ const { nickname, status } = await this.getJdInfo(cookie);
+ return {
+ pin: cookie.match(/pt_pin=(.+?);/)[1],
+ cookie,
+ status,
+ nickname: nickname,
+ };
+ }
+
private getJdInfo(cookie: string) {
return fetch(
`https://me-api.jd.com/user_new/info/GetJDUserInfoUnion?orgFlag=JD_PinGou_New&callSource=mainorder&channel=4&isHomewhite=0&sceneval=2&_=${Date.now()}&sceneval=2&g_login_type=1&g_ty=ls`,
@@ -266,7 +277,6 @@ export default class CookieService {
)
.then((x) => x.json())
.then((x) => {
- console.log(x.data.userInfo);
if (x.retcode === '0' && x.data && x.data.userInfo) {
return { nickname: x.data.userInfo.baseInfo.nickname, status: 0 };
} else if (x.retcode === 13) {
diff --git a/src/pages/code/index.tsx b/src/pages/code/index.tsx
index a206f3a2..c33988fd 100644
--- a/src/pages/code/index.tsx
+++ b/src/pages/code/index.tsx
@@ -22,18 +22,6 @@ const Crontab = () => {
.finally(() => setLoading(false));
};
- const updateConfig = () => {
- request
- .post(`${config.apiPrefix}save`, {
- data: { content: value, name: 'diy.sh' },
- })
- .then((data) => {
- notification.success({
- message: data.msg,
- });
- });
- };
-
useEffect(() => {
if (document.body.clientWidth < 768) {
setWdith('auto');
@@ -52,11 +40,6 @@ const Crontab = () => {
className="code-mirror-wrapper"
title="互助码"
loading={loading}
- extra={[
- ,
- ]}
header={{
style: {
padding: '4px 16px 4px 15px',
diff --git a/src/pages/cookie/index.tsx b/src/pages/cookie/index.tsx
index 4726d074..d2c86057 100644
--- a/src/pages/cookie/index.tsx
+++ b/src/pages/cookie/index.tsx
@@ -16,67 +16,75 @@ enum StatusColor {
'warning',
}
-const columns = [
- {
- title: '用户名',
- dataIndex: 'pin',
- key: 'pin',
- align: 'center' as const,
- render: (text: string, record: any) => {
- return {decodeURIComponent(text)};
- },
- },
- {
- title: '昵称',
- dataIndex: 'nickname',
- key: 'nickname',
- align: 'center' as const,
- },
- {
- title: '值',
- dataIndex: 'cookie',
- key: 'cookie',
- align: 'center' as const,
- render: (text: string, record: any) => {
- return (
-
- {text}
-
- );
- },
- },
- {
- title: '状态',
- key: 'status',
- dataIndex: 'status',
- align: 'center' as const,
- render: (text: string, record: any) => {
- return (
-
- {Status[record.status]}
-
- );
- },
- },
- {
- title: '操作',
- key: 'action',
- render: (text: string, record: any) => (
-
- Invite {record.name}
- Delete
-
- ),
- },
-];
-
const Config = () => {
+ const columns = [
+ {
+ title: '用户名',
+ dataIndex: 'pin',
+ key: 'pin',
+ align: 'center' as const,
+ render: (text: string, record: any) => {
+ return {decodeURIComponent(text)};
+ },
+ },
+ {
+ title: '昵称',
+ dataIndex: 'nickname',
+ key: 'nickname',
+ align: 'center' as const,
+ },
+ {
+ title: '值',
+ dataIndex: 'cookie',
+ key: 'cookie',
+ align: 'center' as const,
+ width: '50%',
+ render: (text: string, record: any) => {
+ return (
+
+ {text}
+
+ );
+ },
+ },
+ {
+ title: '状态',
+ key: 'status',
+ dataIndex: 'status',
+ align: 'center' as const,
+ render: (text: string, record: any) => {
+ return (
+
+
+ {Status[record.status]}
+
+
+ );
+ },
+ },
+ {
+ title: '操作',
+ key: 'action',
+ align: 'center' as const,
+ render: (text: string, record: any, index: number) => (
+
+ {record.status === 0 && -}
+ {record.status === 1 && (
+ reacquire(record)}>重新获取
+ )}
+ {record.status === 2 && (
+ refreshStatus(record, index)}>刷新状态
+ )}
+
+ ),
+ },
+ ];
const [width, setWdith] = useState('100%');
const [marginLeft, setMarginLeft] = useState(0);
const [marginTop, setMarginTop] = useState(-72);
@@ -109,7 +117,7 @@ const Config = () => {
return new Promise((resolve) => setTimeout(resolve, time));
}
- const showQrCode = () => {
+ const showQrCode = (oldCookie?: string) => {
request.get(`${config.apiPrefix}qrcode`).then(async (data) => {
if (data.qrcode) {
const modal = Modal.info({
@@ -135,18 +143,21 @@ const Config = () => {
),
});
- getCookie(modal);
+ getCookie(modal, oldCookie);
} else {
notification.error({ message: '获取二维码失败' });
}
});
};
- const getCookie = async (modal: { destroy: () => void }) => {
+ const getCookie = async (
+ modal: { destroy: () => void },
+ oldCookie: string = '',
+ ) => {
for (let i = 0; i < 50; i++) {
const {
data: { cookie, errcode, message },
- } = await request.get(`${config.apiPrefix}cookie`);
+ } = await request.get(`${config.apiPrefix}cookie?cookie=${oldCookie}`);
if (cookie) {
notification.success({
message: 'Cookie获取成功',
@@ -166,6 +177,26 @@ const Config = () => {
}
};
+ const reacquire = async (record: any) => {
+ await showQrCode(record.cookie);
+ };
+
+ const refreshStatus = (record: any, index: number) => {
+ request
+ .post(`${config.apiPrefix}cookie/refresh`, {
+ data: { cookie: record.cookie },
+ })
+ .then(async (data: any) => {
+ if (data.data && data.data.cookie) {
+ (value as any).splice(index, 1, data.data);
+ setValue([...(value as any)] as any);
+ notification.success({ message: '更新状态成功' });
+ } else {
+ notification.error({ message: '更新状态失败' });
+ }
+ });
+ };
+
useEffect(() => {
if (document.body.clientWidth < 768) {
setWdith('auto');
@@ -185,7 +216,7 @@ const Config = () => {
title="Cookie管理"
loading={loading}
extra={[
-