Docker, Token-Refresh mit Puppeteer, 401-Hinweise
- Dockerfile + .dockerignore - token-refresh: Chromium öffnet drive.internxt.com, extrahiert Tokens - 401-Antworten: Link zu drive.internxt.com - Docs: Token-Erneuerung Option A (automatisch) / B (manuell) Made-with: Cursor
This commit is contained in:
@@ -234,7 +234,7 @@ async function handlePropfind(req, res) {
|
||||
} catch (err) {
|
||||
console.error('PROPFIND Fehler:', err.message);
|
||||
if (err.message?.includes('Token') || err.response?.status === 401) {
|
||||
res.status(401).send('Nicht autorisiert – Token erneuern');
|
||||
res.status(401).send('Nicht autorisiert – Token abgelaufen. Neu einloggen: https://drive.internxt.com');
|
||||
return;
|
||||
}
|
||||
res.status(500).send(err.message || 'Interner Fehler');
|
||||
@@ -304,7 +304,7 @@ async function handleMkcol(req, res) {
|
||||
} catch (err) {
|
||||
console.error('MKCOL Fehler:', err.message);
|
||||
if (err.message?.includes('Token') || err.response?.status === 401) {
|
||||
res.status(401).send('Nicht autorisiert');
|
||||
res.status(401).send('Nicht autorisiert – Token erneuern: https://drive.internxt.com');
|
||||
return;
|
||||
}
|
||||
res.status(500).send(err.message || 'Interner Fehler');
|
||||
@@ -343,7 +343,7 @@ async function handleDelete(req, res) {
|
||||
} catch (err) {
|
||||
console.error('DELETE Fehler:', err.message);
|
||||
if (err.message?.includes('Token') || err.response?.status === 401) {
|
||||
res.status(401).send('Nicht autorisiert');
|
||||
res.status(401).send('Nicht autorisiert – Token erneuern: https://drive.internxt.com');
|
||||
return;
|
||||
}
|
||||
res.status(500).send(err.message || 'Interner Fehler');
|
||||
@@ -429,7 +429,7 @@ async function handleMove(req, res) {
|
||||
} catch (err) {
|
||||
console.error('MOVE Fehler:', err.message);
|
||||
if (err.message?.includes('Token') || err.response?.status === 401) {
|
||||
res.status(401).send('Nicht autorisiert');
|
||||
res.status(401).send('Nicht autorisiert – Token erneuern: https://drive.internxt.com');
|
||||
return;
|
||||
}
|
||||
res.status(500).send(err.message || 'Interner Fehler');
|
||||
@@ -499,7 +499,7 @@ async function handleGet(req, res) {
|
||||
} catch (err) {
|
||||
console.error('GET Fehler:', err.message);
|
||||
if (err.message?.includes('Token') || err.response?.status === 401) {
|
||||
res.status(401).send('Nicht autorisiert');
|
||||
res.status(401).send('Nicht autorisiert – Token erneuern: https://drive.internxt.com');
|
||||
return;
|
||||
}
|
||||
if (!res.headersSent) res.status(500).send(err.message || 'Interner Fehler');
|
||||
@@ -666,7 +666,7 @@ async function handlePut(req, res) {
|
||||
} catch (err) {
|
||||
console.error('PUT Fehler:', err.message);
|
||||
if (err.message?.includes('Token') || err.response?.status === 401) {
|
||||
res.status(401).send('Nicht autorisiert');
|
||||
res.status(401).send('Nicht autorisiert – Token erneuern: https://drive.internxt.com');
|
||||
return;
|
||||
}
|
||||
if (!res.headersSent) res.status(500).send(err.message || 'Interner Fehler');
|
||||
|
||||
58
src/token-refresh.js
Normal file
58
src/token-refresh.js
Normal file
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Token-Refresh: Öffnet drive.internxt.com im Browser, wartet auf Login,
|
||||
* extrahiert Token und Mnemonic aus localStorage.
|
||||
*
|
||||
* Aufruf: npm run token-refresh
|
||||
*
|
||||
* Browser öffnet sich (headed). Einloggen, dann werden die Tokens ausgegeben.
|
||||
*/
|
||||
|
||||
import puppeteer from 'puppeteer';
|
||||
|
||||
const DRIVE_URL = 'https://drive.internxt.com';
|
||||
const POLL_MS = 2000;
|
||||
const TIMEOUT_MS = 5 * 60 * 1000; // 5 Min
|
||||
|
||||
async function getTokens(page) {
|
||||
return page.evaluate(() => {
|
||||
const token = localStorage.getItem('xNewToken') || localStorage.getItem('xToken');
|
||||
const mnemonic = localStorage.getItem('xMnemonic');
|
||||
return { token, mnemonic };
|
||||
});
|
||||
}
|
||||
|
||||
async function main() {
|
||||
console.log('Starte Browser – bitte auf', DRIVE_URL, 'einloggen.\n');
|
||||
|
||||
const browser = await puppeteer.launch({
|
||||
headless: false,
|
||||
defaultViewport: null,
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox'],
|
||||
});
|
||||
|
||||
const page = (await browser.pages())[0] || (await browser.newPage());
|
||||
await page.goto(DRIVE_URL, { waitUntil: 'networkidle2' });
|
||||
|
||||
const start = Date.now();
|
||||
while (Date.now() - start < TIMEOUT_MS) {
|
||||
const { token, mnemonic } = await getTokens(page);
|
||||
if (token && mnemonic) {
|
||||
console.log('\n=== Tokens gefunden – in .env eintragen ===\n');
|
||||
console.log('INXT_TOKEN=' + token);
|
||||
console.log('INXT_MNEMONIC=' + mnemonic);
|
||||
console.log('\n===========================================\n');
|
||||
await browser.close();
|
||||
return;
|
||||
}
|
||||
await new Promise((r) => setTimeout(r, POLL_MS));
|
||||
}
|
||||
|
||||
console.log('Timeout – keine Tokens gefunden. Bitte einloggen und erneut ausführen.');
|
||||
await browser.close();
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
main().catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user