mirror of
https://github.com/bknd-io/bknd/
synced 2026-08-03 16:46:00 +00:00
test secrets extraction
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
import { afterAll, beforeAll, describe, expect, it } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, it } from "bun:test";
|
||||||
import { Guard } from "../../src/auth";
|
import { Guard } from "../../src/auth";
|
||||||
import { parse } from "../../src/core/utils";
|
|
||||||
import { DataApi } from "../../src/data/api/DataApi";
|
import { DataApi } from "../../src/data/api/DataApi";
|
||||||
import { DataController } from "../../src/data/api/DataController";
|
import { DataController } from "../../src/data/api/DataController";
|
||||||
import { dataConfigSchema } from "../../src/data/data-schema";
|
import { dataConfigSchema } from "../../src/data/data-schema";
|
||||||
import * as proto from "../../src/data/prototype";
|
import * as proto from "../../src/data/prototype";
|
||||||
import { schemaToEm } from "../helper";
|
import { schemaToEm } from "../helper";
|
||||||
import { disableConsoleLog, enableConsoleLog } from "core/utils/test";
|
import { disableConsoleLog, enableConsoleLog } from "core/utils/test";
|
||||||
|
import { parse } from "core/object/schema";
|
||||||
|
|
||||||
beforeAll(disableConsoleLog);
|
beforeAll(disableConsoleLog);
|
||||||
afterAll(enableConsoleLog);
|
afterAll(enableConsoleLog);
|
||||||
|
|||||||
@@ -46,20 +46,6 @@ export const guardRoleSchema = s.strictObject({
|
|||||||
implicit_allow: s.boolean().optional(),
|
implicit_allow: s.boolean().optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const a = s.record(strategiesSchema, {
|
|
||||||
// ^?
|
|
||||||
title: "Strategies",
|
|
||||||
default: {
|
|
||||||
password: {
|
|
||||||
type: "password",
|
|
||||||
enabled: true,
|
|
||||||
config: {
|
|
||||||
hashing: "sha256",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export const authConfigSchema = s.strictObject(
|
export const authConfigSchema = s.strictObject(
|
||||||
{
|
{
|
||||||
enabled: s.boolean({ default: false }),
|
enabled: s.boolean({ default: false }),
|
||||||
@@ -85,9 +71,7 @@ export const authConfigSchema = s.strictObject(
|
|||||||
},
|
},
|
||||||
{ title: "Authentication" },
|
{ title: "Authentication" },
|
||||||
);
|
);
|
||||||
const b = authConfigSchema.properties.basepath;
|
|
||||||
// ^?
|
export type AppAuthJWTConfig = s.Static<typeof jwtConfig>;
|
||||||
const c = authConfigSchema.properties.strategies;
|
|
||||||
// ^?
|
|
||||||
|
|
||||||
export type AppAuthSchema = s.Static<typeof authConfigSchema>;
|
export type AppAuthSchema = s.Static<typeof authConfigSchema>;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import type { CookieOptions } from "hono/utils/cookie";
|
|||||||
import type { ServerEnv } from "modules/Controller";
|
import type { ServerEnv } from "modules/Controller";
|
||||||
import { pick } from "lodash-es";
|
import { pick } from "lodash-es";
|
||||||
import { InvalidConditionsException } from "auth/errors";
|
import { InvalidConditionsException } from "auth/errors";
|
||||||
import { s, parse } from "core/object/schema";
|
import { s, parse, secret } from "core/object/schema";
|
||||||
|
|
||||||
type Input = any; // workaround
|
type Input = any; // workaround
|
||||||
export type JWTPayload = Parameters<typeof sign>[0];
|
export type JWTPayload = Parameters<typeof sign>[0];
|
||||||
@@ -72,7 +72,7 @@ export const jwtConfig = s
|
|||||||
.object(
|
.object(
|
||||||
{
|
{
|
||||||
// @todo: autogenerate a secret if not present. But it must be persisted from AppAuth
|
// @todo: autogenerate a secret if not present. But it must be persisted from AppAuth
|
||||||
secret: s.string({ default: "" }),
|
secret: secret({ default: "" }),
|
||||||
alg: s.string({ enum: ["HS256", "HS384", "HS512"], default: "HS256" }).optional(),
|
alg: s.string({ enum: ["HS256", "HS384", "HS512"], default: "HS256" }).optional(),
|
||||||
expires: s.number().optional(), // seconds
|
expires: s.number().optional(), // seconds
|
||||||
issuer: s.string().optional(),
|
issuer: s.string().optional(),
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import * as s from "jsonv-ts";
|
|||||||
export { validator as jsc, type Options } from "jsonv-ts/hono";
|
export { validator as jsc, type Options } from "jsonv-ts/hono";
|
||||||
export { describeRoute, schemaToSpec, openAPISpecs } from "jsonv-ts/hono";
|
export { describeRoute, schemaToSpec, openAPISpecs } from "jsonv-ts/hono";
|
||||||
|
|
||||||
|
export { secret } from "./secret";
|
||||||
|
|
||||||
export { s };
|
export { s };
|
||||||
|
|
||||||
export const stripMark = <O extends object>(o: O): O => o;
|
export const stripMark = <O extends object>(o: O): O => o;
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import { StringSchema, type IStringOptions } from "jsonv-ts";
|
||||||
|
|
||||||
|
export class SecretSchema<O extends IStringOptions> extends StringSchema<O> {}
|
||||||
|
|
||||||
|
export const secret = <O extends IStringOptions>(o?: O) => {
|
||||||
|
return new SecretSchema(o);
|
||||||
|
};
|
||||||
@@ -17,6 +17,7 @@ import {
|
|||||||
import * as SystemPermissions from "modules/permissions";
|
import * as SystemPermissions from "modules/permissions";
|
||||||
import { jsc, s, describeRoute, InvalidSchemaError } from "core/object/schema";
|
import { jsc, s, describeRoute, InvalidSchemaError } from "core/object/schema";
|
||||||
import { getVersion } from "core/env";
|
import { getVersion } from "core/env";
|
||||||
|
import { SecretSchema } from "core/object/schema/secret";
|
||||||
|
|
||||||
export type ConfigUpdate<Key extends ModuleKey = ModuleKey> = {
|
export type ConfigUpdate<Key extends ModuleKey = ModuleKey> = {
|
||||||
success: true;
|
success: true;
|
||||||
@@ -318,6 +319,19 @@ export class SystemController extends Controller {
|
|||||||
utc: datetimeStringUTC(),
|
utc: datetimeStringUTC(),
|
||||||
},
|
},
|
||||||
plugins: Array.from(this.app.plugins.keys()),
|
plugins: Array.from(this.app.plugins.keys()),
|
||||||
|
walk: {
|
||||||
|
auth: [
|
||||||
|
...c
|
||||||
|
.get("app")
|
||||||
|
.getSchema()
|
||||||
|
.auth.walk({ data: c.get("app").toJSON(true).auth }),
|
||||||
|
]
|
||||||
|
.filter((n) => n.schema instanceof SecretSchema)
|
||||||
|
.map((n) => ({
|
||||||
|
...n,
|
||||||
|
schema: n.schema.constructor.name,
|
||||||
|
})),
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user