diff --git a/src/JCWallet.d.ts b/src/JCWallet.d.ts index 46d0180..2bf357f 100644 --- a/src/JCWallet.d.ts +++ b/src/JCWallet.d.ts @@ -25,6 +25,11 @@ declare namespace jsb { export function scanQRCode(id: number, title: string); export function restoreKey(id: number, oid: string); export function generateWallet(idHash: string, seedHash: string); + export function hexDeflate(str: string): string; + export function hexInflate(str: string): string; + export function encryptedLocalKey(pk: string): string; + export function walletEncrypt(str: string): string; + export function walletDecrypt(str: string): string; export function prepareWallet( idHash: string, seedHash: string, diff --git a/src/api/WalletApi.ts b/src/api/WalletApi.ts index 5b34235..807a701 100644 --- a/src/api/WalletApi.ts +++ b/src/api/WalletApi.ts @@ -32,7 +32,6 @@ export function getWalletInfo() { } export function uploadWalletInfo(data) { - console.log("uploadWalletInfo: " + data); const url = `${WALLET_API_HOST}/wallet/info`; return POST_JSON(url, data); } @@ -46,3 +45,8 @@ export function uploadUserCollection(data) { const url = `${WALLET_API_HOST}/wallet/collection`; return POST_JSON(url, data); } + +export function uploadInfoForWebLogin(data) { + const url = `${WALLET_API_HOST}/bridge/upload`; + return POST_JSON(url, data); +} diff --git a/src/index.ts b/src/index.ts index 2512a84..f964f45 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,6 +23,7 @@ import { AllChains } from "./data/allchain"; import { IAccount, INFT, initAccount, initNFT } from "./data/DataModel"; import { singleton } from "./decorator/singleton.decorator"; import { saveData } from "./manage/DataManage"; +import { parseUrl } from "./manage/SchemeManage"; import { loadInternalWallet, restoreWalletByMnemonic, @@ -42,6 +43,7 @@ import { } from "./util/chain.util"; import { fromTokenMinimalUnit } from "./util/number.util"; import { buildLoginSignMsg, signLogin } from "./util/sign.util"; +import { findUrlScheme } from "./util/string.util"; var global = (typeof globalThis !== "undefined" && globalThis) || @@ -661,6 +663,15 @@ export default class JCWallet { } return this.feeAddressMap.get(typeName); } + + public async scanQr(title: string) { + let result = (await this.nativeSvr.scanQRCode(title)) + ""; + console.log("scan qr code: " + result); + if (result && result.indexOf("://") >= 0) { + await parseUrl(result); + } + return result; + } } // window.jc = window.jc || {wallet: new JCWallet()}; diff --git a/src/manage/SchemeManage.ts b/src/manage/SchemeManage.ts new file mode 100644 index 0000000..de9251f --- /dev/null +++ b/src/manage/SchemeManage.ts @@ -0,0 +1,17 @@ +import { findUrlScheme } from "../util/string.util"; +import { parseWebLogin } from "./WalletManage"; + +export function parseUrl(str: string) { + let scheme = findUrlScheme(str); + if (!scheme) { + return; + } + const dataStr = str.replace(scheme + "://", ""); + switch (scheme) { + case "weblogin": + parseWebLogin(dataStr); + break; + default: + break; + } +} diff --git a/src/manage/WalletManage.ts b/src/manage/WalletManage.ts index 36ef365..5313243 100644 --- a/src/manage/WalletManage.ts +++ b/src/manage/WalletManage.ts @@ -9,6 +9,7 @@ import { googleAuth, tikTokAuth, twitterAuth, + uploadInfoForWebLogin, uploadWalletInfo, } from "../api/WalletApi"; import { WalletEnv } from "../config/WalletEnv"; @@ -140,3 +141,19 @@ export function walletSign(str: string) { let result = jsb.walletSign(str); return result; } + +export async function parseWebLogin(dataStr: string) { + console.log("found web login scheme, begin login"); + if (dataStr.indexOf("|") < 0) { + return; + } + let datas = dataStr.split("|"); + let webtoken = datas[0]; + let pk64 = datas[1]; + let pk = jsb.hexInflate(pk64); + let keyEncrypt = jsb.encryptedLocalKey(pk); + console.log("webtoken: " + webtoken); + console.log("local key: " + keyEncrypt); + let result = await uploadInfoForWebLogin({ key: keyEncrypt, webtoken }); + console.log("login result: " + result); +} diff --git a/src/util/string.util.ts b/src/util/string.util.ts new file mode 100644 index 0000000..8d27c90 --- /dev/null +++ b/src/util/string.util.ts @@ -0,0 +1,9 @@ +export const RE_URL_SCHEME = /^(.+?):\/\/.+?$/; + +export function findUrlScheme(url: string) { + let result = url.match(RE_URL_SCHEME); + if (!result) { + return ""; + } + return result[1]; +}