From 0ff11a44f7fcbf7e2bc60dbded5bb58273220b28 Mon Sep 17 00:00:00 2001 From: terwer Date: Sun, 30 Jul 2023 00:12:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E7=89=88=E6=8C=82=E4=BB=B6-?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9F=A5=E4=B9=8E=E7=BD=91=E9=A1=B5=E6=8E=88?= =?UTF-8?q?=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 6 +-- pnpm-lock.yaml | 40 +++++++++---------- src/adaptors/web/zhihu/zhihuWebAdaptor.ts | 4 +- src/components/set/PublishSetting.vue | 27 +++++++++---- .../set/publish/PlatformAddForm.vue | 5 +++ .../set/publish/PlatformUpdateForm.vue | 4 ++ .../set/publish/platform/dynamicConfig.ts | 10 +++++ src/utils/import/pre.ts | 1 + src/utils/widgetUtils.ts | 26 +++++------- 9 files changed, 77 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index a8d71f2..d78b9cf 100644 --- a/package.json +++ b/package.json @@ -55,14 +55,14 @@ "vue-i18n": "^9.2.2", "vue-router": "^4.2.4", "xmlbuilder2": "^3.1.1", - "zhi-blog-api": "^1.18.0", + "zhi-blog-api": "^1.18.1", "zhi-common": "^1.11.5", "zhi-device": "^2.3.0", "zhi-fetch-middleware": "^0.1.19", "zhi-github-middleware": "^0.1.2", "zhi-lib-base": "^0.4.2", - "zhi-siyuan-api": "^1.27.7", - "zhi-wechatsync-middleware": "^0.1.7", + "zhi-siyuan-api": "^1.27.8", + "zhi-wechatsync-middleware": "^0.1.8", "zhi-xmlrpc-middleware": "^0.2.19" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae0a214..88a0b44 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ dependencies: specifier: ^3.1.1 version: 3.1.1 zhi-blog-api: - specifier: ^1.18.0 - version: 1.18.0 + specifier: ^1.18.1 + version: 1.18.1 zhi-common: specifier: ^1.11.5 version: 1.11.5 @@ -66,11 +66,11 @@ dependencies: specifier: ^0.4.2 version: 0.4.2 zhi-siyuan-api: - specifier: ^1.27.7 - version: 1.27.7 + specifier: ^1.27.8 + version: 1.27.8 zhi-wechatsync-middleware: - specifier: ^0.1.7 - version: 0.1.7 + specifier: ^0.1.8 + version: 0.1.8 zhi-xmlrpc-middleware: specifier: ^0.2.19 version: 0.2.19 @@ -78,7 +78,7 @@ dependencies: devDependencies: '@terwer/eslint-config-custom': specifier: ^1.3.6 - version: 1.3.6(@nuxt/eslint-config@0.1.1)(@typescript-eslint/eslint-plugin@5.62.0)(astro-eslint-parser@0.13.3)(eslint-config-prettier@8.9.0)(eslint-config-turbo@1.10.12)(eslint-plugin-prettier@4.2.1)(eslint-plugin-svelte@2.32.4)(eslint-plugin-vue@9.15.1)(eslint@8.46.0)(prettier-plugin-svelte@2.10.1)(prettier@2.8.8)(typescript@5.1.6) + version: 1.3.6(@nuxt/eslint-config@0.1.1)(@typescript-eslint/eslint-plugin@5.62.0)(astro-eslint-parser@0.13.3)(eslint-config-prettier@8.9.0)(eslint-config-turbo@1.10.12)(eslint-plugin-prettier@4.2.1)(eslint-plugin-svelte@2.32.4)(eslint-plugin-vue@9.16.0)(eslint@8.46.0)(prettier-plugin-svelte@2.10.1)(prettier@2.8.8)(typescript@5.1.6) '@types/node': specifier: ^18.17.1 version: 18.17.1 @@ -2073,7 +2073,7 @@ packages: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) eslint: 8.46.0 - eslint-plugin-vue: 9.15.1(eslint@8.46.0) + eslint-plugin-vue: 9.16.0(eslint@8.46.0) typescript: 4.9.5 transitivePeerDependencies: - supports-color @@ -2266,7 +2266,7 @@ packages: defer-to-connect: 2.0.1 dev: true - /@terwer/eslint-config-custom@1.3.6(@nuxt/eslint-config@0.1.1)(@typescript-eslint/eslint-plugin@5.62.0)(astro-eslint-parser@0.13.3)(eslint-config-prettier@8.9.0)(eslint-config-turbo@1.10.12)(eslint-plugin-prettier@4.2.1)(eslint-plugin-svelte@2.32.4)(eslint-plugin-vue@9.15.1)(eslint@8.46.0)(prettier-plugin-svelte@2.10.1)(prettier@2.8.8)(typescript@5.1.6): + /@terwer/eslint-config-custom@1.3.6(@nuxt/eslint-config@0.1.1)(@typescript-eslint/eslint-plugin@5.62.0)(astro-eslint-parser@0.13.3)(eslint-config-prettier@8.9.0)(eslint-config-turbo@1.10.12)(eslint-plugin-prettier@4.2.1)(eslint-plugin-svelte@2.32.4)(eslint-plugin-vue@9.16.0)(eslint@8.46.0)(prettier-plugin-svelte@2.10.1)(prettier@2.8.8)(typescript@5.1.6): resolution: {integrity: sha512-W0dFSTYfkzpp71LW8cDZUgLrNa004KDctojbiQrJrF4FIDmlwND/LyPUqfe1Eg8sulB5qkNX9qMgFWZ4SAVXBQ==} peerDependencies: '@nuxt/eslint-config': ^0.1.1 @@ -2290,7 +2290,7 @@ packages: eslint-config-turbo: 1.10.12(eslint@8.46.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.9.0)(eslint@8.46.0)(prettier@2.8.8) eslint-plugin-svelte: 2.32.4(eslint@8.46.0)(svelte@4.1.1) - eslint-plugin-vue: 9.15.1(eslint@8.46.0) + eslint-plugin-vue: 9.16.0(eslint@8.46.0) prettier: 2.8.8 prettier-plugin-svelte: 2.10.1(prettier@2.8.8)(svelte@4.1.1) typescript: 5.1.6 @@ -4944,8 +4944,8 @@ packages: eslint: 8.46.0 dev: true - /eslint-plugin-vue@9.15.1(eslint@8.46.0): - resolution: {integrity: sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==} + /eslint-plugin-vue@9.16.0(eslint@8.46.0): + resolution: {integrity: sha512-SonAuvQXFm9HBV9ww/YkYZVYPMR8ptxxuJwcKGnG9A65SyvNANP9MKlfnC49L6DIwt/YEQZwZWEMHOkL1d5s1A==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 @@ -9647,8 +9647,8 @@ packages: engines: {node: '>=12.20'} dev: true - /zhi-blog-api@1.18.0: - resolution: {integrity: sha512-9B8msbNsfjSnzWx+7jWa1jaaGT8Qz6LbTt+F2ymnXwmpprJ+3niNNt/9iq3fY+apuOiKRWPdYuYAUD5YIJT4Jw==} + /zhi-blog-api@1.18.1: + resolution: {integrity: sha512-6Mqa7UWKjyjUdJVjwxLTbhRQFlx1Z9prSjBQrchw3vgufpkd9yCePXDkVb7KDCY2SguHTsfsnQlx0DVKuALk+A==} dependencies: zhi-lib-base: 0.4.2 dev: false @@ -9684,18 +9684,18 @@ packages: resolution: {integrity: sha512-kfKgN4hb5efUf+k5Y9028CVV1p/hsnK0NbRsxI3uwJoTlHfTBjfi6ZfrkhDn+XEnEYeWidO75sx4RdcnT7C3KA==} dev: false - /zhi-siyuan-api@1.27.7: - resolution: {integrity: sha512-oQspqaQn3ql13T4JUJ5YQCRaYPh87NXTcYJDpwrmzdi37ieXTBTw8F4ugl22xAfELIfxEVuSV/2Cx05kjZSmGw==} + /zhi-siyuan-api@1.27.8: + resolution: {integrity: sha512-urQk/XCYGfi/7/y7SHo4ghhORkqAcOO1+QPFDbktAhMXH7u6HGkFqUS42nQgaziBHYOrTUwIjvxQHfaKM1IhHw==} dependencies: - zhi-blog-api: 1.18.0 + zhi-blog-api: 1.18.1 zhi-common: 1.11.5 zhi-lib-base: 0.4.2 dev: false - /zhi-wechatsync-middleware@0.1.7: - resolution: {integrity: sha512-sqLLgkyyzVHyr5QF6XIoB3crIe4fVo0MgDojYz0XxI2CvqvoN16Xy1tPDx5aI0rIhDISclvSs+wHrXJjfaMPbw==} + /zhi-wechatsync-middleware@0.1.8: + resolution: {integrity: sha512-+zm39HyYsqAsl/Gyechd3KBnJO2AWHFHsokixSfno2osKS2XZwnTxRPrwI5AEu+r5Ra6nh63i4ssgss/XPokMg==} dependencies: - zhi-blog-api: 1.18.0 + zhi-blog-api: 1.18.1 zhi-common: 1.11.5 zhi-lib-base: 0.4.2 dev: false diff --git a/src/adaptors/web/zhihu/zhihuWebAdaptor.ts b/src/adaptors/web/zhihu/zhihuWebAdaptor.ts index cd4110a..4969a13 100644 --- a/src/adaptors/web/zhihu/zhihuWebAdaptor.ts +++ b/src/adaptors/web/zhihu/zhihuWebAdaptor.ts @@ -24,7 +24,7 @@ */ import { WebApi } from "zhi-blog-api" -import { JsonUtil } from "zhi-common" +import { JsonUtil, StrUtil } from "zhi-common" /** * 知乎网页授权适配器 @@ -41,7 +41,9 @@ class ZhihuWebAdaptor extends WebApi { const resText = await fetchResponse.text() // console.log(res); const res = JsonUtil.safeParse(resText, {} as any) + const flag = res.uid ? true : false return { + flag: flag, uid: res.uid, title: res.name, avatar: res.avatar_url, diff --git a/src/components/set/PublishSetting.vue b/src/components/set/PublishSetting.vue index da7a44c..02174ef 100644 --- a/src/components/set/PublishSetting.vue +++ b/src/components/set/PublishSetting.vue @@ -46,6 +46,9 @@ import { usePlatformDefine } from "~/src/composables/usePlatformDefine.ts" import { ElMessage, ElMessageBox } from "element-plus" import { svgIcons } from "~/src/utils/svgIcons.ts" import { openBrowserWindow } from "~/src/utils/widgetUtils.ts" +import Adaptors from "~/src/adaptors" +import { Utils } from "~/src/utils/utils.ts" +import { AppInstance } from "~/src/appInstance.ts" const logger = createAppLogger("publish-setting") @@ -160,14 +163,24 @@ const handleOpenBrowserAuth = async (cfg: DynamicConfig) => { } const handleValidateWebAuth = (cfg: DynamicConfig) => { - const cookieCb = async (coo) => { + // 设置将要读取的域名 + const domain = cfg.domain + const cookieCb = async (domain: string, coo: any) => { ElMessage.info("验证中,请关注状态,没有授权表示不可用,已授权表示该平台可正常使用...") - console.log("coo=>", coo) - - // ElMessage.success("验证成功,该平台可正常使用") - // ElMessage.error(("验证失败,该平台将不可用")) + console.log("get cookie result=>", coo) + + const appInstance = new AppInstance() + const apiAdaptor = await Adaptors.getAdaptor(cfg.platformKey) + const api = Utils.webApi(appInstance, apiAdaptor) + const result = await api.getMetaData() + logger.info("get meta data=>", result) + if (result.flag) { + ElMessage.success("验证成功,该平台可正常使用") + } else { + ElMessage.error("验证失败,该平台将不可用") + } } - openBrowserWindow(cfg.authUrl, cookieCb) + openBrowserWindow(cfg.authUrl, domain, cookieCb) } const handleImportPre = () => { @@ -357,8 +370,8 @@ onMounted(async () => { {{ platform.authMode === AuthMode.API ? "设置" : platform.isAuth ? "再次授权" : "授权" }} diff --git a/src/components/set/publish/PlatformAddForm.vue b/src/components/set/publish/PlatformAddForm.vue index 5699a61..a0d7d59 100644 --- a/src/components/set/publish/PlatformAddForm.vue +++ b/src/components/set/publish/PlatformAddForm.vue @@ -177,6 +177,7 @@ const initForm = async (ptype: PlatformType, subtype: SubPlatformType) => { const newCfg = new DynamicConfig(ptype, newKey, newKey, subtype, svgIcon) newCfg.authMode = preTmpl.authMode newCfg.authUrl = preTmpl.authUrl ?? "" + newCfg.domain = preTmpl.domain ?? "" formData.dynCfg = newCfg logger.debug("pkey already exists, initialize the new one") } else { @@ -264,6 +265,10 @@ initPage() + + + + diff --git a/src/components/set/publish/PlatformUpdateForm.vue b/src/components/set/publish/PlatformUpdateForm.vue index 5c486fb..c71685a 100644 --- a/src/components/set/publish/PlatformUpdateForm.vue +++ b/src/components/set/publish/PlatformUpdateForm.vue @@ -187,6 +187,10 @@ initPage() + + + + diff --git a/src/components/set/publish/platform/dynamicConfig.ts b/src/components/set/publish/platform/dynamicConfig.ts index 35bebbd..e78240a 100644 --- a/src/components/set/publish/platform/dynamicConfig.ts +++ b/src/components/set/publish/platform/dynamicConfig.ts @@ -77,6 +77,16 @@ export class DynamicConfig { */ authUrl?: string + /** + * 域名 + */ + domain?: string + + /** + * cookie + */ + cookie?: string + /** * YAML转换器 */ diff --git a/src/utils/import/pre.ts b/src/utils/import/pre.ts index 65b1455..b24cdac 100644 --- a/src/utils/import/pre.ts +++ b/src/utils/import/pre.ts @@ -96,6 +96,7 @@ export const pre = { platformIcon: svgIcons.iconIFZhihu, authMode: AuthMode.WEBSITE, authUrl: "https://www.zhihu.com/signin", + domain: "zhihu.com", isEnabled: false, }, ], diff --git a/src/utils/widgetUtils.ts b/src/utils/widgetUtils.ts index 2f55ee7..56fa7bc 100644 --- a/src/utils/widgetUtils.ts +++ b/src/utils/widgetUtils.ts @@ -32,14 +32,14 @@ const logger = createAppLogger("widget-utils") /** * 打开网页弹窗 */ -export const openBrowserWindow = (url: string, cookieCb?: any) => { +export const openBrowserWindow = (url: string, domain?: string, cookieCb?: any) => { const { isInSiyuanWidget } = useSiyuanDevice() if (isInSiyuanWidget()) { const isDev = false const isModel = false const isShow = !cookieCb - doOpenBrowserWindow(url, undefined, undefined, isDev, isModel, isShow, cookieCb) + doOpenBrowserWindow(url, undefined, undefined, isDev, isModel, isShow, domain, cookieCb) } else { window.open(url) } @@ -65,6 +65,7 @@ export const openBrowserWindow = (url: string, cookieCb?: any) => { * @param isDev - 是否打开开发者工具 * @param modal - 是否模态 * @param isShow - 是否显示 + * @param domain - 域名 * @param cookieCallback - 窗口关闭回调 */ const doOpenBrowserWindow = ( @@ -74,7 +75,8 @@ const doOpenBrowserWindow = ( isDev = false, modal = false, isShow = true, - cookieCallback + domain = "", + cookieCallback = undefined ) => { try { if (StrUtil.isEmptyString(url)) { @@ -134,7 +136,7 @@ const doOpenBrowserWindow = ( } // 监听 close 事件 - newWindow.on("close", (evt) => { + newWindow.on("close", (evt: any) => { logger.info("窗口关闭事件触发") }) newWindow.loadURL(url) @@ -144,25 +146,19 @@ const doOpenBrowserWindow = ( const readCookies = () => { // https://www.electronjs.org/zh/docs/latest/api/session const ses = newWindow.webContents.session - - // 设置将要读取的域名 - const domain = "zhihu.com" - ses.cookies .get({ domain }) - .then((cookies) => { + .then((cookies: any) => { logger.info(`读取cookie事件触发,准备读取 ${domain} 下的所有 Cookie`) - cookieCallback(cookies) + cookieCallback(domain, cookies) }) - .catch((error) => { + .catch((error: any) => { console.error(`读取 Cookie 失败:${error}`) }) } readCookies() - // 将窗口隐藏起来 - newWindow.once("ready-to-show", () => { - newWindow.hide() - }) + newWindow.hide() + newWindow.close() } } catch (e) { logger.error("Open browser window failed", e)