summaryrefslogtreecommitdiff
path: root/ext/node/polyfills
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills')
-rw-r--r--ext/node/polyfills/tls.ts57
1 files changed, 56 insertions, 1 deletions
diff --git a/ext/node/polyfills/tls.ts b/ext/node/polyfills/tls.ts
index 7d00bc6e5..4cfe9ebd6 100644
--- a/ext/node/polyfills/tls.ts
+++ b/ext/node/polyfills/tls.ts
@@ -7,6 +7,10 @@
import { notImplemented } from "ext:deno_node/_utils.ts";
import tlsCommon from "node:_tls_common";
import tlsWrap from "node:_tls_wrap";
+import { op_get_root_certificates } from "ext:core/ops";
+import { primordials } from "ext:core/mod.js";
+
+const { ObjectFreeze } = primordials;
// openssl -> rustls
const cipherMap = {
@@ -30,7 +34,58 @@ export function getCiphers() {
return Object.keys(cipherMap).map((name) => name.toLowerCase());
}
-export const rootCertificates = undefined;
+let lazyRootCertificates: string[] | null = null;
+function ensureLazyRootCertificates(target: string[]) {
+ if (lazyRootCertificates === null) {
+ lazyRootCertificates = op_get_root_certificates() as string[];
+ lazyRootCertificates.forEach((v) => target.push(v));
+ ObjectFreeze(target);
+ }
+}
+export const rootCertificates = new Proxy([] as string[], {
+ // @ts-ignore __proto__ is not in the types
+ __proto__: null,
+ get(target, prop) {
+ ensureLazyRootCertificates(target);
+ return Reflect.get(target, prop);
+ },
+ ownKeys(target) {
+ ensureLazyRootCertificates(target);
+ return Reflect.ownKeys(target);
+ },
+ has(target, prop) {
+ ensureLazyRootCertificates(target);
+ return Reflect.has(target, prop);
+ },
+ getOwnPropertyDescriptor(target, prop) {
+ ensureLazyRootCertificates(target);
+ return Reflect.getOwnPropertyDescriptor(target, prop);
+ },
+ set(target, prop, value) {
+ ensureLazyRootCertificates(target);
+ return Reflect.set(target, prop, value);
+ },
+ defineProperty(target, prop, descriptor) {
+ ensureLazyRootCertificates(target);
+ return Reflect.defineProperty(target, prop, descriptor);
+ },
+ deleteProperty(target, prop) {
+ ensureLazyRootCertificates(target);
+ return Reflect.deleteProperty(target, prop);
+ },
+ isExtensible(target) {
+ ensureLazyRootCertificates(target);
+ return Reflect.isExtensible(target);
+ },
+ preventExtensions(target) {
+ ensureLazyRootCertificates(target);
+ return Reflect.preventExtensions(target);
+ },
+ setPrototypeOf() {
+ return false;
+ },
+});
+
export const DEFAULT_ECDH_CURVE = "auto";
export const DEFAULT_MAX_VERSION = "TLSv1.3";
export const DEFAULT_MIN_VERSION = "TLSv1.2";