mirror of
https://github.com/classchartsapi/classcharts-api-js.git
synced 2026-05-14 11:58:13 +00:00
feat: parse cookies properly (#15)
This commit is contained in:
parent
70bf79e019
commit
64909d82b4
3 changed files with 23 additions and 23 deletions
|
|
@ -3,6 +3,7 @@ import type { GetPupilsResponse } from "./types";
|
||||||
|
|
||||||
import { ClasschartsClient } from "./baseClient";
|
import { ClasschartsClient } from "./baseClient";
|
||||||
import { API_BASE_PARENT, BASE_URL } from "./consts";
|
import { API_BASE_PARENT, BASE_URL } from "./consts";
|
||||||
|
import { parseCookies } from "./utils";
|
||||||
/**
|
/**
|
||||||
* The base client
|
* The base client
|
||||||
*/
|
*/
|
||||||
|
|
@ -51,18 +52,11 @@ export class ClasschartsParentClient extends ClasschartsClient {
|
||||||
if (request.status != 302 || !request.headers["set-cookie"])
|
if (request.status != 302 || !request.headers["set-cookie"])
|
||||||
throw new Error("Unauthenticated: Classcharts returned an error");
|
throw new Error("Unauthenticated: Classcharts returned an error");
|
||||||
|
|
||||||
const cookies = request.headers["set-cookie"];
|
const cookies = String(request.headers["set-cookie"]);
|
||||||
for (let i = 0; i < cookies.length; i++) {
|
this.authCookies = cookies.split(";");
|
||||||
cookies[i] = cookies[i].substring(0, cookies[i].indexOf(";"));
|
const sessionCookies = parseCookies(cookies);
|
||||||
}
|
const sessionID = JSON.parse(
|
||||||
|
String(sessionCookies["parent_session_credentials"])
|
||||||
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)
|
|
||||||
);
|
);
|
||||||
this.sessionId = sessionID.session_id;
|
this.sessionId = sessionID.session_id;
|
||||||
this.pupils = await this.getPupils();
|
this.pupils = await this.getPupils();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import type { AxiosRequestConfig } from "axios";
|
import type { AxiosRequestConfig } from "axios";
|
||||||
import { API_BASE_STUDENT, BASE_URL } from "./consts";
|
import { API_BASE_STUDENT, BASE_URL } from "./consts";
|
||||||
import { ClasschartsClient } from "./baseClient";
|
import { ClasschartsClient } from "./baseClient";
|
||||||
|
import { parseCookies } from "./utils";
|
||||||
/**
|
/**
|
||||||
* The base client
|
* The base client
|
||||||
*/
|
*/
|
||||||
|
|
@ -47,17 +48,11 @@ export class ClasschartsStudentClient extends ClasschartsClient {
|
||||||
});
|
});
|
||||||
if (request.status != 302 || !request.headers["set-cookie"])
|
if (request.status != 302 || !request.headers["set-cookie"])
|
||||||
throw new Error("Unauthenticated: Classcharts returned an error");
|
throw new Error("Unauthenticated: Classcharts returned an error");
|
||||||
const cookies = request.headers["set-cookie"];
|
const cookies = String(request.headers["set-cookie"]);
|
||||||
for (let i = 0; i < cookies.length; i++) {
|
this.authCookies = cookies.split(";");
|
||||||
cookies[i] = cookies[i].substring(0, cookies[i].indexOf(";"));
|
const sessionCookies = parseCookies(cookies);
|
||||||
}
|
const sessionID = JSON.parse(
|
||||||
this.authCookies = cookies;
|
String(sessionCookies["student_session_credentials"])
|
||||||
// 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)
|
|
||||||
);
|
);
|
||||||
this.sessionId = sessionID.session_id;
|
this.sessionId = sessionID.session_id;
|
||||||
const user = await this.getStudentInfo();
|
const user = await this.getStudentInfo();
|
||||||
|
|
|
||||||
11
src/utils.ts
Normal file
11
src/utils.ts
Normal 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;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue