From dcc86fb3f73c053cc290803be393e8ce3d57b183 Mon Sep 17 00:00:00 2001 From: TA2k Date: Tue, 14 Jan 2025 00:09:32 +0100 Subject: [PATCH] fix login to code url --- admin/copyurl.png | Bin 0 -> 57709 bytes admin/jsonConfig.json | 204 ++++++++++++++++++++++++++ io-package.json | 18 +-- main.js | 332 +++++++++++++++++++++--------------------- 4 files changed, 376 insertions(+), 178 deletions(-) create mode 100644 admin/copyurl.png create mode 100644 admin/jsonConfig.json diff --git a/admin/copyurl.png b/admin/copyurl.png new file mode 100644 index 0000000000000000000000000000000000000000..aef0071519208adbc2893a95ab96e31e007b07c6 GIT binary patch literal 57709 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 literal 0 HcmV?d00001 diff --git a/admin/jsonConfig.json b/admin/jsonConfig.json new file mode 100644 index 0000000..702fdc8 --- /dev/null +++ b/admin/jsonConfig.json @@ -0,0 +1,204 @@ +{ + "i18n": false, + "items": { + "username": { + "type": "text", + "label": { + "en": "App Email", + "de": "App-E-Mail", + "ru": "Электронная почта приложения", + "pt": "Email do aplicativo", + "nl": "App-e-mail", + "fr": "Courriel de l'application", + "it": "E-mail dell'app", + "es": "Correo electrónico de la aplicación", + "pl": "E-mail aplikacji", + "uk": "Електронна пошта додатка", + "zh-cn": "应用电子邮件" + }, + "newLine": true, + "xs": 12, + "sm": 12, + "md": 6, + "lg": 4, + "xl": 4 + }, + "password": { + "type": "password", + "repeat": false, + "visible": true, + "xs": 12, + "sm": 12, + "md": 6, + "lg": 4, + "xl": 4, + "label": { + "en": "App Password", + "de": "App-Passwort", + "ru": "Пароль приложения", + "pt": "Senha de app", + "nl": "App-wachtwoord", + "fr": "Mot de passe de l'application", + "it": "Password dell'app", + "es": "Contraseña de la aplicación", + "pl": "Hasło do aplikacji", + "uk": "Пароль додатка", + "zh-cn": "应用密码" + } + }, + "_captchaManual01": { + "type": "staticText", + "newLine": true, + "label": { + "en": "1. Open the Url below and login with your account", + "de": "1. Öffnen Sie die unten stehende URL und melden Sie sich mit Ihrem Konto an", + "ru": "1. Откройте URL ниже и войдите в свою учетную запись", + "pt": "1. Abra a URL abaixo e faça login com sua conta", + "nl": "1. Open de onderstaande URL en log in met uw account", + "fr": "1. Ouvrez l'URL ci-dessous et connectez-vous avec votre compte", + "it": "1. Apri l'URL qui sotto e accedi con il tuo account", + "es": "1. Abra la URL a continuación e inicie sesión con su cuenta", + "pl": "1. Otwórz poniższy URL i zaloguj się na swoje konto", + "zh-cn": "1. 打开下面的URL并使用您的帐户登录" + } + }, + "_captchaManual02": { + "type": "staticText", + "newLine": true, + "label": { + "en": "2. Open Developer Console F12 or Option + Command + I", + "de": "2. Öffnen Sie die Entwicklerkonsole F12 oder Option + Command + I", + "ru": "2. Откройте консоль разработчика F12 или Option + Command + I", + "pt": "2. Abra o Console do Desenvolvedor F12 ou Option + Command + I", + "nl": "2. Open de ontwikkelaarsconsole F12 of Option + Command + I", + "fr": "2. Ouvrez la console de développement F12 ou Option + Command + I", + "it": "2. Apri la Console degli sviluppatori F12 o Option + Command + I", + "es": "2. Abra la Consola de Desarrollador F12 o Option + Command + I", + "pl": "2. Otwórz konsolę deweloperską F12 lub Option + Command + I", + "zh-cn": "2. 打开开发者控制台 F12 或 Option + Command + I" + } + }, + "_captchaManual03": { + "type": "staticText", + "newLine": true, + "label": { + "en": "3. You see a failed redirect in the Console copy the msauth.com.bosch.indegoconnect.cloud:// url", + "de": "3. Sie sehen eine fehlgeschlagene Weiterleitung in der Konsole, kopieren Sie die msauth.com.bosch.indegoconnect.cloud:// URL", + "ru": "3. Вы видите неудачное перенаправление в консоли, скопируйте URL msauth.com.bosch.indegoconnect.cloud://", + "pt": "3. Você verá um redirecionamento falho no Console, copie a URL msauth.com.bosch.indegoconnect.cloud://", + "nl": "3. U ziet een mislukte omleiding in de console, kopieer de msauth.com.bosch.indegoconnect.cloud:// URL", + "fr": "3. Vous voyez une redirection échouée dans la console, copiez l'URL msauth.com.bosch.indegoconnect.cloud://", + "it": "3. Vedi un reindirizzamento non riuscito nella Console, copia l'URL msauth.com.bosch.indegoconnect.cloud://", + "es": "3. Verá un redireccionamiento fallido en la Consola, copie la URL msauth.com.bosch.indegoconnect.cloud://", + "pl": "3. W konsoli zobaczysz nieudane przekierowanie, skopiuj URL msauth.com.bosch.indegoconnect.cloud://", + "zh-cn": "3. 您会在控制台中看到失败的重定向,复制 msauth.com.bosch.indegoconnect.cloud:// URL" + } + }, + "_captchaManual04": { + "type": "staticText", + "newLine": true, + "label": { + "en": "4. Paste the url in the input field below", + "de": "4. Fügen Sie die URL in das unten stehende Eingabefeld ein", + "ru": "4. Вставьте URL в поле ввода ниже", + "pt": "4. Cole a URL no campo de entrada abaixo", + "nl": "4. Plak de URL in het onderstaande invoerveld", + "fr": "4. Collez l'URL dans le champ de saisie ci-dessous", + "it": "4. Incolla l'URL nel campo di input qui sotto", + "es": "4. Pegue la URL en el campo de entrada a continuación", + "pl": "4. Wklej URL w polu poniżej", + "zh-cn": "4. 将URL粘贴到下面的输入字段中" + } + }, + "_captchaImg": { + "type": "staticImage", + "src": "copyurl.png", + "sm": 6, + "xl": 3, + "md": 3, + "lg": 3, + "xs": 12 + }, + "_codeUrl": { + "type": "staticLink", + "label": { + "en": "SingleKey Login Url Click here", + "de": "SingleKey Login Url Hier klicken", + "ru": "URL входа SingleKey Нажмите здесь", + "pt": "URL de login SingleKey Clique aqui", + "nl": "SingleKey Login Url Klik hier", + "fr": "URL de connexion SingleKey Cliquez ici", + "it": "URL di accesso SingleKey Clicca qui", + "es": "URL de inicio de sesión de SingleKey Haga clic aquí", + "pl": "SingleKey Login Url Kliknij tutaj", + "zh-cn": "SingleKey 登录网址单击此处" + }, + "href": "https://prodindego.b2clogin.com/prodindego.onmicrosoft.com/b2c_1a_signup_signin/oauth2/v2.0/authorize?nonce=b_x1uhAjiy3iKMcXX1TKbJnBph18-J_Hms4vvWeE7qw&response_type=code&code_challenge_method=S256&scope=openid+profile+email+https:%2F%2Fprodindego.onmicrosoft.com%2Findego-mobile-api%2FIndego.Mower.User+offline_access&code_challenge=5C1HXuvfGjAo-6TVzy_95lQNmpAjorsngCwiD3w3VHs&redirect_uri=msauth.com.bosch.indegoconnect.cloud:%2F%2Fauth%2F&client_id=65bb8c9d-1070-4fb4-aa95-853618acc876&state=aylWn_85vBUdNlHPC_KeGoqrcsyi5VCxjQjvttvD85g", + "target": "_blank", + "button": true, + "newLine": true + }, + + "captcha": { + "type": "text", + "newLine": true, + "placeholder": "msauth.com.bosch.indegoconnect.cloud://auth/?state=aylWn_85vBUdNlHPC_KeGoq.....", + "label": { + "en": "Code Url", + "de": "Code Url", + "ru": "URL кода", + "pt": "URL do código", + "nl": "Code Url", + "fr": "URL du code", + "it": "URL del codice", + "es": "URL del código", + "pl": "URL kodu", + "zh-cn": "代码网址" + } + }, + "getMap": { + "type": "checkbox", + "newLine": true, + "xs": 12, + "sm": 12, + "md": 6, + "lg": 4, + "xl": 4, + "label": { + "en": "Get Map", + "de": "Karte abrufen", + "ru": "Получить карту", + "pt": "Obter mapa", + "nl": "Kaart ophalen", + "fr": "Obtenir la carte", + "it": "Ottieni mappa", + "es": "Obtener mapa", + "pl": "Pobierz mapę", + "uk": "Отримати карту", + "zh-cn": "获取地图" + } + }, + "interval": { + "type": "number", + "min": 1, + "xs": 12, + "sm": 12, + "md": 6, + "lg": 4, + "xl": 4, + "label": { + "en": "Update interval (in minutes)", + "de": "Aktualisierungsintervall (in Minuten)", + "ru": "Интервал обновления (в минутах)", + "pt": "Intervalo de atualização (em minutos)", + "nl": "Update-interval (in minuten)", + "fr": "Intervalle de mise à jour (en minutes)", + "it": "Intervallo di aggiornamento (in minuti)", + "es": "Intervalo de actualización (en minutos)", + "pl": "Interwał aktualizacji (w minutach)", + "uk": "Інтервал оновлення (в хвилинах)", + "zh-cn": "更新间隔(分钟)" + } + } + } +} diff --git a/io-package.json b/io-package.json index 53019da..fb63bc6 100644 --- a/io-package.json +++ b/io-package.json @@ -108,12 +108,8 @@ "uk": "Адаптер для косарки Bosch Indego", "zh-cn": "适用于博世 Indego 割草机的适配器" }, - "authors": [ - "TA2k " - ], - "keywords": [ - "Indego" - ], + "authors": ["TA2k "], + "keywords": ["Indego"], "licenseInformation": { "license": "MIT", "type": "free" @@ -131,7 +127,7 @@ "connectionType": "cloud", "dataSource": "poll", "adminUI": { - "config": "materialize" + "config": "json" }, "dependencies": [ { @@ -149,12 +145,8 @@ } } }, - "encryptedNative": [ - "password" - ], - "protectedNative": [ - "password" - ], + "encryptedNative": ["password"], + "protectedNative": ["password"], "native": { "username": "", "password": "", diff --git a/main.js b/main.js index 5ed41a5..68a79a6 100644 --- a/main.js +++ b/main.js @@ -134,175 +134,177 @@ class Boschindego extends utils.Adapter { } async login() { - if (!this.config.captcha) { - this.log.error('Please set capcha in the instance settings'); + if (!this.config.captcha || !this.config.captcha.startsWith('msauth.com.bosch.indegoconnect')) { + this.log.error('Please set code url in the instance settings'); return; } - const loginForm = await this.requestClient({ - method: 'get', - url: 'https://prodindego.b2clogin.com/prodindego.onmicrosoft.com/b2c_1a_signup_signin/oauth2/v2.0/authorize', - params: { - nonce: 'b_x1uhAjiy3iKMcXX1TKbJnBph18-J_Hms4vvWeE7qw', - response_type: 'code', - code_challenge_method: 'S256', - scope: - 'openid profile email https://prodindego.onmicrosoft.com/indego-mobile-api/Indego.Mower.User offline_access', - code_challenge: '5C1HXuvfGjAo-6TVzy_95lQNmpAjorsngCwiD3w3VHs', - redirect_uri: 'msauth.com.bosch.indegoconnect.cloud://auth/', - client_id: '65bb8c9d-1070-4fb4-aa95-853618acc876', - state: 'aylWn_85vBUdNlHPC_KeGoqrcsyi5VCxjQjvttvD85g', - }, - headers: { - Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'Accept-Language': 'de-de', - 'User-Agent': - 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1', - }, - }) - .then((res) => { - this.log.debug(JSON.stringify(res.data)); - return JSON.parse(res.data.split('var SETTINGS = ')[1].split(';')[0]); - }) - .catch((error) => { - this.log.error(error); - error.response && this.log.error(JSON.stringify(error.response.data)); - }); - if (!loginForm || !loginForm.csrf || !loginForm.transId) { - this.log.error('Could not extract login form'); - this.log.error(JSON.stringify(loginForm)); - return; - } - let formData = ''; + // const loginForm = await this.requestClient({ + // method: 'get', + // url: 'https://prodindego.b2clogin.com/prodindego.onmicrosoft.com/b2c_1a_signup_signin/oauth2/v2.0/authorize', + // params: { + // nonce: 'b_x1uhAjiy3iKMcXX1TKbJnBph18-J_Hms4vvWeE7qw', + // response_type: 'code', + // code_challenge_method: 'S256', + // scope: + // 'openid profile email https://prodindego.onmicrosoft.com/indego-mobile-api/Indego.Mower.User offline_access', + // code_challenge: '5C1HXuvfGjAo-6TVzy_95lQNmpAjorsngCwiD3w3VHs', + // redirect_uri: 'msauth.com.bosch.indegoconnect.cloud://auth/', + // client_id: '65bb8c9d-1070-4fb4-aa95-853618acc876', + // state: 'aylWn_85vBUdNlHPC_KeGoqrcsyi5VCxjQjvttvD85g', + // }, + // headers: { + // Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + // 'Accept-Language': 'de-de', + // 'User-Agent': + // 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1', + // }, + // }) + // .then((res) => { + // this.log.debug(JSON.stringify(res.data)); + // return JSON.parse(res.data.split('var SETTINGS = ')[1].split(';')[0]); + // }) + // .catch((error) => { + // this.log.error(error); + // error.response && this.log.error(JSON.stringify(error.response.data)); + // }); + // if (!loginForm || !loginForm.csrf || !loginForm.transId) { + // this.log.error('Could not extract login form'); + // this.log.error(JSON.stringify(loginForm)); + // return; + // } + // let formData = ''; - const loginUrl = await this.requestClient({ - method: 'get', - url: 'https://prodindego.b2clogin.com/prodindego.onmicrosoft.com/B2C_1A_signup_signin/api/CombinedSigninAndSignup/unified', - params: { - claimsexchange: 'BoschIDExchange', - csrf_token: loginForm.csrf, - tx: loginForm.transId, - p: 'B2C_1A_signup_signin', - diags: - '{"pageViewId":"281eab4f-ef89-4f5c-a546-ffad0bb1b00b","pageId":"CombinedSigninAndSignup","trace":[{"ac":"T005","acST":1699567715,"acD":1},{"ac":"T021 - URL:https://swsasharedprodb2c.blob.core.windows.net/b2c-templates/bosch/unified.html","acST":1699567715,"acD":712},{"ac":"T019","acST":1699567716,"acD":9},{"ac":"T004","acST":1699567716,"acD":4},{"ac":"T003","acST":1699567716,"acD":1},{"ac":"T035","acST":1699567716,"acD":0},{"ac":"T030Online","acST":1699567716,"acD":0},{"ac":"T002","acST":1699567791,"acD":0}]}', - }, - headers: { - Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'Accept-Language': 'de-de', - 'User-Agent': - 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1', - }, - }) - .then((res) => { - this.log.debug(JSON.stringify(res.data)); - formData = this.extractHidden(res.data); - return res.request.path; - }) - .catch((error) => { - this.log.error(error); - error.response && this.log.error(JSON.stringify(error.response.data)); - }); - const loginParams = qs.parse(loginUrl.split('?')[1]); - const loginUrlPath = loginUrl.split('?')[0]; - if (!loginParams || !loginParams.ReturnUrl) { - this.log.error('Could not extract login params'); - this.log.error(JSON.stringify(loginParams)); - return; - } - // const token = this.cookieJar.getCookiesSync('https://singlekey-id.com/auth/').find((cookie) => cookie.key === 'X-CSRF-FORM-TOKEN'); - const userResponse = await this.requestClient({ - method: 'post', - maxBodyLength: Infinity, - url: 'https://singlekey-id.com' + loginUrlPath, - headers: { - 'content-type': 'application/x-www-form-urlencoded', - accept: '*/*', - 'hx-request': 'true', - 'sec-fetch-site': 'same-origin', - 'hx-boosted': 'true', - 'accept-language': 'de-DE,de;q=0.9', - 'sec-fetch-mode': 'cors', - origin: 'https://singlekey-id.com', - 'user-agent': - 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1', - 'sec-fetch-dest': 'empty', - }, - params: loginParams, - data: { - 'UserIdentifierInput.EmailInput.StringValue': this.config.username, - 'h-captcha-response': this.config.captcha, - __RequestVerificationToken: formData['undefined'], - }, - }) - .then((res) => { - this.log.debug(JSON.stringify(res.data)); - return this.extractHidden(res.data); - }) - .catch((error) => { - this.log.error(error); - error.response && this.log.error(JSON.stringify(error.response.data)); - }); - if (!userResponse) { - this.log.error('Could not extract user data'); - return; - } - await this.requestClient({ - method: 'post', - maxBodyLength: Infinity, - url: 'https://singlekey-id.com' + loginUrlPath + '/password', - headers: { - 'content-type': 'application/x-www-form-urlencoded', - accept: '*/*', - 'hx-request': 'true', - 'sec-fetch-site': 'same-origin', - 'hx-boosted': 'true', - 'accept-language': 'de-DE,de;q=0.9', - 'sec-fetch-mode': 'cors', - origin: 'https://singlekey-id.com', - 'user-agent': - 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1', - 'sec-fetch-dest': 'empty', - }, - params: loginParams, - data: { - Password: this.config.password, - RememberMe: 'true', - __RequestVerificationToken: userResponse['undefined'], - }, - }).catch((error) => { - this.log.error(error); - error.response && this.log.error(JSON.stringify(error.response.data)); - }); + // const loginUrl = await this.requestClient({ + // method: 'get', + // url: 'https://prodindego.b2clogin.com/prodindego.onmicrosoft.com/B2C_1A_signup_signin/api/CombinedSigninAndSignup/unified', + // params: { + // claimsexchange: 'BoschIDExchange', + // csrf_token: loginForm.csrf, + // tx: loginForm.transId, + // p: 'B2C_1A_signup_signin', + // diags: + // '{"pageViewId":"281eab4f-ef89-4f5c-a546-ffad0bb1b00b","pageId":"CombinedSigninAndSignup","trace":[{"ac":"T005","acST":1699567715,"acD":1},{"ac":"T021 - URL:https://swsasharedprodb2c.blob.core.windows.net/b2c-templates/bosch/unified.html","acST":1699567715,"acD":712},{"ac":"T019","acST":1699567716,"acD":9},{"ac":"T004","acST":1699567716,"acD":4},{"ac":"T003","acST":1699567716,"acD":1},{"ac":"T035","acST":1699567716,"acD":0},{"ac":"T030Online","acST":1699567716,"acD":0},{"ac":"T002","acST":1699567791,"acD":0}]}', + // }, + // headers: { + // Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + // 'Accept-Language': 'de-de', + // 'User-Agent': + // 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1', + // }, + // }) + // .then((res) => { + // this.log.debug(JSON.stringify(res.data)); + // formData = this.extractHidden(res.data); + // return res.request.path; + // }) + // .catch((error) => { + // this.log.error(error); + // error.response && this.log.error(JSON.stringify(error.response.data)); + // }); + // const loginParams = qs.parse(loginUrl.split('?')[1]); + // const loginUrlPath = loginUrl.split('?')[0]; + // if (!loginParams || !loginParams.ReturnUrl) { + // this.log.error('Could not extract login params'); + // this.log.error(JSON.stringify(loginParams)); + // return; + // } + // // const token = this.cookieJar.getCookiesSync('https://singlekey-id.com/auth/').find((cookie) => cookie.key === 'X-CSRF-FORM-TOKEN'); + // const userResponse = await this.requestClient({ + // method: 'post', + // maxBodyLength: Infinity, + // url: 'https://singlekey-id.com' + loginUrlPath, + // headers: { + // 'content-type': 'application/x-www-form-urlencoded', + // accept: '*/*', + // 'hx-request': 'true', + // 'sec-fetch-site': 'same-origin', + // 'hx-boosted': 'true', + // 'accept-language': 'de-DE,de;q=0.9', + // 'sec-fetch-mode': 'cors', + // origin: 'https://singlekey-id.com', + // 'user-agent': + // 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1', + // 'sec-fetch-dest': 'empty', + // }, + // params: loginParams, + // data: { + // 'UserIdentifierInput.EmailInput.StringValue': this.config.username, + // 'h-captcha-response': this.config.captcha, + // __RequestVerificationToken: formData['undefined'], + // }, + // }) + // .then((res) => { + // this.log.debug(JSON.stringify(res.data)); + // return this.extractHidden(res.data); + // }) + // .catch((error) => { + // this.log.error(error); + // error.response && this.log.error(JSON.stringify(error.response.data)); + // }); + // if (!userResponse) { + // this.log.error('Could not extract user data'); + // return; + // } + // await this.requestClient({ + // method: 'post', + // maxBodyLength: Infinity, + // url: 'https://singlekey-id.com' + loginUrlPath + '/password', + // headers: { + // 'content-type': 'application/x-www-form-urlencoded', + // accept: '*/*', + // 'hx-request': 'true', + // 'sec-fetch-site': 'same-origin', + // 'hx-boosted': 'true', + // 'accept-language': 'de-DE,de;q=0.9', + // 'sec-fetch-mode': 'cors', + // origin: 'https://singlekey-id.com', + // 'user-agent': + // 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1', + // 'sec-fetch-dest': 'empty', + // }, + // params: loginParams, + // data: { + // Password: this.config.password, + // RememberMe: 'true', + // __RequestVerificationToken: userResponse['undefined'], + // }, + // }).catch((error) => { + // this.log.error(error); + // error.response && this.log.error(JSON.stringify(error.response.data)); + // }); - const htmlForm = await this.requestClient({ - method: 'get', - url: 'https://singlekey-id.com' + loginParams.ReturnUrl, - }); - const formDataAuth = this.extractHidden(htmlForm.data); - const response = await this.requestClient({ - method: 'post', - url: 'https://prodindego.b2clogin.com/prodindego.onmicrosoft.com/oauth2/authresp', - headers: { - 'content-type': 'application/x-www-form-urlencoded', - accept: 'application/json, text/plain, */*', - 'accept-language': 'de-de', - }, - data: formDataAuth, - }) - .then((res) => { - this.log.debug(JSON.stringify(res.data)); - return; - }) - .catch((error) => { - if (error && error.message.includes('Unsupported protocol')) { - return qs.parse(error.request._options.path.split('?')[1]); - } - this.log.error('Authresp step faild'); - this.log.error(error); - error.response && this.log.error(JSON.stringify(error.response.data)); - }); - if (!response) { - return; - } + // const htmlForm = await this.requestClient({ + // method: 'get', + // url: 'https://singlekey-id.com' + loginParams.ReturnUrl, + // }); + // const formDataAuth = this.extractHidden(htmlForm.data); + // const response = await this.requestClient({ + // method: 'post', + // url: 'https://prodindego.b2clogin.com/prodindego.onmicrosoft.com/oauth2/authresp', + // headers: { + // 'content-type': 'application/x-www-form-urlencoded', + // accept: 'application/json, text/plain, */*', + // 'accept-language': 'de-de', + // }, + // data: formDataAuth, + // }) + // .then((res) => { + // this.log.debug(JSON.stringify(res.data)); + // return; + // }) + // .catch((error) => { + // if (error && error.message.includes('Unsupported protocol')) { + // return qs.parse(error.request._options.path.split('?')[1]); + // } + // this.log.error('Authresp step faild'); + // this.log.error(error); + // error.response && this.log.error(JSON.stringify(error.response.data)); + // }); + // if (!response) { + // return; + // } + + const response = qs.parse(this.config.captcha.split('?')[1]); await this.requestClient({ method: 'post',