import axios from "axios"; import * as vscode from "vscode"; import * as path from "path"; import { instance } from "../service"; import { readFileContent, setUserInfoToFile, readUserInfoByFile } from '../utils/filesTool'; import * as queryString from 'query-string'; export async function login(context: vscode.ExtensionContext): Promise { const panel = vscode.window.createWebviewPanel( 'loginWebView', // viewType "sso登陆", // 视图标题 vscode.ViewColumn.One, // 显示在编辑器的哪个部位 { enableScripts: true, // 启用JS,默认禁用 retainContextWhenHidden: true, // webview被隐藏时保持状态,避免被重置 } ); const loginPath = path.join(__dirname, /out$/.test(__dirname) ? "../src/view/login.html" : "../../src/view/login.html"); let queryObj: any = {}; // const host = 'panfeng.test.xiaojukeji.com:8000'; const host = 'panfeng.intra.xiaojukeji.com/server'; queryObj.callback = `//${host}/#/share/questions`; queryObj.jumpto = `//${host}/#/share/questions`; queryObj.version = 'v3'; queryObj.app_id = 3114; const ssoAddress = `http://mis.diditaxi.com.cn/auth/sso/login?${queryString.stringify(queryObj)}`; let loginHtml = readFileContent(loginPath); loginHtml = loginHtml.replace(/\${loginHtmlUrl}/g, ssoAddress); panel.webview.html = loginHtml; panel.webview.onDidReceiveMessage( message => { switch (message.command) { case 'alert': vscode.window.showErrorMessage(message.text); break; case 'login': message.createdTime = new Date().getTime(); setUserInfoToFile(message) panel.dispose(); vscode.window.showInformationMessage('恭喜你登录成功!'); break; } }, undefined, context.subscriptions ); return; } export const checkIsLogin = async () => { const userInfoCookie = readUserInfoByFile(); const { text, createdTime } = userInfoCookie; try { const { data } = await axios({ method: "get", url: `http://odin.xiaojukeji.com/auth-prod/sso/v1/check`, headers: { accept: "application/json", cookie: text, }, }); return Promise.resolve({ name: data, token: text }); } catch (error) { return Promise.reject(); } }; export const handleLogin = async (context: vscode.ExtensionContext) => { try { await checkIsLogin(); vscode.window.showInformationMessage('您已登录成功!'); } catch (error) { vscode.window .showWarningMessage("请先点击此处登录", "登录") .then((result) => { if (result === "登录") { login(context); } }); } }