socket-function 0.66.0 → 0.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/require/RequireController.ts +9 -2
- package/src/callHTTPHandler.ts +52 -0
- package/src/corsCheck.ts +0 -0
package/package.json
CHANGED
|
@@ -134,8 +134,9 @@ class RequireControllerBase {
|
|
|
134
134
|
|
|
135
135
|
public async requireHTML(config?: {
|
|
136
136
|
requireCalls?: string[];
|
|
137
|
+
cacheTime?: number;
|
|
137
138
|
}) {
|
|
138
|
-
let { requireCalls } = config || {};
|
|
139
|
+
let { requireCalls, cacheTime } = config || {};
|
|
139
140
|
let result = resolvedHTMLFile();
|
|
140
141
|
if (beforeEntryText.length > 0) {
|
|
141
142
|
let resolved: string[] = [];
|
|
@@ -166,7 +167,13 @@ class RequireControllerBase {
|
|
|
166
167
|
} else {
|
|
167
168
|
result = result.replace(ENTRY_TEMPLATE, "");
|
|
168
169
|
}
|
|
169
|
-
|
|
170
|
+
let headers: Record<string, string> = {
|
|
171
|
+
"Content-Type": "text/html"
|
|
172
|
+
};
|
|
173
|
+
if (cacheTime) {
|
|
174
|
+
headers["Cache-Control"] = `max-age=${Math.floor(cacheTime / 1000)}`;
|
|
175
|
+
}
|
|
176
|
+
return setHTTPResultHeaders(Buffer.from(result), headers);
|
|
170
177
|
}
|
|
171
178
|
|
|
172
179
|
public async getModules(
|
package/src/callHTTPHandler.ts
CHANGED
|
@@ -61,6 +61,58 @@ export async function httpCallHandler(request: http.IncomingMessage, response: h
|
|
|
61
61
|
// Don't keep alive, to prevent issues with zombie sockets.
|
|
62
62
|
response.setHeader("Connection", "close");
|
|
63
63
|
|
|
64
|
+
// CORS bs (due to having to explictly allow subdomains)
|
|
65
|
+
{
|
|
66
|
+
response.setHeader("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload");
|
|
67
|
+
response.setHeader("Cross-Origin-Opener-Policy", "same-origin-allow-popups");
|
|
68
|
+
// NOTE: "credentialless" would work here too
|
|
69
|
+
response.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
|
|
70
|
+
|
|
71
|
+
let origin = request.headers.origin || request.headers.referer;
|
|
72
|
+
let allowed = false;
|
|
73
|
+
if (!origin) {
|
|
74
|
+
// I guess it's a script, so just allow it (as it could easily set any header it wanted anyways)
|
|
75
|
+
allowed = true;
|
|
76
|
+
origin = "*";
|
|
77
|
+
} else {
|
|
78
|
+
let host = request.headers.host;
|
|
79
|
+
if (!host) {
|
|
80
|
+
throw new Error("Missing host in request headers");
|
|
81
|
+
}
|
|
82
|
+
function rootDomain(hostname: string) {
|
|
83
|
+
let parts = hostname.split(".");
|
|
84
|
+
if (parts.length > 2) {
|
|
85
|
+
return parts.slice(-2).join(".");
|
|
86
|
+
}
|
|
87
|
+
return hostname;
|
|
88
|
+
}
|
|
89
|
+
let hostDomain = rootDomain(host);
|
|
90
|
+
let originDomain = rootDomain(origin);
|
|
91
|
+
allowed = hostDomain === originDomain;
|
|
92
|
+
if (!allowed) {
|
|
93
|
+
console.log(`Rejected CORS, hostDomain: ${hostDomain} !== ${originDomain}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Allow if it has no origin, as that means it isn't a CORS request?
|
|
98
|
+
if (allowed) {
|
|
99
|
+
response.setHeader("Cross-Origin-Resource-Policy", "cross-origin");
|
|
100
|
+
} else {
|
|
101
|
+
response.setHeader("Cross-Origin-Resource-Policy", "same-site");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
response.setHeader("vary", "Access-Control-Request-Headers");
|
|
105
|
+
response.setHeader("Access-Control-Allow-Origin", allowed ? origin : "");
|
|
106
|
+
|
|
107
|
+
if (allowed) {
|
|
108
|
+
response.setHeader("Access-Control-Allow-Credentials", "true");
|
|
109
|
+
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
|
|
110
|
+
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Content-Length, X-Requested-With, x-uncompressed-content-length, Cookie");
|
|
111
|
+
}
|
|
112
|
+
response.setHeader("Access-Control-Expose-Headers", "x-uncompressed-content-length");
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
64
116
|
let urlBase = request.url;
|
|
65
117
|
if (!urlBase) {
|
|
66
118
|
throw new Error("Missing URL");
|
package/src/corsCheck.ts
ADDED
|
File without changes
|