wip: more or less redirect

This commit is contained in:
William Ryder 2023-09-22 09:33:29 +02:00
parent 8a1a0d757e
commit 63dc2eb664
3 changed files with 52 additions and 7 deletions

View File

@ -316,6 +316,17 @@ export class ApiAdmentum extends EventEmitter implements Api {
)
// https://login.grandid.com/?sessionid=234324
// => 234324
console.log('url', url)
// Logged in: https://skola.admentum.se/overview
if (url.includes('overview')) {
console.log('already logged in to admentum')
this.isLoggedIn = true
this.personalNumber = personalNumber
this.emit('login')
return new DummyStatusChecker()
}
const sessionId = url.split('=').pop()
console.log('sessionId', sessionId)
console.log('adentum session id', sessionId)
@ -339,12 +350,12 @@ export class ApiAdmentum extends EventEmitter implements Api {
const locomotiveUrl = redirectLocomotive(sessionId)
const response = await this.fetch('follow-locomotive', locomotiveUrl, {
console.log('calling locomotive url: ', locomotiveUrl);
/*const response = await this.fetch('follow-locomotive', locomotiveUrl, {
method: 'GET',
redirect: 'follow',
});
console.log('locomotive response', response)
console.log('locomotive url', locomotiveUrl);
});*/
//console.log('locomotive response', response)
const callbackResponse = await this.followRedirects(locomotiveUrl);
console.log('final response:', callbackResponse);
//const testChildren = await this.getChildren()
@ -369,8 +380,9 @@ export class ApiAdmentum extends EventEmitter implements Api {
method: 'GET',
redirect: 'manual', // Disable automatic redirects
});
console.log('follow-redirect response', response);
if (response.status >= 300 && response.status < 400) {
console.log('response status:', response.status);
const newLocation = response.headers.get('location');
if (!newLocation) {
throw new Error('Redirect response missing location header');
@ -378,6 +390,7 @@ export class ApiAdmentum extends EventEmitter implements Api {
currentUrl = newLocation;
redirectCount++;
} else {
console.log('response status, not reidrect:', response.status);
// The response is not a redirect, return it
return response;
}

View File

@ -1,6 +1,6 @@
import { Fetcher, LoginStatusChecker } from '@skolplattformen/api'
import { EventEmitter } from 'events'
import { bankIdCheckUrl } from './routes'
import { bankIdCheckUrl, redirectLocomotive } from './routes'
export class GrandidChecker extends EventEmitter implements LoginStatusChecker {
private fetcher: Fetcher
@ -28,6 +28,7 @@ export class GrandidChecker extends EventEmitter implements LoginStatusChecker {
'x-requested-with': 'XMLHttpRequest',
},
}).then((res) => {
console.log('bankid full result', res)
return res.json()
})
console.log('bankid result', result)
@ -35,6 +36,28 @@ export class GrandidChecker extends EventEmitter implements LoginStatusChecker {
const isError = result.response?.status === 'error'
// https://mNN-mg-local.idp.funktionstjanster.se/mg-local/auth/ccp11/grp/pollstatus
if (ok) {
//===
/*const parts = this.basePollingUrl.split('?');
let locoUrl = '';
if (parts.length === 2) {
const queryString = parts[1];
const queryParams = queryString.split('&');
for (const param of queryParams) {
const [key, value] = param.split('=');
if (key === 'sessionid') {
locoUrl = redirectLocomotive(value);
}
}
} else {
console.log("Invalid URL format.");
}
console.log('calling fff locomotive url: ', locoUrl)
const response = await this.fetcher('follow-locomotive', locoUrl, {
method: 'GET',
redirect: 'manual',
});
console.log('locomotive response', response)*/
this.emit('OK')
} else if (isError) {
console.log('polling error')
@ -45,7 +68,7 @@ export class GrandidChecker extends EventEmitter implements LoginStatusChecker {
setTimeout(() => this.check(), 3000)
}
} catch (err) {
console.log('Error validating login to Hjärntorget', err)
console.log('Error validating login to Admentum', err)
this.emit('ERROR')
}
}

View File

@ -9,6 +9,15 @@ const admentum = new Admentum(fetch, {})
const run = async () => {
const sessionId = await admentum.login('7612040233')
admentum.on('login', async () => {
console.log('login YEAYEAY', )
// ITerate and log all cookies
cookieJar.getCookies('https://www.admentum.se').forEach((cookie) => {
console.log(cookie.toString())
})
})
}
run()