diff --git a/matrix_appservice_kakaotalk/user.py b/matrix_appservice_kakaotalk/user.py index 93b4bae..c4decd9 100644 --- a/matrix_appservice_kakaotalk/user.py +++ b/matrix_appservice_kakaotalk/user.py @@ -424,10 +424,10 @@ class User(DBUser, BaseUser): state_event=BridgeStateEvent.UNKNOWN_ERROR, error_code="kt-reconnection-error", ) - except Exception: + except Exception as e: self.log.exception("Error connecting to KakaoTalk") await self.send_bridge_notice( - "Failed to connect to KakaoTalk: unknown error (see logs for more details)", + f"Failed to connect to KakaoTalk: {e.message}", edit=event_id, state_event=BridgeStateEvent.UNKNOWN_ERROR, error_code="kt-reconnection-error", diff --git a/node/package.json b/node/package.json index fb0b8e0..536be50 100644 --- a/node/package.json +++ b/node/package.json @@ -19,6 +19,7 @@ }, "dependencies": { "arg": "^4.1.3", + "hash-wasm": "^4.8.0", "node-kakao": "4.5.0", "systemd-daemon": "^1.1.2" }, diff --git a/node/src/client.js b/node/src/client.js index 15b71f5..801a5c6 100644 --- a/node/src/client.js +++ b/node/src/client.js @@ -40,6 +40,7 @@ const { OpenChannelUserPerm } = openlink import chat from "node-kakao/chat" const { KnownChatType } = chat +import * as modutil from "./modutil.js" import { emitLines, promisify } from "./util.js" /** @@ -581,7 +582,7 @@ export default class PeerClient { * @param {string} uuid */ async #createAuthClient(uuid) { - return await AuthApiClient.create(this.deviceName, uuid) + return await AuthApiClient.create(this.deviceName, uuid, {}, modutil.ModXVCProvider) } // TODO Wrapper for per-user commands diff --git a/node/src/modutil.js b/node/src/modutil.js new file mode 100644 index 0000000..c82b4ff --- /dev/null +++ b/node/src/modutil.js @@ -0,0 +1,30 @@ +// matrix-appservice-kakaotalk - A Matrix-KakaoTalk puppeting bridge. +// Copyright (C) 2022 Tulir Asokan, Andrew Ferrazzutti +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +import { sha512 } from "hash-wasm" + +import kakao from "node-kakao" +const { DefaultConfiguration } = kakao + + +DefaultConfiguration.version = "3.4.2" +DefaultConfiguration.appVersion = "3.4.2.3187" + +export const ModXVCProvider = { + toFullXVCKey(deviceUUID, userAgent, email) { + const source = `WINTER|${userAgent}|ARTHUR|${email}|${deviceUUID}` + return sha512(source) + } +} \ No newline at end of file