-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathservice-worker.js
More file actions
122 lines (106 loc) · 2.9 KB
/
Copy pathservice-worker.js
File metadata and controls
122 lines (106 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
function getBrowser() {
if (typeof browser !== "undefined" && browser.runtime?.getBrowserInfo) {
return "Firefox";
}
if (typeof chrome !== "undefined") {
return "Chrome";
}
return "Edge";
}
const userBrowser = getBrowser();
chrome.declarativeNetRequest.updateEnabledRulesets(
{ enableRulesetIds: ["change_origin"] }
)
// chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
// if (changeInfo.status === "complete") {
// chrome.scripting.executeScript({
// target: { tabId: tab.id },
// files: ["content-scripts/DOMInjectionBridge.js"]
// });
// }
// });
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === "GET_EXTENSION_INFO") {
const extensionInfo = {
name: chrome.runtime.getManifest().name,
version: chrome.runtime.getManifest().version
};
sendResponse(extensionInfo);
}
return true;
});
function sendEdpMessage(message) {
chrome.tabs.query({ url: ["https://*.ecole-directe.plus/*"] }, (tabs) => {
tabs.forEach(tab => {
chrome.tabs.sendMessage(tab.id, message);
});
});
}
async function updateCookiesRules(cookies) {
const removeRuleIds = await chrome.declarativeNetRequest.getDynamicRules()
.then(rules => rules.map(rule => rule.id));
const rules = [];
const gtk = cookies.find((cookie) => cookie.split("=")[0].toLowerCase() === "gtk")?.split("=")[1];
if (!gtk) {
sendEdpMessage({ action: "noGtkCookie"})
return;
}
rules.push({
id: 10,
priority: 1,
condition: {
urlFilter: "||ecoledirecte.com",
requestMethods: ["post"],
resourceTypes: ["xmlhttprequest", "main_frame", "sub_frame"],
excludedInitiatorDomains: ["www.ecoledirecte.com", "ecoledirecte.com"]
},
action: {
type: "modifyHeaders",
requestHeaders: [
{
header: "X-GTK",
operation: "set",
value: gtk
},
{
header: "Cookie",
operation: "set",
value: cookies.join(";")
},
]
},
});
await chrome.declarativeNetRequest.updateDynamicRules({
removeRuleIds: removeRuleIds,
addRules: rules
});
sendEdpMessage({ action: "gtkRulesUpdated" });
}
function interceptCookieGTK(details) {
const url = new URL(details.url);
const queryParams = new URLSearchParams(url.search);
if (queryParams.get("gtk") !== "1") return;
const headers = details.responseHeaders;
const cookies = [];
for (const { name, value } of headers) {
if (name !== "set-cookie") continue;
if (userBrowser === "Firefox") {
value.split("\n").forEach((cookie) => {
cookies.push(cookie.split(";")[0]);
})
break;
}
cookies.push(value.split(";")[0]);
}
if (cookies.length) {
updateCookiesRules(cookies);
} else {
sendEdpMessage({ action: "noCookie" });
}
return { responseHeaders: headers };
}
chrome.webRequest.onHeadersReceived.addListener(
interceptCookieGTK,
{ urls: ["*://api.ecoledirecte.com/v3/login.awp*"] },
userBrowser === "Firefox" ? ["responseHeaders"] : ["responseHeaders", "extraHeaders"]
);