@betterportal/auth-default 10.1.47 → 10.1.48
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/README.md +2 -0
- package/lib/bp-contracts/org.betterportal.auth.default.json +3 -88
- package/lib/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.js +5 -16
- package/lib/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.js.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/index.d.ts +0 -5
- package/lib/plugins/service-betterportal-auth-default/index.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/index.js +1 -29
- package/lib/plugins/service-betterportal-auth-default/index.js.map +1 -1
- package/lib/schemas/service-betterportal-auth-default.json +1 -1
- package/lib/schemas/service-betterportal-auth-default.plugin.json +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -10,3 +10,5 @@ This package defines the initial JWT-oriented auth contract for:
|
|
|
10
10
|
- user-management-adjacent APIs
|
|
11
11
|
|
|
12
12
|
It depends on the BetterPortal framework contracts and keeps auth as a plugin category rather than core behavior.
|
|
13
|
+
|
|
14
|
+
After-login and after-logout destinations are app-owned `app.auth.redirects` view references configured in Tenants & Apps, not provider addon fields.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"pluginId": "org.betterportal.auth.default",
|
|
5
5
|
"title": "BetterPortal Default Auth",
|
|
6
6
|
"description": "JWT-issuing auth service (RS256 + JWKS + bcrypt user store).",
|
|
7
|
-
"version": "10.1.
|
|
7
|
+
"version": "10.1.48",
|
|
8
8
|
"category": "service",
|
|
9
9
|
"deploymentModes": [
|
|
10
10
|
"self-hosted"
|
|
@@ -848,94 +848,9 @@
|
|
|
848
848
|
}
|
|
849
849
|
}
|
|
850
850
|
],
|
|
851
|
-
"configSchemas": [
|
|
852
|
-
{
|
|
853
|
-
"id": "auth.default.app",
|
|
854
|
-
"title": "Default Auth Config",
|
|
855
|
-
"description": "App-scoped default auth settings.",
|
|
856
|
-
"scope": "app",
|
|
857
|
-
"jsonSchema": {
|
|
858
|
-
"loginRedirectPath": "string",
|
|
859
|
-
"logoutRedirectPath": "string"
|
|
860
|
-
},
|
|
861
|
-
"groups": [
|
|
862
|
-
{
|
|
863
|
-
"id": "login",
|
|
864
|
-
"title": "Login",
|
|
865
|
-
"description": "Routes used after signing in.",
|
|
866
|
-
"order": 10,
|
|
867
|
-
"optional": true
|
|
868
|
-
},
|
|
869
|
-
{
|
|
870
|
-
"id": "logout",
|
|
871
|
-
"title": "Logout",
|
|
872
|
-
"description": "Routes used after signing out.",
|
|
873
|
-
"order": 20,
|
|
874
|
-
"optional": true
|
|
875
|
-
}
|
|
876
|
-
],
|
|
877
|
-
"fields": [
|
|
878
|
-
{
|
|
879
|
-
"key": "loginRedirectPath",
|
|
880
|
-
"title": "Logged In Route",
|
|
881
|
-
"description": "Tenant route shown after signing in when no next path is supplied.",
|
|
882
|
-
"scope": "app",
|
|
883
|
-
"visibility": "protected",
|
|
884
|
-
"ownership": "bp",
|
|
885
|
-
"sourceOfTruth": "bp",
|
|
886
|
-
"groupId": "login",
|
|
887
|
-
"order": 10,
|
|
888
|
-
"defaultValue": "/",
|
|
889
|
-
"ui": {
|
|
890
|
-
"control": "select",
|
|
891
|
-
"optionsSource": "app.routes"
|
|
892
|
-
},
|
|
893
|
-
"required": false
|
|
894
|
-
},
|
|
895
|
-
{
|
|
896
|
-
"key": "logoutRedirectPath",
|
|
897
|
-
"title": "Logged Out Route",
|
|
898
|
-
"description": "Tenant route shown after signing out.",
|
|
899
|
-
"scope": "app",
|
|
900
|
-
"visibility": "protected",
|
|
901
|
-
"ownership": "bp",
|
|
902
|
-
"sourceOfTruth": "bp",
|
|
903
|
-
"groupId": "logout",
|
|
904
|
-
"order": 10,
|
|
905
|
-
"defaultValue": "/",
|
|
906
|
-
"ui": {
|
|
907
|
-
"control": "select",
|
|
908
|
-
"optionsSource": "app.routes"
|
|
909
|
-
},
|
|
910
|
-
"required": false
|
|
911
|
-
}
|
|
912
|
-
]
|
|
913
|
-
}
|
|
914
|
-
],
|
|
851
|
+
"configSchemas": [],
|
|
915
852
|
"permissions": [],
|
|
916
|
-
"adminApis": [
|
|
917
|
-
{
|
|
918
|
-
"id": "config.schema",
|
|
919
|
-
"title": "Config Schema",
|
|
920
|
-
"description": "BetterPortal-managed config schemas for this service.",
|
|
921
|
-
"path": "/.well-known/bp/config/schema",
|
|
922
|
-
"methods": [
|
|
923
|
-
"GET"
|
|
924
|
-
],
|
|
925
|
-
"supportsCustomUi": false
|
|
926
|
-
},
|
|
927
|
-
{
|
|
928
|
-
"id": "config.values",
|
|
929
|
-
"title": "Config Values",
|
|
930
|
-
"description": "Read and write BetterPortal-managed config values.",
|
|
931
|
-
"path": "/.well-known/bp/config",
|
|
932
|
-
"methods": [
|
|
933
|
-
"GET",
|
|
934
|
-
"POST"
|
|
935
|
-
],
|
|
936
|
-
"supportsCustomUi": false
|
|
937
|
-
}
|
|
938
|
-
],
|
|
853
|
+
"adminApis": [],
|
|
939
854
|
"webhooks": [],
|
|
940
855
|
"apiContracts": [],
|
|
941
856
|
"m2mRequests": [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.impl.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"route.impl.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,WAAW;;;EAGI,CAAC;AAE7B,eAAO,MAAM,aAAa,qBAA0C,CAAC;AAErE,eAAO,MAAM,aAAa;;;;EAIE,CAAC;AAE7B,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;EA2BC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,WAAW,8DAA8D,CAAC;AACvF,eAAO,MAAM,IAAI,eAAe,CAAC;AACjC,eAAO,MAAM,YAAY,UAAsD,CAAC;AAChF,eAAO,MAAM,MAAM,EAAE,uBAA8C,CAAC;AAEpE,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAQF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;EAoDrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8EtB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as av from "anyvali";
|
|
2
|
+
import { resolveAppAuthRedirect } from "@betterportal/framework";
|
|
2
3
|
import { createHandler } from "../../.bp-generated/route-runtime.js";
|
|
3
|
-
import { resolveDefaultAuthAppConfig } from "../../index.js";
|
|
4
4
|
export const QuerySchema = av.object({
|
|
5
5
|
action: av.optional(av.string()).describe("Optional login route action, currently supports logout."),
|
|
6
6
|
next: av.optional(av.string()).describe("The view path that redirected to the login page and should be redirected back to after a successful login.")
|
|
@@ -58,20 +58,11 @@ function runtimeFrom(ctx) {
|
|
|
58
58
|
throw new Error("Auth runtime not available on handler context");
|
|
59
59
|
return runtime;
|
|
60
60
|
}
|
|
61
|
-
function normalizeRedirect(raw) {
|
|
62
|
-
const redirect = raw?.trim();
|
|
63
|
-
if (!redirect)
|
|
64
|
-
return "/";
|
|
65
|
-
if (redirect.startsWith("http://") || redirect.startsWith("https://"))
|
|
66
|
-
return redirect;
|
|
67
|
-
return redirect.startsWith("/") ? redirect : `/${redirect}`;
|
|
68
|
-
}
|
|
69
61
|
export const handleGet = createHandler({ response: ResponseSchema, query: QuerySchema }, (ctx) => {
|
|
70
62
|
const runtime = runtimeFrom(ctx);
|
|
71
63
|
const requiresFirstAdmin = runtime.userStore.hasNoUsers();
|
|
72
64
|
if (ctx.query.action === "logout") {
|
|
73
|
-
const
|
|
74
|
-
const nextUrl = normalizeRedirect(config.logoutRedirectPath);
|
|
65
|
+
const nextUrl = resolveAppAuthRedirect(ctx, "afterLogout");
|
|
75
66
|
ctx.bpHeaders?.remove("Authorization");
|
|
76
67
|
ctx.bpHeaders?.remove("X-BP-Refresh");
|
|
77
68
|
if (ctx.serviceId)
|
|
@@ -86,8 +77,7 @@ export const handleGet = createHandler({ response: ResponseSchema, query: QueryS
|
|
|
86
77
|
// Valid token already on the request - no point rendering a login form.
|
|
87
78
|
// First-admin setup still wins: a token can outlive a wiped user store.
|
|
88
79
|
if (ctx.user && !requiresFirstAdmin) {
|
|
89
|
-
const
|
|
90
|
-
const next = ctx.query.next || config.loginRedirectPath;
|
|
80
|
+
const next = resolveAppAuthRedirect(ctx, "afterLogin", ctx.query.next);
|
|
91
81
|
return {
|
|
92
82
|
status: "ok",
|
|
93
83
|
message: "Already signed in.",
|
|
@@ -99,7 +89,7 @@ export const handleGet = createHandler({ response: ResponseSchema, query: QueryS
|
|
|
99
89
|
name: ctx.user.name
|
|
100
90
|
},
|
|
101
91
|
logoutUrl: ctx.routeUrl?.("login.index", { query: { action: "logout" } }) ?? "/login?action=logout",
|
|
102
|
-
|
|
92
|
+
nextUrl: next
|
|
103
93
|
};
|
|
104
94
|
}
|
|
105
95
|
let firstAdminUrl;
|
|
@@ -148,8 +138,7 @@ export const handlePost = createHandler({ response: ResponseSchema, request: Req
|
|
|
148
138
|
// Login is rendered in the theme's auth-only page state. After credentials
|
|
149
139
|
// are stored, navigate the browser back to the tenant route so the normal
|
|
150
140
|
// shell is rendered from a clean page request.
|
|
151
|
-
const
|
|
152
|
-
const next = body.next || ctx.query.next || config.loginRedirectPath || "/";
|
|
141
|
+
const next = resolveAppAuthRedirect(ctx, "afterLogin", body.next || ctx.query.next);
|
|
153
142
|
ctx.responseHeaders?.set("HX-Redirect", next);
|
|
154
143
|
// Auth state changed - reload this service's fragments (nav profile etc.).
|
|
155
144
|
// Fragments listening on this key re-fetch; absent fragments ignore it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.impl.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"route.impl.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,11 +54,6 @@ declare const EventSchemas: {
|
|
|
54
54
|
readonly emitBroadcast: {};
|
|
55
55
|
readonly onBroadcast: {};
|
|
56
56
|
};
|
|
57
|
-
export interface DefaultAuthAppConfig {
|
|
58
|
-
loginRedirectPath?: string;
|
|
59
|
-
logoutRedirectPath?: string;
|
|
60
|
-
}
|
|
61
|
-
export declare function resolveDefaultAuthAppConfig(raw: Record<string, unknown> | undefined): DefaultAuthAppConfig;
|
|
62
57
|
export interface AuthRuntime {
|
|
63
58
|
readonly tokenIssuer: BpTokenIssuer;
|
|
64
59
|
readonly userStore: UserStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAG1B,KAAK,UAAU,EAChB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAEL,SAAS,EACT,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAIL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAG1B,KAAK,UAAU,EAChB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAEL,SAAS,EACT,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;EAUI,CAAC;AAC7B,MAAM,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;GASX,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;CAOhB,CAAC;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,qBAAa,MAAO,SAAQ,SAAS,CAAC,YAAY,CAAC,OAAO,MAAM,CAAC,EAAE,OAAO,YAAY,CAAC;IACrF,MAAM,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;QAAU;IACvB,MAAM,CAAC,YAAY;;;;;;;MAAgB;IAEnC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAa;gBAElB,GAAG,EAAE,qBAAqB,CAAC,YAAY,CAAC,OAAO,MAAM,CAAC,EAAE,OAAO,YAAY,CAAC;IAIxF,SAAS,CAAC,UAAU,IAAI,mBAAmB;IAYrC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1C,IAAI,OAAO,IAAI,WAAW,CAOzB;IAED;;;OAGG;IACH,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;cAIpE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQhG,OAAO,CAAC,WAAW;CASpB;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -31,33 +31,6 @@ const EventSchemas = createEventSchemas({
|
|
|
31
31
|
emitBroadcast: {},
|
|
32
32
|
onBroadcast: {}
|
|
33
33
|
});
|
|
34
|
-
export function resolveDefaultAuthAppConfig(raw) {
|
|
35
|
-
const loginRedirectPath = typeof raw?.loginRedirectPath === "string" && raw.loginRedirectPath.trim()
|
|
36
|
-
? raw.loginRedirectPath.trim()
|
|
37
|
-
: undefined;
|
|
38
|
-
const logoutRedirectPath = typeof raw?.logoutRedirectPath === "string" && raw.logoutRedirectPath.trim()
|
|
39
|
-
? raw.logoutRedirectPath.trim()
|
|
40
|
-
: undefined;
|
|
41
|
-
return {
|
|
42
|
-
...(loginRedirectPath ? { loginRedirectPath } : {}),
|
|
43
|
-
...(logoutRedirectPath ? { logoutRedirectPath } : {})
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
const DefaultAuthConfigSchemas = [{
|
|
47
|
-
id: "auth.default.app",
|
|
48
|
-
title: "Default Auth Config",
|
|
49
|
-
description: "App-scoped default auth settings.",
|
|
50
|
-
scope: "app",
|
|
51
|
-
jsonSchema: { loginRedirectPath: "string", logoutRedirectPath: "string" },
|
|
52
|
-
groups: [
|
|
53
|
-
{ id: "login", title: "Login", description: "Routes used after signing in.", order: 10, optional: true },
|
|
54
|
-
{ id: "logout", title: "Logout", description: "Routes used after signing out.", order: 20, optional: true }
|
|
55
|
-
],
|
|
56
|
-
fields: [
|
|
57
|
-
{ key: "loginRedirectPath", title: "Logged In Route", description: "Tenant route shown after signing in when no next path is supplied.", scope: "app", visibility: "protected", ownership: "bp", sourceOfTruth: "bp", groupId: "login", order: 10, defaultValue: "/", ui: { control: "select", optionsSource: "app.routes" }, required: false },
|
|
58
|
-
{ key: "logoutRedirectPath", title: "Logged Out Route", description: "Tenant route shown after signing out.", scope: "app", visibility: "protected", ownership: "bp", sourceOfTruth: "bp", groupId: "logout", order: 10, defaultValue: "/", ui: { control: "select", optionsSource: "app.routes" }, required: false }
|
|
59
|
-
]
|
|
60
|
-
}];
|
|
61
34
|
export class Plugin extends BPService {
|
|
62
35
|
static Config = Config;
|
|
63
36
|
static EventSchemas = EventSchemas;
|
|
@@ -72,8 +45,7 @@ export class Plugin extends BPService {
|
|
|
72
45
|
pluginId: "org.betterportal.auth.default",
|
|
73
46
|
title: "BetterPortal Default Auth",
|
|
74
47
|
description: "JWT-issuing auth service (RS256 + JWKS + bcrypt user store).",
|
|
75
|
-
capabilities: ["auth"]
|
|
76
|
-
configSchemas: DefaultAuthConfigSchemas
|
|
48
|
+
capabilities: ["auth"]
|
|
77
49
|
},
|
|
78
50
|
registry
|
|
79
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,wBAAwB,EACxB,SAAS,EAEV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "service-betterportal-auth-default",
|
|
3
3
|
"name": "service-betterportal-auth-default",
|
|
4
|
-
"version": "10.1.
|
|
4
|
+
"version": "10.1.48",
|
|
5
5
|
"description": "Default BetterPortal v10 auth service: JWKS, login/logout/refresh, bcrypt user store",
|
|
6
6
|
"category": "service",
|
|
7
7
|
"tags": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@betterportal/auth-default",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.48",
|
|
4
4
|
"description": "BetterPortal v10 default auth service for Node.js",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "src/index.ts",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"typescript": "^6.0.3"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@betterportal/framework": "10.1.
|
|
39
|
-
"@betterportal/plugin-bsb": "10.1.
|
|
38
|
+
"@betterportal/framework": "10.1.48",
|
|
39
|
+
"@betterportal/plugin-bsb": "10.1.48",
|
|
40
40
|
"@bsb/base": "^9.6.60",
|
|
41
41
|
"anyvali": "^1.0.6",
|
|
42
42
|
"bcrypt": "^6.0.0",
|