node-opcua-role-set-server 2.183.0 → 2.184.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/dist/audit.d.ts +1 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +5 -8
- package/dist/audit.js.map +1 -1
- package/dist/bind_restriction_methods.d.ts +1 -0
- package/dist/bind_restriction_methods.d.ts.map +1 -0
- package/dist/bind_restriction_methods.js +20 -26
- package/dist/bind_restriction_methods.js.map +1 -1
- package/dist/bind_role_methods.d.ts +1 -0
- package/dist/bind_role_methods.d.ts.map +1 -0
- package/dist/bind_role_methods.js +26 -30
- package/dist/bind_role_methods.js.map +1 -1
- package/dist/bind_user_management.d.ts +1 -0
- package/dist/bind_user_management.d.ts.map +1 -0
- package/dist/bind_user_management.js +40 -46
- package/dist/bind_user_management.js.map +1 -1
- package/dist/harden.d.ts +1 -0
- package/dist/harden.d.ts.map +1 -0
- package/dist/harden.js +7 -11
- package/dist/harden.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -31
- package/dist/index.js.map +1 -1
- package/dist/install_role_based_security.d.ts +1 -0
- package/dist/install_role_based_security.d.ts.map +1 -0
- package/dist/install_role_based_security.js +17 -20
- package/dist/install_role_based_security.js.map +1 -1
- package/dist/install_role_set.d.ts +1 -0
- package/dist/install_role_set.d.ts.map +1 -0
- package/dist/install_role_set.js +80 -83
- package/dist/install_role_set.js.map +1 -1
- package/dist/install_user_management.d.ts +1 -0
- package/dist/install_user_management.d.ts.map +1 -0
- package/dist/install_user_management.js +30 -33
- package/dist/install_user_management.js.map +1 -1
- package/dist/role_set_resolver.d.ts +1 -0
- package/dist/role_set_resolver.d.ts.map +1 -0
- package/dist/role_set_resolver.js +1 -5
- package/dist/role_set_resolver.js.map +1 -1
- package/dist/security_checks.d.ts +1 -0
- package/dist/security_checks.d.ts.map +1 -0
- package/dist/security_checks.js +10 -14
- package/dist/security_checks.js.map +1 -1
- package/dist/user_management_user_manager.d.ts +1 -0
- package/dist/user_management_user_manager.d.ts.map +1 -0
- package/dist/user_management_user_manager.js +10 -13
- package/dist/user_management_user_manager.js.map +1 -1
- package/dist/variant_args.d.ts +1 -0
- package/dist/variant_args.d.ts.map +1 -0
- package/dist/variant_args.js +3 -8
- package/dist/variant_args.js.map +1 -1
- package/package.json +17 -16
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const audit_js_1 = require("./audit.js");
|
|
10
|
-
const bind_user_management_js_1 = require("./bind_user_management.js");
|
|
11
|
-
const harden_js_1 = require("./harden.js");
|
|
1
|
+
import { MethodIds, ObjectIds, VariableIds } from "node-opcua-constants";
|
|
2
|
+
import { ArchiveStore, InMemoryUserManagementStore } from "node-opcua-role-set-common";
|
|
3
|
+
import { StatusCodes } from "node-opcua-status-code";
|
|
4
|
+
import { Range, UserManagementDataType, UserNameIdentityToken } from "node-opcua-types";
|
|
5
|
+
import { DataType, VariantArrayType } from "node-opcua-variant";
|
|
6
|
+
import { raiseAuditMethodEvent } from "./audit.js";
|
|
7
|
+
import { makeAddUserHandler, makeChangePasswordHandler, makeModifyUserHandler, makeRemoveUserHandler } from "./bind_user_management.js";
|
|
8
|
+
import { hardenAdminOnly, hardenEncryptedOnly } from "./harden.js";
|
|
12
9
|
/** PasswordOptionsMask bit values (OPC 10000-18 §5.2.2). */
|
|
13
10
|
const PasswordOptions = {
|
|
14
11
|
RequiresUpperCaseCharacters: 1 << 5,
|
|
@@ -30,7 +27,7 @@ function makeSessionCloser(engine) {
|
|
|
30
27
|
// snapshot first: closeSession mutates the engine's session map
|
|
31
28
|
for (const session of getSessions.call(engine)) {
|
|
32
29
|
const token = session.userIdentityToken;
|
|
33
|
-
if (token instanceof
|
|
30
|
+
if (token instanceof UserNameIdentityToken && token.userName === userName) {
|
|
34
31
|
closeSession.call(engine, session.authenticationToken, /* deleteSubscriptions */ true, "Terminated");
|
|
35
32
|
closed += 1;
|
|
36
33
|
}
|
|
@@ -57,22 +54,22 @@ function passwordOptionsMask(policy) {
|
|
|
57
54
|
* available (the standard nodeset must be loaded so the `UserManagement`
|
|
58
55
|
* Object exists).
|
|
59
56
|
*/
|
|
60
|
-
async function installUserManagement(server, options) {
|
|
57
|
+
export async function installUserManagement(server, options) {
|
|
61
58
|
const addressSpace = server.engine.addressSpace;
|
|
62
59
|
if (!addressSpace) {
|
|
63
60
|
throw new Error("installUserManagement: address space is not available. Call this after server.start().");
|
|
64
61
|
}
|
|
65
|
-
const userManagement = addressSpace.findNode(
|
|
62
|
+
const userManagement = addressSpace.findNode(ObjectIds.UserManagement);
|
|
66
63
|
if (!userManagement) {
|
|
67
64
|
throw new Error("installUserManagement: UserManagement Object (i=24290) not found in address space.");
|
|
68
65
|
}
|
|
69
66
|
const policy = options?.policy ?? {};
|
|
70
|
-
const store = options?.store ?? new
|
|
67
|
+
const store = options?.store ?? new InMemoryUserManagementStore(policy);
|
|
71
68
|
// Consolidated-archive coordination: hydrate persisted users (salted hashes)
|
|
72
69
|
// and register the `users` section so a shared coordinator persists them
|
|
73
70
|
// alongside the role configuration.
|
|
74
71
|
const persistence = options?.persistence ??
|
|
75
|
-
(options?.persistencePath ? new
|
|
72
|
+
(options?.persistencePath ? new ArchiveStore(options.persistencePath, { secret: options.persistenceSecret }) : undefined);
|
|
76
73
|
if (persistence && store.importUsers) {
|
|
77
74
|
const archive = await persistence.load();
|
|
78
75
|
if (archive?.users)
|
|
@@ -82,12 +79,12 @@ async function installUserManagement(server, options) {
|
|
|
82
79
|
if (persistence && exportUsers) {
|
|
83
80
|
persistence.setUsersProvider(() => exportUsers());
|
|
84
81
|
}
|
|
85
|
-
const usersVar = addressSpace.findNode(
|
|
82
|
+
const usersVar = addressSpace.findNode(VariableIds.UserManagement_Users);
|
|
86
83
|
function refreshUsers() {
|
|
87
84
|
usersVar?.setValueFromSource({
|
|
88
|
-
dataType:
|
|
89
|
-
arrayType:
|
|
90
|
-
value: store.getUsers().map((u) => new
|
|
85
|
+
dataType: DataType.ExtensionObject,
|
|
86
|
+
arrayType: VariantArrayType.Array,
|
|
87
|
+
value: store.getUsers().map((u) => new UserManagementDataType({
|
|
91
88
|
userName: u.userName,
|
|
92
89
|
userConfiguration: u.userConfiguration,
|
|
93
90
|
description: u.description
|
|
@@ -108,7 +105,7 @@ async function installUserManagement(server, options) {
|
|
|
108
105
|
? (userName) => {
|
|
109
106
|
const closed = closeSessionsForUser(userName);
|
|
110
107
|
if (closed > 0) {
|
|
111
|
-
|
|
108
|
+
raiseAuditMethodEvent(serverObject, "AuditUpdateMethodEventType", {
|
|
112
109
|
sourceNode: userManagement.nodeId,
|
|
113
110
|
sourceName: "Method/UserDeactivated",
|
|
114
111
|
clientUserId: userName,
|
|
@@ -119,12 +116,12 @@ async function installUserManagement(server, options) {
|
|
|
119
116
|
}
|
|
120
117
|
: undefined,
|
|
121
118
|
onAudit: (audit) => {
|
|
122
|
-
|
|
119
|
+
raiseAuditMethodEvent(serverObject, "AuditUpdateMethodEventType", {
|
|
123
120
|
sourceNode: userManagement.nodeId,
|
|
124
121
|
sourceName: `Method/${audit.method}`,
|
|
125
122
|
methodId: audit.methodNodeId,
|
|
126
123
|
clientUserId: audit.callerUserName,
|
|
127
|
-
status: audit.statusCode ===
|
|
124
|
+
status: audit.statusCode === StatusCodes.Good,
|
|
128
125
|
message: `${audit.method}('${audit.targetUserName}') by '${audit.callerUserName}' → ${audit.statusCode.name}`
|
|
129
126
|
// NOTE: inputArguments deliberately omitted — they contain passwords
|
|
130
127
|
});
|
|
@@ -134,19 +131,19 @@ async function installUserManagement(server, options) {
|
|
|
134
131
|
// Users list, which reveals account names) are SecurityAdmin-only over an
|
|
135
132
|
// encrypted channel; ChangePassword stays callable by any authenticated user
|
|
136
133
|
// but still requires encryption (§4.4.1 / §5.2.8).
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
134
|
+
hardenAdminOnly(bindMethod(addressSpace, MethodIds.UserManagement_AddUser, makeAddUserHandler(methodOptions)));
|
|
135
|
+
hardenAdminOnly(bindMethod(addressSpace, MethodIds.UserManagement_ModifyUser, makeModifyUserHandler(methodOptions)));
|
|
136
|
+
hardenAdminOnly(bindMethod(addressSpace, MethodIds.UserManagement_RemoveUser, makeRemoveUserHandler(methodOptions)));
|
|
137
|
+
hardenEncryptedOnly(bindMethod(addressSpace, MethodIds.UserManagement_ChangePassword, makeChangePasswordHandler(methodOptions)));
|
|
138
|
+
hardenAdminOnly(usersVar);
|
|
142
139
|
// Publish the password policy and the initial (empty) user list.
|
|
143
|
-
const lengthVar = addressSpace.findNode(
|
|
140
|
+
const lengthVar = addressSpace.findNode(VariableIds.UserManagement_PasswordLength);
|
|
144
141
|
lengthVar?.setValueFromSource({
|
|
145
|
-
dataType:
|
|
146
|
-
value: new
|
|
142
|
+
dataType: DataType.ExtensionObject,
|
|
143
|
+
value: new Range({ low: policy.minLength ?? 0, high: policy.maxLength ?? 0 })
|
|
147
144
|
});
|
|
148
|
-
const optionsVar = addressSpace.findNode(
|
|
149
|
-
optionsVar?.setValueFromSource({ dataType:
|
|
145
|
+
const optionsVar = addressSpace.findNode(VariableIds.UserManagement_PasswordOptions);
|
|
146
|
+
optionsVar?.setValueFromSource({ dataType: DataType.UInt32, value: passwordOptionsMask(policy) });
|
|
150
147
|
refreshUsers();
|
|
151
148
|
return { store };
|
|
152
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install_user_management.js","sourceRoot":"","sources":["../source/install_user_management.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install_user_management.js","sourceRoot":"","sources":["../source/install_user_management.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,3 +21,4 @@ export declare class RoleSetResolver {
|
|
|
21
21
|
constructor(store: IIdentityMappingStore, restrictionStore?: IRoleRestrictionStore | undefined);
|
|
22
22
|
resolveRoles(userIdentityToken: AnyUserIdentityToken, context?: ResolutionContext): NodeId[];
|
|
23
23
|
}
|
|
24
|
+
//# sourceMappingURL=role_set_resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role_set_resolver.d.ts","sourceRoot":"","sources":["../source/role_set_resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACR,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACpB,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAEpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAFtC,YACqB,KAAK,EAAE,qBAAqB,EAC5B,gBAAgB,CAAC,EAAE,qBAAqB,YAAA,EACzD;IAEG,YAAY,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAOlG;CACJ"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RoleSetResolver = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Adapts an {@link IIdentityMappingStore} (and an optional
|
|
6
3
|
* {@link IRoleRestrictionStore}) to the `IRoleResolver` contract so it can be
|
|
@@ -10,7 +7,7 @@ exports.RoleSetResolver = void 0;
|
|
|
10
7
|
* restriction store is provided and a resolution context is available — the
|
|
11
8
|
* Session's application/endpoint comply with the Role's restrictions.
|
|
12
9
|
*/
|
|
13
|
-
class RoleSetResolver {
|
|
10
|
+
export class RoleSetResolver {
|
|
14
11
|
store;
|
|
15
12
|
restrictionStore;
|
|
16
13
|
constructor(store, restrictionStore) {
|
|
@@ -26,5 +23,4 @@ class RoleSetResolver {
|
|
|
26
23
|
return roles.filter((roleId) => restrictionStore.complies(roleId, context));
|
|
27
24
|
}
|
|
28
25
|
}
|
|
29
|
-
exports.RoleSetResolver = RoleSetResolver;
|
|
30
26
|
//# sourceMappingURL=role_set_resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role_set_resolver.js","sourceRoot":"","sources":["../source/role_set_resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"role_set_resolver.js","sourceRoot":"","sources":["../source/role_set_resolver.ts"],"names":[],"mappings":"AAcA;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IAEH,KAAK;IACL,gBAAgB;IAFrC,YACqB,KAA4B,EAC5B,gBAAwC;qBADxC,KAAK;gCACL,gBAAgB;IAClC,CAAC;IAEG,YAAY,CAAC,iBAAuC,EAAE,OAA2B;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChF,CAAC;CACJ"}
|
|
@@ -23,3 +23,4 @@ export declare function checkSecurityAdminAccess(context: ISessionContext): Call
|
|
|
23
23
|
* @returns a denial result, or `null` if the channel is acceptable.
|
|
24
24
|
*/
|
|
25
25
|
export declare function checkEncryptedChannel(context: ISessionContext): CallMethodResultOptions | null;
|
|
26
|
+
//# sourceMappingURL=security_checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security_checks.d.ts","sourceRoot":"","sources":["../source/security_checks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,GAAG,uBAAuB,GAAG,IAAI,CAOjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,uBAAuB,GAAG,IAAI,CAS9F"}
|
package/dist/security_checks.js
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
6
|
-
const node_opcua_role_set_common_1 = require("node-opcua-role-set-common");
|
|
7
|
-
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
8
|
-
const node_opcua_types_1 = require("node-opcua-types");
|
|
1
|
+
import { sameNodeId } from "node-opcua-nodeid";
|
|
2
|
+
import { WellKnownRoleIds } from "node-opcua-role-set-common";
|
|
3
|
+
import { StatusCodes } from "node-opcua-status-code";
|
|
4
|
+
import { MessageSecurityMode } from "node-opcua-types";
|
|
9
5
|
/**
|
|
10
6
|
* Verify the calling session holds the SecurityAdmin role.
|
|
11
7
|
* @returns a `Bad_UserAccessDenied` denial, or `null` if authorized.
|
|
12
8
|
*/
|
|
13
|
-
function checkSecurityAdminAccess(context) {
|
|
9
|
+
export function checkSecurityAdminAccess(context) {
|
|
14
10
|
const roles = context.getCurrentUserRoles();
|
|
15
|
-
const hasSecurityAdmin = roles.some((r) =>
|
|
11
|
+
const hasSecurityAdmin = roles.some((r) => sameNodeId(r, WellKnownRoleIds.SecurityAdmin));
|
|
16
12
|
if (!hasSecurityAdmin) {
|
|
17
|
-
return { statusCode:
|
|
13
|
+
return { statusCode: StatusCodes.BadUserAccessDenied };
|
|
18
14
|
}
|
|
19
15
|
return null;
|
|
20
16
|
}
|
|
@@ -28,13 +24,13 @@ function checkSecurityAdminAccess(context) {
|
|
|
28
24
|
*
|
|
29
25
|
* @returns a denial result, or `null` if the channel is acceptable.
|
|
30
26
|
*/
|
|
31
|
-
function checkEncryptedChannel(context) {
|
|
27
|
+
export function checkEncryptedChannel(context) {
|
|
32
28
|
const securityMode = context.session?.channel?.securityMode;
|
|
33
29
|
if (securityMode === undefined) {
|
|
34
30
|
return null; // mode unknown (in-process) → cannot enforce
|
|
35
31
|
}
|
|
36
|
-
if (securityMode !==
|
|
37
|
-
return { statusCode:
|
|
32
|
+
if (securityMode !== MessageSecurityMode.SignAndEncrypt) {
|
|
33
|
+
return { statusCode: StatusCodes.BadSecurityModeInsufficient };
|
|
38
34
|
}
|
|
39
35
|
return null;
|
|
40
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security_checks.js","sourceRoot":"","sources":["../source/security_checks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"security_checks.js","sourceRoot":"","sources":["../source/security_checks.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAwB;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAC5C,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1F,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,mBAAmB,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC;IAC5D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,CAAC,6CAA6C;IAC9D,CAAC;IACD,IAAI,YAAY,KAAK,mBAAmB,CAAC,cAAc,EAAE,CAAC;QACtD,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,2BAA2B,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_management_user_manager.d.ts","sourceRoot":"","sources":["../source/user_management_user_manager.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAc,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAwB,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACpH,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,KAAK,uBAAuB,EAAgD,MAAM,kBAAkB,CAAC;AAE9G,oFAAoF;AACpF,UAAU,WAAW;IACjB,YAAY,CAAC,IAAI,MAAM,CAAC;IACxB,sFAAsF;IACtF,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3G,uFAAuF;IACvF,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC;;;;OAIG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAAC;IAC9D;;;;OAIG;IACH,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IACpE,yEAAyE;IACzE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAC5D;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,qBAAqB,GAAG,mBAAmB,CAoD5H"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createUserManager = createUserManager;
|
|
4
1
|
/**
|
|
5
2
|
* @module node-opcua-role-set-server
|
|
6
3
|
*
|
|
@@ -20,20 +17,20 @@ exports.createUserManager = createUserManager;
|
|
|
20
17
|
* The server `userManager` invokes `isValidUser` with `this` bound to the
|
|
21
18
|
* ServerSession, which is how the SessionId is captured (non-breaking).
|
|
22
19
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
import { WellKnownRoles } from "node-opcua-constants";
|
|
21
|
+
import { makeNodeId } from "node-opcua-nodeid";
|
|
22
|
+
import { StatusCodes } from "node-opcua-status-code";
|
|
23
|
+
import { UserConfigurationMask, UserNameIdentityToken } from "node-opcua-types";
|
|
27
24
|
const has = (mask, bit) => (mask & bit) === bit;
|
|
28
25
|
/**
|
|
29
26
|
* Create a server `userManager` backed by the given user store. Roles are
|
|
30
27
|
* resolved from `identityStore` (a UserName identity rule per user); while a
|
|
31
28
|
* user must change the password, only the Anonymous Role is granted.
|
|
32
29
|
*/
|
|
33
|
-
function createUserManager(userStore, identityStore) {
|
|
30
|
+
export function createUserManager(userStore, identityStore) {
|
|
34
31
|
const lastAuthStatus = new Map();
|
|
35
32
|
const statusBySession = new Map();
|
|
36
|
-
const anonymousOnly = () => [
|
|
33
|
+
const anonymousOnly = () => [makeNodeId(WellKnownRoles.Anonymous)];
|
|
37
34
|
return {
|
|
38
35
|
lastAuthStatus,
|
|
39
36
|
getSessionAuthStatus(sessionId) {
|
|
@@ -52,17 +49,17 @@ function createUserManager(userStore, identityStore) {
|
|
|
52
49
|
}
|
|
53
50
|
// flag the session so ActivateSession returns Good_PasswordChangeRequired
|
|
54
51
|
if (this) {
|
|
55
|
-
this.passwordChangeRequired = result.statusCode ===
|
|
52
|
+
this.passwordChangeRequired = result.statusCode === StatusCodes.GoodPasswordChangeRequired;
|
|
56
53
|
}
|
|
57
|
-
callback(null, result.statusCode ===
|
|
54
|
+
callback(null, result.statusCode === StatusCodes.Good || result.statusCode === StatusCodes.GoodPasswordChangeRequired);
|
|
58
55
|
}, (err) => callback(err instanceof Error ? err : new Error(String(err))));
|
|
59
56
|
},
|
|
60
57
|
getUserRoles(userName) {
|
|
61
58
|
const user = userStore.getUsers().find((u) => u.userName === userName);
|
|
62
|
-
if (user && has(user.userConfiguration,
|
|
59
|
+
if (user && has(user.userConfiguration, UserConfigurationMask.MustChangePassword)) {
|
|
63
60
|
return anonymousOnly();
|
|
64
61
|
}
|
|
65
|
-
const token = new
|
|
62
|
+
const token = new UserNameIdentityToken({ userName });
|
|
66
63
|
return identityStore.resolveRoles(token);
|
|
67
64
|
},
|
|
68
65
|
getIdentitiesForRole(role) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user_management_user_manager.js","sourceRoot":"","sources":["../source/user_management_user_manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user_management_user_manager.js","sourceRoot":"","sources":["../source/user_management_user_manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAgC,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAmB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAgC,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAqC9G,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,GAAW,EAAW,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAA+B,EAAE,aAAoC;IACnG,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;IACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtD,MAAM,aAAa,GAAG,GAAa,EAAE,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7E,OAAO;QACH,cAAc;QAEd,oBAAoB,CAAC,SAAqB;YACtC,OAAO,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,gBAAgB,CAAoB,QAAgB,EAAE,QAAgB,EAAE,QAA2B;YAC/F,qEAAqE;YACrE,6BAA6B;YAC7B,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC3C,CAAC,MAAM,EAAE,EAAE;gBACP,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChD,gEAAgE;gBAChE,uCAAuC;gBACvC,MAAM,SAAS,GAAG,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC;gBACzC,IAAI,SAAS,EAAE,CAAC;oBACZ,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBACjE,CAAC;gBACD,0EAA0E;gBAC1E,IAAI,IAAI,EAAE,CAAC;oBACP,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,UAAU,KAAK,WAAW,CAAC,0BAA0B,CAAC;gBAC/F,CAAC;gBACD,QAAQ,CACJ,IAAI,EACJ,MAAM,CAAC,UAAU,KAAK,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,WAAW,CAAC,0BAA0B,CACzG,CAAC;YACN,CAAC,EACD,CAAC,GAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAClF,CAAC;QACN,CAAC;QAED,YAAY,CAAC,QAAgB;YACzB,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YACvE,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAChF,OAAO,aAAa,EAAE,CAAC;YAC3B,CAAC;YACD,MAAM,KAAK,GAAyB,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5E,OAAO,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,oBAAoB,CAAC,IAAY;YAC7B,wEAAwE;YACxE,iEAAiE;YACjE,OAAO,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;KACJ,CAAC;AACN,CAAC"}
|
package/dist/variant_args.d.ts
CHANGED
|
@@ -11,3 +11,4 @@ export declare function asString(v: Variant | undefined): string | null;
|
|
|
11
11
|
export declare function asBoolean(v: Variant | undefined): boolean;
|
|
12
12
|
/** The UserConfigurationMask value of an argument (missing / non-numeric → `0`). */
|
|
13
13
|
export declare function asMask(v: Variant | undefined): UserConfigurationMask;
|
|
14
|
+
//# sourceMappingURL=variant_args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant_args.d.ts","sourceRoot":"","sources":["../source/variant_args.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE9D;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAEzD;AAED,oFAAoF;AACpF,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,qBAAqB,CAEpE"}
|
package/dist/variant_args.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.asString = asString;
|
|
4
|
-
exports.asBoolean = asBoolean;
|
|
5
|
-
exports.asMask = asMask;
|
|
6
1
|
/** The string value of an argument, or `null` if absent / not a string. */
|
|
7
|
-
function asString(v) {
|
|
2
|
+
export function asString(v) {
|
|
8
3
|
return v && typeof v.value === "string" ? v.value : null;
|
|
9
4
|
}
|
|
10
5
|
/** The boolean value of an argument (missing / non-boolean → `false`). */
|
|
11
|
-
function asBoolean(v) {
|
|
6
|
+
export function asBoolean(v) {
|
|
12
7
|
return !!v && v.value === true;
|
|
13
8
|
}
|
|
14
9
|
/** The UserConfigurationMask value of an argument (missing / non-numeric → `0`). */
|
|
15
|
-
function asMask(v) {
|
|
10
|
+
export function asMask(v) {
|
|
16
11
|
return (v && typeof v.value === "number" ? v.value : 0);
|
|
17
12
|
}
|
|
18
13
|
//# sourceMappingURL=variant_args.js.map
|
package/dist/variant_args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variant_args.js","sourceRoot":"","sources":["../source/variant_args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"variant_args.js","sourceRoot":"","sources":["../source/variant_args.ts"],"names":[],"mappings":"AAQA,2EAA2E;AAC3E,MAAM,UAAU,QAAQ,CAAC,CAAsB;IAC3C,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,CAAsB;IAC5C,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;AACnC,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,MAAM,CAAC,CAAsB;IACzC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAA0B,CAAC;AACrF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-opcua-role-set-server",
|
|
3
|
-
"
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "2.184.0",
|
|
4
5
|
"description": "pure nodejs OPCUA SDK - server-side role-set management (OPC 10000-18)",
|
|
5
6
|
"scripts": {
|
|
6
7
|
"build": "tsc -b",
|
|
@@ -19,22 +20,22 @@
|
|
|
19
20
|
"node": ">=22.13.0"
|
|
20
21
|
},
|
|
21
22
|
"dependencies": {
|
|
22
|
-
"node-opcua-address-space": "2.
|
|
23
|
-
"node-opcua-address-space-base": "2.
|
|
24
|
-
"node-opcua-constants": "2.
|
|
25
|
-
"node-opcua-data-model": "2.
|
|
26
|
-
"node-opcua-debug": "2.
|
|
27
|
-
"node-opcua-nodeid": "2.
|
|
28
|
-
"node-opcua-role-set-common": "2.
|
|
29
|
-
"node-opcua-service-call": "2.
|
|
30
|
-
"node-opcua-status-code": "2.
|
|
31
|
-
"node-opcua-types": "2.
|
|
32
|
-
"node-opcua-variant": "2.
|
|
23
|
+
"node-opcua-address-space": "2.184.0",
|
|
24
|
+
"node-opcua-address-space-base": "2.184.0",
|
|
25
|
+
"node-opcua-constants": "2.184.0",
|
|
26
|
+
"node-opcua-data-model": "2.184.0",
|
|
27
|
+
"node-opcua-debug": "2.184.0",
|
|
28
|
+
"node-opcua-nodeid": "2.184.0",
|
|
29
|
+
"node-opcua-role-set-common": "2.184.0",
|
|
30
|
+
"node-opcua-service-call": "2.184.0",
|
|
31
|
+
"node-opcua-status-code": "2.184.0",
|
|
32
|
+
"node-opcua-types": "2.184.0",
|
|
33
|
+
"node-opcua-variant": "2.184.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"node-opcua-leak-detector": "2.
|
|
36
|
-
"node-opcua-nodesets": "2.
|
|
37
|
-
"node-opcua-test-helpers": "2.
|
|
36
|
+
"node-opcua-leak-detector": "2.184.0",
|
|
37
|
+
"node-opcua-nodesets": "2.184.0",
|
|
38
|
+
"node-opcua-test-helpers": "2.184.0"
|
|
38
39
|
},
|
|
39
40
|
"author": "Etienne Rossignon",
|
|
40
41
|
"license": "MIT",
|
|
@@ -51,7 +52,7 @@
|
|
|
51
52
|
"internet of things"
|
|
52
53
|
],
|
|
53
54
|
"homepage": "http://node-opcua.github.io/",
|
|
54
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "441a5c63e3a4202eb8de8597acac77a3a49248b7",
|
|
55
56
|
"files": [
|
|
56
57
|
"dist",
|
|
57
58
|
"source"
|