fix: fix bugs
This commit is contained in:
parent
3d99214656
commit
e525833fc8
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@kevisual/envision-cli",
|
"name": "@kevisual/envision-cli",
|
||||||
"version": "0.0.26",
|
"version": "0.0.27",
|
||||||
"description": "envision command tools",
|
"description": "envision command tools",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
@ -34,6 +34,13 @@ export const getTokenList = async () => {
|
|||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
|
export const setTokenList = async (data: any[]) => {
|
||||||
|
const res = await runApp({ path: 'config', key: 'setTokenList', payload: { data } });
|
||||||
|
if (res.code !== 200) {
|
||||||
|
console.log('set token list failed', res.message || '');
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
};
|
||||||
// 定义login命令,支持 `-u` 和 `-p` 参数来输入用户名和密码
|
// 定义login命令,支持 `-u` 和 `-p` 参数来输入用户名和密码
|
||||||
const loginCommand = new Command('login')
|
const loginCommand = new Command('login')
|
||||||
.description('Login to the application')
|
.description('Login to the application')
|
||||||
@ -45,7 +52,7 @@ const loginCommand = new Command('login')
|
|||||||
const config = getConfig();
|
const config = getConfig();
|
||||||
let { username, password } = options;
|
let { username, password } = options;
|
||||||
if (options.web) {
|
if (options.web) {
|
||||||
await loginInCommand();
|
await loginInCommand(saveToken);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 如果没有传递参数,则通过交互式输入
|
// 如果没有传递参数,则通过交互式输入
|
||||||
|
@ -3,7 +3,7 @@ import { getConfig, query, writeConfig } from '@/module/index.ts';
|
|||||||
import inquirer from 'inquirer';
|
import inquirer from 'inquirer';
|
||||||
import util from 'util';
|
import util from 'util';
|
||||||
|
|
||||||
import { saveToken, switchToken, deleteToken, getTokenList } from './login.ts';
|
import { saveToken, switchToken, deleteToken, getTokenList, setTokenList } from './login.ts';
|
||||||
const token = new Command('token').description('show token').action(async () => {
|
const token = new Command('token').description('show token').action(async () => {
|
||||||
const config = getConfig();
|
const config = getConfig();
|
||||||
console.log('token', config.token);
|
console.log('token', config.token);
|
||||||
@ -51,7 +51,7 @@ const baseURL = new Command('baseURL')
|
|||||||
.option('-l, --list', 'list baseURL')
|
.option('-l, --list', 'list baseURL')
|
||||||
.option('-c, --clear', 'clear baseURL')
|
.option('-c, --clear', 'clear baseURL')
|
||||||
.action(async (opts) => {
|
.action(async (opts) => {
|
||||||
const config = getConfig();
|
let config = getConfig();
|
||||||
let list = (config.baseURLList as Array<string>) || [];
|
let list = (config.baseURLList as Array<string>) || [];
|
||||||
const quineList = (list: string[]) => {
|
const quineList = (list: string[]) => {
|
||||||
const newList = new Set(list);
|
const newList = new Set(list);
|
||||||
@ -62,18 +62,34 @@ const baseURL = new Command('baseURL')
|
|||||||
console.log('expand baseURLList is empty');
|
console.log('expand baseURLList is empty');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const config = getConfig();
|
||||||
console.log('----current baseURL:' + config.baseURL + '----\n');
|
console.log('----current baseURL:' + config.baseURL + '----\n');
|
||||||
list.forEach((item, index) => {
|
list.forEach((item, index) => {
|
||||||
console.log(`${index + 1}: ${item}`);
|
console.log(`${index + 1}: ${item}`);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
function isNumeric(str: string) {
|
||||||
|
return /^-?\d+\.?\d*$/.test(str);
|
||||||
|
}
|
||||||
|
if (opts.add || opts.set) {
|
||||||
|
let change = false;
|
||||||
if (opts.add) {
|
if (opts.add) {
|
||||||
|
change = true;
|
||||||
list.push(opts.add);
|
list.push(opts.add);
|
||||||
|
} else if (opts.set) {
|
||||||
|
if (!isNumeric(opts.set)) {
|
||||||
|
change = true;
|
||||||
|
list.push(opts.set);
|
||||||
|
writeConfig({ ...config, baseURL: opts.set });
|
||||||
|
config = getConfig();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (change) {
|
||||||
list = quineList(list);
|
list = quineList(list);
|
||||||
console.log('add baseURL success\n');
|
|
||||||
writeConfig({ ...config, baseURLList: list });
|
writeConfig({ ...config, baseURLList: list });
|
||||||
|
config = getConfig();
|
||||||
showList(list);
|
showList(list);
|
||||||
return;
|
}
|
||||||
}
|
}
|
||||||
if (opts.remove) {
|
if (opts.remove) {
|
||||||
const index = Number(opts.remove) - 1;
|
const index = Number(opts.remove) - 1;
|
||||||
@ -89,7 +105,7 @@ const baseURL = new Command('baseURL')
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (opts.set) {
|
if (opts.set) {
|
||||||
const isNumber = !isNaN(Number(opts.set));
|
const isNumber = isNumeric(opts.set);
|
||||||
let baseURL = '';
|
let baseURL = '';
|
||||||
if (isNumber) {
|
if (isNumber) {
|
||||||
const index = Number(opts.set) - 1;
|
const index = Number(opts.set) - 1;
|
||||||
@ -99,17 +115,9 @@ const baseURL = new Command('baseURL')
|
|||||||
}
|
}
|
||||||
baseURL = list[index];
|
baseURL = list[index];
|
||||||
writeConfig({ ...config, baseURL: list[index] });
|
writeConfig({ ...config, baseURL: list[index] });
|
||||||
console.log('set baseURL success:', list[index]);
|
showList(list);
|
||||||
} else {
|
} else {
|
||||||
try {
|
|
||||||
new URL(opts.set);
|
|
||||||
} catch (error) {
|
|
||||||
console.log('invalid baseURL:', opts.set);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
baseURL = opts.set;
|
baseURL = opts.set;
|
||||||
writeConfig({ ...config, baseURL: opts.set });
|
|
||||||
console.log('set baseURL success:', opts.set);
|
|
||||||
}
|
}
|
||||||
baseURL && switchToken(baseURL);
|
baseURL && switchToken(baseURL);
|
||||||
return;
|
return;
|
||||||
@ -120,14 +128,22 @@ const baseURL = new Command('baseURL')
|
|||||||
}
|
}
|
||||||
if (opts.clear) {
|
if (opts.clear) {
|
||||||
writeConfig({ ...config, baseURLList: [] });
|
writeConfig({ ...config, baseURLList: [] });
|
||||||
|
setTokenList([]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.log('current baseURL:', config.baseURL);
|
console.log('current baseURL:', config.baseURL);
|
||||||
});
|
});
|
||||||
app.addCommand(baseURL);
|
app.addCommand(baseURL);
|
||||||
|
|
||||||
const setBaseURL = new Command('set').description('set baseURL').action(async () => {
|
const setBaseURL = new Command('set')
|
||||||
|
.option('-b, --baseURL <baseURL>', 'set baseURL')
|
||||||
|
// .argument('<baseURL>', 'set baseURL', '')
|
||||||
|
.description('set baseURL')
|
||||||
|
.action(async (opt) => {
|
||||||
const config = getConfig();
|
const config = getConfig();
|
||||||
|
let baseURL = opt.baseURL;
|
||||||
|
// let baseURL = opt;
|
||||||
|
if (!baseURL) {
|
||||||
const answers = await inquirer.prompt([
|
const answers = await inquirer.prompt([
|
||||||
{
|
{
|
||||||
type: 'input',
|
type: 'input',
|
||||||
@ -135,7 +151,8 @@ const setBaseURL = new Command('set').description('set baseURL').action(async ()
|
|||||||
message: `Enter your baseURL:(current: ${config.baseURL})`,
|
message: `Enter your baseURL:(current: ${config.baseURL})`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
const baseURL = answers.baseURL;
|
baseURL = answers.baseURL;
|
||||||
|
}
|
||||||
writeConfig({ ...config, baseURL });
|
writeConfig({ ...config, baseURL });
|
||||||
baseURL && switchToken(baseURL);
|
baseURL && switchToken(baseURL);
|
||||||
});
|
});
|
||||||
|
@ -44,4 +44,5 @@ export const getConfig = () => {
|
|||||||
|
|
||||||
export const writeConfig = (config: Record<string, any>) => {
|
export const writeConfig = (config: Record<string, any>) => {
|
||||||
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
||||||
|
return config;
|
||||||
};
|
};
|
||||||
|
@ -4,13 +4,7 @@ import { chalk } from '../chalk.ts';
|
|||||||
import jsonwebtoken from 'jsonwebtoken';
|
import jsonwebtoken from 'jsonwebtoken';
|
||||||
import { BaseLoad } from '@kevisual/load';
|
import { BaseLoad } from '@kevisual/load';
|
||||||
import { getConfig, writeConfig } from '../get-config.ts';
|
import { getConfig, writeConfig } from '../get-config.ts';
|
||||||
const saveToken = async (token: string) => {
|
|
||||||
const config = await getConfig();
|
|
||||||
writeConfig({
|
|
||||||
...config,
|
|
||||||
token,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
type LoginWithWebOptions = {};
|
type LoginWithWebOptions = {};
|
||||||
export const loginWithWeb = async (opts?: LoginWithWebOptions) => {
|
export const loginWithWeb = async (opts?: LoginWithWebOptions) => {
|
||||||
const baseURL = getBaseURL();
|
const baseURL = getBaseURL();
|
||||||
@ -36,6 +30,7 @@ export const loginWithWeb = async (opts?: LoginWithWebOptions) => {
|
|||||||
|
|
||||||
type PollLoginOptions = {
|
type PollLoginOptions = {
|
||||||
tokenSecret: string;
|
tokenSecret: string;
|
||||||
|
saveToken?: any;
|
||||||
};
|
};
|
||||||
export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => {
|
export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => {
|
||||||
const load = new BaseLoad();
|
const load = new BaseLoad();
|
||||||
@ -75,8 +70,9 @@ export const pollLoginStatus = async (token: string, opts: PollLoginOptions) =>
|
|||||||
};
|
};
|
||||||
const userToken = payload.userToken;
|
const userToken = payload.userToken;
|
||||||
// console.log('token:\n\n', userToken);
|
// console.log('token:\n\n', userToken);
|
||||||
console.log(chalk.green('登录成功', payload?.user?.username));
|
console.log(chalk.green('网页登录成功', payload?.user?.username));
|
||||||
await saveToken(userToken.token);
|
console.log(chalk.green('token:', userToken.token));
|
||||||
|
await opts?.saveToken(userToken.token);
|
||||||
return;
|
return;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(chalk.red('登录失败'), error);
|
console.log(chalk.red('登录失败'), error);
|
||||||
@ -85,9 +81,9 @@ export const pollLoginStatus = async (token: string, opts: PollLoginOptions) =>
|
|||||||
console.log(chalk.red('登录失败'), res);
|
console.log(chalk.red('登录失败'), res);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const loginInCommand = async () => {
|
export const loginInCommand = async (saveToken: any) => {
|
||||||
const { url, token, tokenSecret } = await loginWithWeb();
|
const { url, token, tokenSecret } = await loginWithWeb();
|
||||||
await pollLoginStatus(token, { tokenSecret });
|
await pollLoginStatus(token, { tokenSecret, saveToken });
|
||||||
return url;
|
return url;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { app } from '@/app.ts';
|
import { app } from '@/app.ts';
|
||||||
import { Config } from './model/config.ts';
|
import { Config } from './model/config.ts';
|
||||||
import { writeConfig } from '@/module/get-config.ts';
|
import { getConfig, writeConfig } from '@/module/get-config.ts';
|
||||||
|
import { queryMe } from '@/query/index.ts';
|
||||||
const cacheToken = 'tokenList';
|
const cacheToken = 'tokenList';
|
||||||
export type TokenCacheItem = {
|
export type TokenCacheItem = {
|
||||||
baseURL?: string;
|
baseURL?: string;
|
||||||
@ -151,13 +152,20 @@ app
|
|||||||
const tokenList: TokenCacheItem[] = configRes.body?.value || [];
|
const tokenList: TokenCacheItem[] = configRes.body?.value || [];
|
||||||
const index = tokenList.findIndex((item) => item.baseURL === baseURL);
|
const index = tokenList.findIndex((item) => item.baseURL === baseURL);
|
||||||
const token = index > -1 ? tokenList[index].token : '';
|
const token = index > -1 ? tokenList[index].token : '';
|
||||||
if (index > -1 && token) {
|
if (token) {
|
||||||
writeConfig({ token: tokenList[index].token });
|
const config = getConfig();
|
||||||
|
const resMe = await queryMe();
|
||||||
|
if (resMe.code !== 200) {
|
||||||
|
writeConfig({ ...config, token: '' });
|
||||||
|
ctx.throw(resMe.code, resMe.message || 'cache token is invalid');
|
||||||
|
}
|
||||||
|
writeConfig({ ...config, token: token });
|
||||||
ctx.body = {
|
ctx.body = {
|
||||||
baseURL: baseURL,
|
baseURL: baseURL,
|
||||||
token: tokenList[index].token,
|
token: tokenList[index].token,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
writeConfig({ ...getConfig(), token: '' });
|
||||||
ctx.throw(404, 'Token not found');
|
ctx.throw(404, 'Token not found');
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user