@andrewheberle/serverless-ssh-ca 0.17.12 → 0.17.15

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.
Files changed (114) hide show
  1. package/README.md +6 -17
  2. package/dist/api/v3/index.d.ts +1 -0
  3. package/dist/api/v3/index.d.ts.map +1 -0
  4. package/dist/api/v3/index.js +1 -0
  5. package/dist/api/v3/index.js.map +1 -0
  6. package/dist/api/v3/schema.d.ts +9 -0
  7. package/dist/api/v3/schema.d.ts.map +1 -0
  8. package/dist/api/v3/schema.js +4 -4
  9. package/dist/api/v3/schema.js.map +1 -0
  10. package/dist/certificate.d.ts +1 -0
  11. package/dist/certificate.d.ts.map +1 -0
  12. package/dist/certificate.js +1 -0
  13. package/dist/certificate.js.map +1 -0
  14. package/dist/{db.d.ts → db/index.d.ts} +6 -6
  15. package/dist/db/index.d.ts.map +1 -0
  16. package/dist/db/index.js +151 -0
  17. package/dist/db/index.js.map +1 -0
  18. package/dist/db/migrations/0001_initial_schema.d.ts +3 -0
  19. package/dist/db/migrations/0001_initial_schema.d.ts.map +1 -0
  20. package/dist/db/migrations/0001_initial_schema.js +24 -0
  21. package/dist/db/migrations/0001_initial_schema.js.map +1 -0
  22. package/dist/db/migrations/index.d.ts +3 -0
  23. package/dist/db/migrations/index.d.ts.map +1 -0
  24. package/dist/db/migrations/index.js +5 -0
  25. package/dist/db/migrations/index.js.map +1 -0
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/krl.d.ts +1 -0
  31. package/dist/krl.d.ts.map +1 -0
  32. package/dist/krl.js +1 -0
  33. package/dist/krl.js.map +1 -0
  34. package/dist/logger.d.ts +1 -0
  35. package/dist/logger.d.ts.map +1 -0
  36. package/dist/logger.js +1 -0
  37. package/dist/logger.js.map +1 -0
  38. package/dist/proof.d.ts +2 -0
  39. package/dist/proof.d.ts.map +1 -0
  40. package/dist/proof.js +2 -1
  41. package/dist/proof.js.map +1 -0
  42. package/dist/router.d.ts +1 -0
  43. package/dist/router.d.ts.map +1 -0
  44. package/dist/router.js +1 -0
  45. package/dist/router.js.map +1 -0
  46. package/dist/sshsig/armor.d.ts +1 -0
  47. package/dist/sshsig/armor.d.ts.map +1 -0
  48. package/dist/sshsig/armor.js +1 -0
  49. package/dist/sshsig/armor.js.map +1 -0
  50. package/dist/sshsig/formats.d.ts +1 -0
  51. package/dist/sshsig/formats.d.ts.map +1 -0
  52. package/dist/sshsig/formats.js +1 -0
  53. package/dist/sshsig/formats.js.map +1 -0
  54. package/dist/sshsig/index.d.ts +1 -0
  55. package/dist/sshsig/index.d.ts.map +1 -0
  56. package/dist/sshsig/index.js +1 -0
  57. package/dist/sshsig/index.js.map +1 -0
  58. package/dist/sshsig/reader.d.ts +1 -0
  59. package/dist/sshsig/reader.d.ts.map +1 -0
  60. package/dist/sshsig/reader.js +1 -0
  61. package/dist/sshsig/reader.js.map +1 -0
  62. package/dist/sshsig/sig.d.ts +1 -0
  63. package/dist/sshsig/sig.d.ts.map +1 -0
  64. package/dist/sshsig/sig.js +1 -0
  65. package/dist/sshsig/sig.js.map +1 -0
  66. package/dist/sshsig/sig_parser.d.ts +1 -0
  67. package/dist/sshsig/sig_parser.d.ts.map +1 -0
  68. package/dist/sshsig/sig_parser.js +1 -0
  69. package/dist/sshsig/sig_parser.js.map +1 -0
  70. package/dist/sshsig/verifier.d.ts +1 -0
  71. package/dist/sshsig/verifier.d.ts.map +1 -0
  72. package/dist/sshsig/verifier.js +1 -0
  73. package/dist/sshsig/verifier.js.map +1 -0
  74. package/dist/sshsig/writer.d.ts +1 -0
  75. package/dist/sshsig/writer.d.ts.map +1 -0
  76. package/dist/sshsig/writer.js +1 -0
  77. package/dist/sshsig/writer.js.map +1 -0
  78. package/dist/types.d.ts +1 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +1 -0
  81. package/dist/types.js.map +1 -0
  82. package/dist/utils.d.ts +1 -0
  83. package/dist/utils.d.ts.map +1 -0
  84. package/dist/utils.js +4 -0
  85. package/dist/utils.js.map +1 -0
  86. package/dist/verify.d.ts +1 -0
  87. package/dist/verify.d.ts.map +1 -0
  88. package/dist/verify.js +1 -0
  89. package/dist/verify.js.map +1 -0
  90. package/package.json +16 -8
  91. package/src/api/v3/index.ts +419 -0
  92. package/src/api/v3/schema.ts +265 -0
  93. package/src/certificate.ts +214 -0
  94. package/src/db/index.ts +194 -0
  95. package/src/db/migrations/0001_initial_schema.ts +25 -0
  96. package/src/db/migrations/index.ts +6 -0
  97. package/src/index.ts +18 -0
  98. package/src/krl.ts +414 -0
  99. package/src/logger.ts +6 -0
  100. package/src/proof.ts +187 -0
  101. package/src/router.ts +35 -0
  102. package/src/sshsig/armor.ts +24 -0
  103. package/src/sshsig/formats.ts +226 -0
  104. package/src/sshsig/index.ts +47 -0
  105. package/src/sshsig/reader.ts +59 -0
  106. package/src/sshsig/sig.ts +17 -0
  107. package/src/sshsig/sig_parser.ts +90 -0
  108. package/src/sshsig/verifier.ts +85 -0
  109. package/src/sshsig/writer.ts +56 -0
  110. package/src/types.ts +49 -0
  111. package/src/utils.ts +414 -0
  112. package/src/verify.ts +25 -0
  113. package/LICENSE +0 -201
  114. package/dist/db.js +0 -111
package/dist/db.js DELETED
@@ -1,111 +0,0 @@
1
- import { tryWhile } from "@cloudflare/actors";
2
- import { logger } from "./logger";
3
- export var CertificateType;
4
- (function (CertificateType) {
5
- CertificateType[CertificateType["User"] = 0] = "User";
6
- CertificateType[CertificateType["Host"] = 1] = "Host";
7
- })(CertificateType || (CertificateType = {}));
8
- export const runStatement = async (stmt) => {
9
- return await tryWhile(async () => {
10
- return await stmt.run();
11
- }, shouldRetry);
12
- };
13
- export const shouldRetry = (err, nextAttempt) => {
14
- const errMsg = String(err);
15
- const isRetryableError = errMsg.includes("Network connection lost") ||
16
- errMsg.includes("storage caused object to be reset") ||
17
- errMsg.includes("reset because its code was updated") ||
18
- errMsg.includes("stream because client disconnected");
19
- if (nextAttempt <= 5 && isRetryableError) {
20
- return true;
21
- }
22
- return false;
23
- };
24
- export const dbCleanup = async (env) => {
25
- const l = logger(env).with("retention", env.DB_CERTIFICATE_RETENTION);
26
- if (env.DB_CERTIFICATE_RETENTION === "infinite") {
27
- l.info("skipping database cleanup");
28
- }
29
- l.info("starting database cleanup");
30
- try {
31
- const stmt = env.DB.prepare("DELETE FROM certificates WHERE unixepoch('subsec') > unixepoch(valid_before,'subsec',?)")
32
- .bind(env.DB_CERTIFICATE_RETENTION);
33
- const res = await stmt.run();
34
- l.info("completed database cleanup", "changes", res.meta.changes);
35
- }
36
- catch (err) {
37
- l.error("error during database cleanup", "retention", env.DB_CERTIFICATE_RETENTION);
38
- }
39
- };
40
- export const recordCertificate = async (env, certificate, keyid, certificateType = CertificateType.User) => {
41
- const serial = certificate.serial.readBigUInt64BE(0);
42
- const subjects = certificate.subjects.map((v) => {
43
- return v.toString();
44
- }).join(",");
45
- const extensions = certificate.getExtensions().map((v) => {
46
- // @ts-ignore: the name property does exist
47
- return v.name;
48
- }).join(",");
49
- const stmt = env.DB
50
- .prepare("INSERT INTO certificates (serial, key_id, principals, extensions, valid_after, valid_before, certificate_type, public_key) VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
51
- .bind(`${serial}`, keyid, subjects, extensions, certificate.validFrom.toISOString(), certificate.validUntil.toISOString(), certificateType, certificate.subjectKey.toString("ssh"));
52
- const res = await runStatement(stmt);
53
- if (!res.success) {
54
- if (res.error !== undefined) {
55
- throw new Error(res.error);
56
- }
57
- throw new Error("error during query");
58
- }
59
- };
60
- export const isRevoked = async (env, serial) => {
61
- const stmt = env.DB
62
- .prepare("SELECT serial FROM certificates WHERE serial = ? AND revoked_at NOTNULL")
63
- .bind(`${serial}`);
64
- const res = await runStatement(stmt);
65
- return res.results.length > 0;
66
- };
67
- export var RevocationStatus;
68
- (function (RevocationStatus) {
69
- RevocationStatus[RevocationStatus["NotFound"] = 0] = "NotFound";
70
- RevocationStatus[RevocationStatus["Revoked"] = 1] = "Revoked";
71
- RevocationStatus[RevocationStatus["Revokable"] = 2] = "Revokable";
72
- RevocationStatus[RevocationStatus["Unrevokable"] = 3] = "Unrevokable";
73
- })(RevocationStatus || (RevocationStatus = {}));
74
- export const revocationStatus = async (env, serial, publickey, certificateType) => {
75
- const stmt = env.DB
76
- .prepare("SELECT public_key, revoked_at as count FROM certificates WHERE serial = ? AND public_key = ? AND certificate_type = ?")
77
- .bind(`${serial}`, publickey, certificateType);
78
- const res = await runStatement(stmt);
79
- if (res.results.length === 0) {
80
- return RevocationStatus.NotFound;
81
- }
82
- const row = res.results?.[0];
83
- if (!row) {
84
- return RevocationStatus.NotFound;
85
- }
86
- if (row.revoked_at !== null) {
87
- return RevocationStatus.Revoked;
88
- }
89
- if (publickey === row.public_key) {
90
- return RevocationStatus.Revokable;
91
- }
92
- return RevocationStatus.Unrevokable;
93
- };
94
- export const getRevocationList = async (env, certificateType) => {
95
- const stmt = env.DB
96
- .prepare("SELECT serial FROM certificates WHERE revoked_at NOTNULL AND certificate_type = ? AND unixepoch('subsec') < unixepoch(valid_before,'subsec','24 hours')")
97
- .bind(certificateType);
98
- const res = await runStatement(stmt);
99
- const result = [];
100
- for (const item of res.results) {
101
- result.push(item.serial);
102
- }
103
- return result;
104
- };
105
- export const revokeCertificate = async (env, serial) => {
106
- const stmt = env.DB
107
- .prepare("UPDATE certificates SET revoked_at = ? WHERE serial = ? RETURNING revoked_at")
108
- .bind((new Date).toISOString(), `${serial}`);
109
- const res = await runStatement(stmt);
110
- return res.results;
111
- };