From 21ffcfb10a7ebc12d050f3747fd124a5d3af2f4e Mon Sep 17 00:00:00 2001 From: Guru Date: Tue, 4 Feb 2025 13:23:25 +0530 Subject: [PATCH] feat: custom auth vue app --- examples/vue-app/src/App.vue | 6 ++++++ examples/vue-app/src/config.ts | 13 +++++++++++++ src/handlers/TelegramHandler.ts | 8 ++------ src/login.ts | 4 ++-- src/utils/helpers.ts | 4 ++++ 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/examples/vue-app/src/App.vue b/examples/vue-app/src/App.vue index 3116eb36..a62850f6 100644 --- a/examples/vue-app/src/App.vue +++ b/examples/vue-app/src/App.vue @@ -212,6 +212,7 @@ import { REDDIT, sapphireDevnetVerifierMap, sapphireDevnetVerifierOptions, + TELEGRAM, testnetVerifierMap, testnetVerifierOptions, TWITTER, @@ -289,6 +290,11 @@ const loginToConnectionMap = computed((): Record { const { idToken } = params; - const userInfo = this.objectToAuthDataMap(idToken); + const userInfo = objectToAuthDataMap(idToken); const { photo_url: profileImage = "", first_name = "", last_name = "", id } = userInfo; return { email: "", // Telegram does not provide email diff --git a/src/login.ts b/src/login.ts index 4e7da7ee..512aa28a 100644 --- a/src/login.ts +++ b/src/login.ts @@ -232,9 +232,9 @@ class CustomAuth { if (hash && queryParameters) { const { error, hashParameters, instanceParameters } = handleRedirectParameters(hash, queryParameters); if (error) throw new Error(error); - const { access_token: accessToken, id_token: idToken, ...rest } = hashParameters; + const { access_token: accessToken, id_token: idToken, tgAuthResult, ...rest } = hashParameters; // State has to be last here otherwise it will be overwritten - loginParams = { accessToken, idToken, ...rest, state: instanceParameters }; + loginParams = { accessToken, idToken: idToken || tgAuthResult || "", ...rest, state: instanceParameters }; } else { this.storageHelper.clearOrphanedLoginDetails(); if (this.config.uxMode === UX_MODE.REDIRECT) { diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 8d949e94..434de0cc 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -207,6 +207,10 @@ export const validateAndConstructUrl = (domain: string): URL => { } }; +export const objectToAuthDataMap = (tgAuthenticationResult: string) => { + return JSON.parse(atob(tgAuthenticationResult)) as { first_name: string; last_name: string; photo_url: string; username: string; id: number }; +}; + export function isMobileOrTablet(): boolean { const browser = Bowser.getParser(navigator.userAgent); const platform = browser.getPlatform();