1
0
Fork 0
mirror of https://github.com/classchartsapi/classcharts-api-js.git synced 2026-05-14 03:56:59 +00:00

feat: parse cookies properly (#15)

This commit is contained in:
James Cook 2022-08-03 16:53:46 +01:00 committed by GitHub
parent 70bf79e019
commit 64909d82b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 23 deletions

View file

@ -3,6 +3,7 @@ import type { GetPupilsResponse } from "./types";
import { ClasschartsClient } from "./baseClient";
import { API_BASE_PARENT, BASE_URL } from "./consts";
import { parseCookies } from "./utils";
/**
* The base client
*/
@ -51,18 +52,11 @@ export class ClasschartsParentClient extends ClasschartsClient {
if (request.status != 302 || !request.headers["set-cookie"])
throw new Error("Unauthenticated: Classcharts returned an error");
const cookies = request.headers["set-cookie"];
for (let i = 0; i < cookies.length; i++) {
cookies[i] = cookies[i].substring(0, cookies[i].indexOf(";"));
}
this.authCookies = cookies;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let sessionID: any = decodeURI(cookies[1])
.replace(/%3A/g, ":")
.replace(/%2C/g, ",");
sessionID = JSON.parse(
sessionID.substring(sessionID.indexOf("{"), sessionID.length)
const cookies = String(request.headers["set-cookie"]);
this.authCookies = cookies.split(";");
const sessionCookies = parseCookies(cookies);
const sessionID = JSON.parse(
String(sessionCookies["parent_session_credentials"])
);
this.sessionId = sessionID.session_id;
this.pupils = await this.getPupils();

View file

@ -1,6 +1,7 @@
import type { AxiosRequestConfig } from "axios";
import { API_BASE_STUDENT, BASE_URL } from "./consts";
import { ClasschartsClient } from "./baseClient";
import { parseCookies } from "./utils";
/**
* The base client
*/
@ -47,17 +48,11 @@ export class ClasschartsStudentClient extends ClasschartsClient {
});
if (request.status != 302 || !request.headers["set-cookie"])
throw new Error("Unauthenticated: Classcharts returned an error");
const cookies = request.headers["set-cookie"];
for (let i = 0; i < cookies.length; i++) {
cookies[i] = cookies[i].substring(0, cookies[i].indexOf(";"));
}
this.authCookies = cookies;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let sessionID: any = decodeURI(cookies[1])
.replace(/%3A/g, ":")
.replace(/%2C/g, ",");
sessionID = JSON.parse(
sessionID.substring(sessionID.indexOf("{"), sessionID.length)
const cookies = String(request.headers["set-cookie"]);
this.authCookies = cookies.split(";");
const sessionCookies = parseCookies(cookies);
const sessionID = JSON.parse(
String(sessionCookies["student_session_credentials"])
);
this.sessionId = sessionID.session_id;
const user = await this.getStudentInfo();

11
src/utils.ts Normal file
View file

@ -0,0 +1,11 @@
export function parseCookies(input: string) {
const output: Record<string, unknown> = {};
const cookies = input.split(",");
for (const cookie of cookies) {
const cookieSplit = cookie.split(";")[0].split("=");
output[decodeURIComponent(cookieSplit[0])] = decodeURIComponent(
cookieSplit[1]
);
}
return output;
}