node-opcua-address-space 2.175.3 → 2.176.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/source/interfaces/nodeset_loader_options.d.ts +33 -0
- package/dist/source/loader/load_nodeset2.js +91 -12
- package/dist/source/loader/load_nodeset2.js.map +1 -1
- package/dist/source/loader/make_xml_extension_object_parser.js +62 -0
- package/dist/source/loader/make_xml_extension_object_parser.js.map +1 -1
- package/dist/source/session_context.d.ts +90 -4
- package/dist/source/session_context.js +181 -9
- package/dist/source/session_context.js.map +1 -1
- package/dist/src/base_node_impl.js +49 -32
- package/dist/src/base_node_impl.js.map +1 -1
- package/dist/src/base_node_private.js +6 -1
- package/dist/src/base_node_private.js.map +1 -1
- package/dist/src/nodeset_tools/nodeset_to_xml.js +47 -4
- package/dist/src/nodeset_tools/nodeset_to_xml.js.map +1 -1
- package/dist/src/ua_variable_impl_ext_obj.js +6 -1
- package/dist/src/ua_variable_impl_ext_obj.js.map +1 -1
- package/dist/tsconfig_base.tsbuildinfo +1 -1
- package/distHelpers/mock_session.d.ts +68 -1
- package/distHelpers/mock_session.js +58 -0
- package/distHelpers/mock_session.js.map +1 -1
- package/package.json +37 -37
- package/source/interfaces/nodeset_loader_options.ts +34 -0
- package/source/loader/load_nodeset2.ts +105 -13
- package/source/loader/make_xml_extension_object_parser.ts +67 -0
- package/source/session_context.ts +262 -12
- package/src/base_node_impl.ts +54 -37
- package/src/base_node_private.ts +4 -1
- package/src/nodeset_tools/nodeset_to_xml.ts +50 -4
- package/src/ua_variable_impl_ext_obj.ts +6 -1
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* @module node-opcua-address-space
|
|
3
3
|
*/
|
|
4
4
|
/** biome-ignore-all lint/style/useLiteralEnumMembers: still needed */
|
|
5
|
-
import type { BaseNode, ISessionBase, ISessionContext, UAObject, UAObjectType } from "node-opcua-address-space-base";
|
|
5
|
+
import type { BaseNode, IAddressSpace, ISessionBase, ISessionContext, UAObject, UAObjectType } from "node-opcua-address-space-base";
|
|
6
6
|
import { ObjectIds } from "node-opcua-constants";
|
|
7
7
|
import { type Certificate } from "node-opcua-crypto/web";
|
|
8
|
-
import { AccessRestrictionsFlag, PermissionFlag } from "node-opcua-data-model";
|
|
8
|
+
import { AccessRestrictionsFlag, PermissionFlag, type QualifiedNameLike } from "node-opcua-data-model";
|
|
9
9
|
import type { PreciseClock } from "node-opcua-date-time";
|
|
10
|
-
import {
|
|
10
|
+
import { NodeId, type NodeIdLike } from "node-opcua-nodeid";
|
|
11
11
|
import { AnonymousIdentityToken, MessageSecurityMode, PermissionType, type RolePermissionType, UserNameIdentityToken, X509IdentityToken } from "node-opcua-types";
|
|
12
12
|
export { PermissionType, RolePermissionType, RolePermissionTypeOptions } from "node-opcua-types";
|
|
13
13
|
export type AnyUserIdentityToken = UserNameIdentityToken | AnonymousIdentityToken | X509IdentityToken;
|
|
@@ -89,18 +89,71 @@ export interface IRoleResolutionContext {
|
|
|
89
89
|
export interface IRoleResolver {
|
|
90
90
|
resolveRoles(userIdentityToken: AnyUserIdentityToken, context?: IRoleResolutionContext): NodeId[];
|
|
91
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* What to do when a permission cannot be resolved for a Session — either because no Role
|
|
94
|
+
* could be attached to its identity, or because neither the node nor its namespace declares
|
|
95
|
+
* any RolePermissions.
|
|
96
|
+
*
|
|
97
|
+
* - `"allow"` : grant every permission. This is what node-opcua has always done, and what
|
|
98
|
+
* the vast majority of address spaces need, since almost no server declares
|
|
99
|
+
* RolePermissions on its own nodes.
|
|
100
|
+
* - `"deny"` : grant nothing. Fail-closed, for products that drive access entirely from
|
|
101
|
+
* declared policy. Expect to set DefaultRolePermissions on every namespace,
|
|
102
|
+
* otherwise the address space becomes unreadable.
|
|
103
|
+
*
|
|
104
|
+
* Note that this governs *Sessions only*. A SessionContext with no Session at all is an
|
|
105
|
+
* in-process caller (SessionContext.defaultContext, PseudoSession) and stays permissive
|
|
106
|
+
* whatever this is set to — see {@link SessionContext.getPermissions}.
|
|
107
|
+
*/
|
|
108
|
+
export type UnresolvedPermissionPolicy = "allow" | "deny";
|
|
92
109
|
export interface IServerBase {
|
|
93
110
|
userManager?: IUserManager;
|
|
94
111
|
rolePolicyOverride?: IRolePolicyOverride | null;
|
|
95
112
|
/** Additional role resolvers (identity stores, LDAP, etc.) */
|
|
96
113
|
roleResolvers?: IRoleResolver[];
|
|
114
|
+
/**
|
|
115
|
+
* how to treat a permission that could not be resolved for a Session.
|
|
116
|
+
* @default "allow"
|
|
117
|
+
*/
|
|
118
|
+
unresolvedPermissionPolicy?: UnresolvedPermissionPolicy;
|
|
97
119
|
}
|
|
98
120
|
export interface SessionContextOptions {
|
|
99
121
|
session?: ISessionBase;
|
|
100
122
|
object?: UAObject | UAObjectType;
|
|
101
123
|
server?: IServerBase;
|
|
102
124
|
}
|
|
103
|
-
|
|
125
|
+
/**
|
|
126
|
+
* A Role, designated either by its NodeId or by its BrowseName.
|
|
127
|
+
*
|
|
128
|
+
* Roles outside namespace 0 (the GDS Roles, or any Role added with AddRole) have
|
|
129
|
+
* NodeIds that depend on the order in which nodesets were loaded, so naming them is
|
|
130
|
+
* more robust than hard coding `ns=1;i=1661`. Resolving a BrowseName requires an
|
|
131
|
+
* address space, since the RoleSet is where the answer lives.
|
|
132
|
+
*
|
|
133
|
+
* A QualifiedName whose namespaceIndex is left undefined matches in any namespace,
|
|
134
|
+
* as long as the BrowseName is unambiguous.
|
|
135
|
+
*/
|
|
136
|
+
export type RoleIdLike = NodeIdLike | QualifiedNameLike;
|
|
137
|
+
/**
|
|
138
|
+
* build the list of Role NodeIds a user is granted, from any of the accepted spellings:
|
|
139
|
+
*
|
|
140
|
+
* ```ts
|
|
141
|
+
* makeRoles(WellKnownRoles.Observer); // a well known Role
|
|
142
|
+
* makeRoles("Observer;Operator"); // semicolon separated names
|
|
143
|
+
* makeRoles("ns=1;i=1661"); // an explicit NodeId
|
|
144
|
+
* makeRoles(["Observer", "ns=1;i=1661"]); // mixed
|
|
145
|
+
* makeRoles("1:DiscoveryAdmin", addressSpace); // BrowseName, namespace index
|
|
146
|
+
* makeRoles("DiscoveryAdmin", addressSpace); // BrowseName, any namespace
|
|
147
|
+
* makeRoles([{ name: "DiscoveryAdmin" }], addressSpace); // idem, as a QualifiedName
|
|
148
|
+
* // when the namespace is known by its URI rather than by its index:
|
|
149
|
+
* makeRoles([{ namespaceIndex: addressSpace.getNamespaceIndex(gdsUri), name: "DiscoveryAdmin" }], addressSpace);
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* @param roleIds the Roles to resolve
|
|
153
|
+
* @param addressSpace required only to resolve a Role by BrowseName, since that
|
|
154
|
+
* lookup goes through the RoleSet
|
|
155
|
+
*/
|
|
156
|
+
export declare function makeRoles(roleIds: RoleIdLike[] | string | WellKnownRoles, addressSpace?: IAddressSpace): NodeId[];
|
|
104
157
|
export declare class SessionContext implements ISessionContext {
|
|
105
158
|
static defaultContext: SessionContext;
|
|
106
159
|
object: UAObject | UAObjectType | undefined;
|
|
@@ -134,6 +187,39 @@ export declare class SessionContext implements ISessionContext {
|
|
|
134
187
|
*/
|
|
135
188
|
getCurrentUserRoles(): NodeId[];
|
|
136
189
|
getApplicableRolePermissions(node: BaseNode): RolePermissionType[] | null;
|
|
190
|
+
/**
|
|
191
|
+
* true when this context carries no Session at all.
|
|
192
|
+
*
|
|
193
|
+
* That is an in-process caller — SessionContext.defaultContext, or a PseudoSession
|
|
194
|
+
* driving the address space from inside the server — not a remote one. Such a caller
|
|
195
|
+
* has already passed whatever authorization its own entry point applies, and the
|
|
196
|
+
* address space is not the place to second-guess it, so it is always granted every
|
|
197
|
+
* permission. This is deliberate, and distinct from a remote Session whose identity
|
|
198
|
+
* merely failed to resolve to a Role: that case is governed by
|
|
199
|
+
* IServerBase.unresolvedPermissionPolicy.
|
|
200
|
+
*/
|
|
201
|
+
private get isInProcessCaller();
|
|
202
|
+
/** what an unresolved permission means for this context: everything, or nothing */
|
|
203
|
+
private get unresolvedPermissions();
|
|
204
|
+
/**
|
|
205
|
+
* the Roles to evaluate permissions against: the ones the user resolved to, plus the
|
|
206
|
+
* Anonymous Role, which every Session stands on.
|
|
207
|
+
*
|
|
208
|
+
* Opc.Ua.NodeSet2.xml names exactly five Roles across its 854 RolePermission entries —
|
|
209
|
+
* Anonymous, SecurityAdmin, ConfigureAdmin and the two SecurityKeyServer ones — and
|
|
210
|
+
* never AuthenticatedUser, Observer, Operator, Engineer or Supervisor. Its 195 Anonymous
|
|
211
|
+
* entries (Browse, Browse|Read, Browse|Call) are therefore not a privilege reserved for
|
|
212
|
+
* unauthenticated Sessions; they are the floor granted to everyone. Read literally, an
|
|
213
|
+
* authenticated user would be unable to browse the Server Object at all, and would have
|
|
214
|
+
* strictly less access than an anonymous one.
|
|
215
|
+
*
|
|
216
|
+
* Adding the Anonymous Role here can only widen a permission set, never narrow it, and
|
|
217
|
+
* only ever to what an unauthenticated Session already has — so it cannot grant anything
|
|
218
|
+
* an attacker could not obtain by simply not authenticating. It leaves
|
|
219
|
+
* getCurrentUserRoles() alone: the identity a Session reports stays truthful, only the
|
|
220
|
+
* permission evaluation gains the baseline.
|
|
221
|
+
*/
|
|
222
|
+
private getRolesForPermissionEvaluation;
|
|
137
223
|
getPermissions(node: BaseNode): PermissionFlag;
|
|
138
224
|
getAccessRestrictions(node: BaseNode): AccessRestrictionsFlag;
|
|
139
225
|
/**
|
|
@@ -55,9 +55,11 @@ exports.WellKnownRolesNodeId = {
|
|
|
55
55
|
SecurityAdmin: node_opcua_constants_1.ObjectIds.WellKnownRole_SecurityAdmin,
|
|
56
56
|
Supervisor: node_opcua_constants_1.ObjectIds.WellKnownRole_Supervisor
|
|
57
57
|
};
|
|
58
|
-
function getPermissionForRole(rolePermissions, role) {
|
|
58
|
+
function getPermissionForRole(rolePermissions, role, unresolved) {
|
|
59
59
|
if (rolePermissions === null) {
|
|
60
|
-
|
|
60
|
+
// neither the node nor its namespace declares any policy: nothing to match the
|
|
61
|
+
// Role against, so the answer is the caller's fail-open / fail-closed default
|
|
62
|
+
return unresolved;
|
|
61
63
|
}
|
|
62
64
|
const a = rolePermissions.find((r) => {
|
|
63
65
|
if (!r.roleId) {
|
|
@@ -121,14 +123,127 @@ function getDefaultUserRolePermissionsOnNamespace(namespace, context) {
|
|
|
121
123
|
}
|
|
122
124
|
return null;
|
|
123
125
|
}
|
|
124
|
-
|
|
126
|
+
/** "i=15668", "ns=1;i=1661", "ns=2;s=MyRole", "g=...", "b=..." */
|
|
127
|
+
const nodeIdExpressionRegExp = /^(ns=\d+;)?[isgb]=/;
|
|
128
|
+
/** "1:DiscoveryAdmin" */
|
|
129
|
+
const namespacedBrowseNameRegExp = /^(\d+):(.+)$/;
|
|
130
|
+
/** the left-hand half of a NodeId that a naive split(";") has torn in two */
|
|
131
|
+
const namespacePrefixRegExp = /^ns=\d+$/;
|
|
132
|
+
const roleSetNodeId = (0, node_opcua_nodeid_1.resolveNodeId)(node_opcua_constants_1.ObjectIds.Server_ServerCapabilities_RoleSet);
|
|
133
|
+
const anonymousRoleNodeId = (0, node_opcua_nodeid_1.resolveNodeId)(node_opcua_constants_2.WellKnownRoles.Anonymous);
|
|
134
|
+
function isQualifiedName(role) {
|
|
135
|
+
return typeof role === "object" && role !== null && !(role instanceof node_opcua_nodeid_1.NodeId) && "name" in role;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* split a semicolon separated list of Roles.
|
|
139
|
+
*
|
|
140
|
+
* NodeId expressions contain a semicolon of their own ("ns=1;i=1661"), so a plain
|
|
141
|
+
* split() would tear them in half: glue the two pieces back together.
|
|
142
|
+
*/
|
|
143
|
+
function splitRoleList(roleIds) {
|
|
144
|
+
const roles = [];
|
|
145
|
+
for (const token of roleIds.split(";")) {
|
|
146
|
+
const role = token.trim();
|
|
147
|
+
if (role.length === 0) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const previous = roles.length > 0 ? roles[roles.length - 1] : undefined;
|
|
151
|
+
if (previous !== undefined && namespacePrefixRegExp.test(previous)) {
|
|
152
|
+
roles[roles.length - 1] = `${previous};${role}`;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
roles.push(role);
|
|
156
|
+
}
|
|
157
|
+
return roles;
|
|
158
|
+
}
|
|
159
|
+
/** the standard Roles of OPC 10000-3, which live in namespace 0 and need no address space */
|
|
160
|
+
function tryResolveWellKnownRole(browseName) {
|
|
161
|
+
const name = browseName.startsWith("WellKnownRole_") ? browseName.slice("WellKnownRole_".length) : browseName;
|
|
162
|
+
try {
|
|
163
|
+
return (0, node_opcua_nodeid_1.resolveNodeId)(`WellKnownRole_${name}`);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* look a Role up by BrowseName in the RoleSet (OPC 10000-18 §4.3), which is where
|
|
171
|
+
* both the standard Roles and the ones contributed by companion nodesets are listed.
|
|
172
|
+
*/
|
|
173
|
+
function resolveRoleByBrowseName(browseName, namespaceIndex, addressSpace) {
|
|
174
|
+
if (!browseName) {
|
|
175
|
+
throw new Error("makeRoles: a Role given as a QualifiedName must carry a name");
|
|
176
|
+
}
|
|
177
|
+
if (!addressSpace) {
|
|
178
|
+
throw new Error(`makeRoles: cannot resolve the Role "${browseName}": it is not a standard Role of namespace 0, ` +
|
|
179
|
+
"so an address space must be passed as the second argument of makeRoles()");
|
|
180
|
+
}
|
|
181
|
+
const roleSet = addressSpace.findNode(roleSetNodeId);
|
|
182
|
+
if (!roleSet) {
|
|
183
|
+
throw new Error(`makeRoles: cannot resolve the Role "${browseName}": the address space has no RoleSet`);
|
|
184
|
+
}
|
|
185
|
+
const candidates = roleSet
|
|
186
|
+
.findReferencesExAsObject("HasComponent", node_opcua_data_model_1.BrowseDirection.Forward)
|
|
187
|
+
.filter((node) => node.nodeClass === node_opcua_data_model_1.NodeClass.Object && node.browseName.name === browseName)
|
|
188
|
+
.filter((node) => namespaceIndex === undefined || node.browseName.namespaceIndex === namespaceIndex);
|
|
189
|
+
if (candidates.length === 0) {
|
|
190
|
+
const known = roleSet
|
|
191
|
+
.findReferencesExAsObject("HasComponent", node_opcua_data_model_1.BrowseDirection.Forward)
|
|
192
|
+
.filter((node) => node.nodeClass === node_opcua_data_model_1.NodeClass.Object)
|
|
193
|
+
.map((node) => node.browseName.toString())
|
|
194
|
+
.join(", ");
|
|
195
|
+
throw new Error(`makeRoles: cannot find a Role named "${browseName}" in the RoleSet. Known Roles are: ${known}`);
|
|
196
|
+
}
|
|
197
|
+
if (candidates.length > 1) {
|
|
198
|
+
const ambiguous = candidates.map((node) => node.browseName.toString()).join(", ");
|
|
199
|
+
throw new Error(`makeRoles: the Role name "${browseName}" is ambiguous (${ambiguous}), please qualify it with its namespace`);
|
|
200
|
+
}
|
|
201
|
+
return candidates[0].nodeId;
|
|
202
|
+
}
|
|
203
|
+
function resolveRole(role, addressSpace) {
|
|
204
|
+
if (isQualifiedName(role)) {
|
|
205
|
+
return resolveRoleByBrowseName(role.name, role.namespaceIndex, addressSpace);
|
|
206
|
+
}
|
|
207
|
+
if (typeof role !== "string") {
|
|
208
|
+
return (0, node_opcua_nodeid_1.resolveNodeId)(role);
|
|
209
|
+
}
|
|
210
|
+
if (nodeIdExpressionRegExp.test(role)) {
|
|
211
|
+
return (0, node_opcua_nodeid_1.resolveNodeId)(role);
|
|
212
|
+
}
|
|
213
|
+
const namespacedBrowseName = namespacedBrowseNameRegExp.exec(role);
|
|
214
|
+
if (namespacedBrowseName) {
|
|
215
|
+
return resolveRoleByBrowseName(namespacedBrowseName[2], parseInt(namespacedBrowseName[1], 10), addressSpace);
|
|
216
|
+
}
|
|
217
|
+
// a bare name: the standard Roles resolve without an address space, the others need one
|
|
218
|
+
return tryResolveWellKnownRole(role) ?? resolveRoleByBrowseName(role, undefined, addressSpace);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* build the list of Role NodeIds a user is granted, from any of the accepted spellings:
|
|
222
|
+
*
|
|
223
|
+
* ```ts
|
|
224
|
+
* makeRoles(WellKnownRoles.Observer); // a well known Role
|
|
225
|
+
* makeRoles("Observer;Operator"); // semicolon separated names
|
|
226
|
+
* makeRoles("ns=1;i=1661"); // an explicit NodeId
|
|
227
|
+
* makeRoles(["Observer", "ns=1;i=1661"]); // mixed
|
|
228
|
+
* makeRoles("1:DiscoveryAdmin", addressSpace); // BrowseName, namespace index
|
|
229
|
+
* makeRoles("DiscoveryAdmin", addressSpace); // BrowseName, any namespace
|
|
230
|
+
* makeRoles([{ name: "DiscoveryAdmin" }], addressSpace); // idem, as a QualifiedName
|
|
231
|
+
* // when the namespace is known by its URI rather than by its index:
|
|
232
|
+
* makeRoles([{ namespaceIndex: addressSpace.getNamespaceIndex(gdsUri), name: "DiscoveryAdmin" }], addressSpace);
|
|
233
|
+
* ```
|
|
234
|
+
*
|
|
235
|
+
* @param roleIds the Roles to resolve
|
|
236
|
+
* @param addressSpace required only to resolve a Role by BrowseName, since that
|
|
237
|
+
* lookup goes through the RoleSet
|
|
238
|
+
*/
|
|
239
|
+
function makeRoles(roleIds, addressSpace) {
|
|
125
240
|
if (typeof roleIds === "number") {
|
|
126
241
|
roleIds = [roleIds];
|
|
127
242
|
}
|
|
128
243
|
if (typeof roleIds === "string") {
|
|
129
|
-
roleIds = roleIds
|
|
244
|
+
roleIds = splitRoleList(roleIds);
|
|
130
245
|
}
|
|
131
|
-
return roleIds.map((
|
|
246
|
+
return roleIds.map((role) => resolveRole(role, addressSpace));
|
|
132
247
|
}
|
|
133
248
|
class SessionContext {
|
|
134
249
|
static defaultContext = new SessionContext({});
|
|
@@ -209,11 +324,16 @@ class SessionContext {
|
|
|
209
324
|
*/
|
|
210
325
|
getCurrentUserRoles() {
|
|
211
326
|
if (!this.session) {
|
|
212
|
-
|
|
327
|
+
// no Session: an in-process caller. getPermissions grants it everything —
|
|
328
|
+
// an empty list here does NOT mean "no rights", see unresolvedPermissions.
|
|
329
|
+
return [];
|
|
213
330
|
}
|
|
214
331
|
(0, node_opcua_assert_1.assert)(this.session != null, "expecting a session");
|
|
215
332
|
const userIdentityToken = this.session.userIdentityToken;
|
|
216
333
|
if (!userIdentityToken) {
|
|
334
|
+
// a Session that was never activated. Distinct from the case above: this one
|
|
335
|
+
// is remote, and how the empty list is then interpreted depends on
|
|
336
|
+
// IServerBase.unresolvedPermissionPolicy.
|
|
217
337
|
return [];
|
|
218
338
|
}
|
|
219
339
|
const anonymous = makeRoles([node_opcua_constants_2.WellKnownRoles.Anonymous]);
|
|
@@ -267,15 +387,67 @@ class SessionContext {
|
|
|
267
387
|
}
|
|
268
388
|
return node.rolePermissions;
|
|
269
389
|
}
|
|
390
|
+
/**
|
|
391
|
+
* true when this context carries no Session at all.
|
|
392
|
+
*
|
|
393
|
+
* That is an in-process caller — SessionContext.defaultContext, or a PseudoSession
|
|
394
|
+
* driving the address space from inside the server — not a remote one. Such a caller
|
|
395
|
+
* has already passed whatever authorization its own entry point applies, and the
|
|
396
|
+
* address space is not the place to second-guess it, so it is always granted every
|
|
397
|
+
* permission. This is deliberate, and distinct from a remote Session whose identity
|
|
398
|
+
* merely failed to resolve to a Role: that case is governed by
|
|
399
|
+
* IServerBase.unresolvedPermissionPolicy.
|
|
400
|
+
*/
|
|
401
|
+
get isInProcessCaller() {
|
|
402
|
+
return !this.session;
|
|
403
|
+
}
|
|
404
|
+
/** what an unresolved permission means for this context: everything, or nothing */
|
|
405
|
+
get unresolvedPermissions() {
|
|
406
|
+
if (this.isInProcessCaller) {
|
|
407
|
+
return node_opcua_data_model_1.allPermissions;
|
|
408
|
+
}
|
|
409
|
+
return this.server?.unresolvedPermissionPolicy === "deny" ? node_opcua_data_model_1.PermissionFlag.None : node_opcua_data_model_1.allPermissions;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* the Roles to evaluate permissions against: the ones the user resolved to, plus the
|
|
413
|
+
* Anonymous Role, which every Session stands on.
|
|
414
|
+
*
|
|
415
|
+
* Opc.Ua.NodeSet2.xml names exactly five Roles across its 854 RolePermission entries —
|
|
416
|
+
* Anonymous, SecurityAdmin, ConfigureAdmin and the two SecurityKeyServer ones — and
|
|
417
|
+
* never AuthenticatedUser, Observer, Operator, Engineer or Supervisor. Its 195 Anonymous
|
|
418
|
+
* entries (Browse, Browse|Read, Browse|Call) are therefore not a privilege reserved for
|
|
419
|
+
* unauthenticated Sessions; they are the floor granted to everyone. Read literally, an
|
|
420
|
+
* authenticated user would be unable to browse the Server Object at all, and would have
|
|
421
|
+
* strictly less access than an anonymous one.
|
|
422
|
+
*
|
|
423
|
+
* Adding the Anonymous Role here can only widen a permission set, never narrow it, and
|
|
424
|
+
* only ever to what an unauthenticated Session already has — so it cannot grant anything
|
|
425
|
+
* an attacker could not obtain by simply not authenticating. It leaves
|
|
426
|
+
* getCurrentUserRoles() alone: the identity a Session reports stays truthful, only the
|
|
427
|
+
* permission evaluation gains the baseline.
|
|
428
|
+
*/
|
|
429
|
+
getRolesForPermissionEvaluation(roles) {
|
|
430
|
+
if (roles.find((role) => (0, node_opcua_nodeid_1.sameNodeId)(role, anonymousRoleNodeId))) {
|
|
431
|
+
return roles;
|
|
432
|
+
}
|
|
433
|
+
return [...roles, anonymousRoleNodeId];
|
|
434
|
+
}
|
|
270
435
|
getPermissions(node) {
|
|
271
436
|
const applicableRolePermissions = this.getApplicableRolePermissions(node);
|
|
272
437
|
const roles = this.getCurrentUserRoles();
|
|
273
438
|
if (roles.length === 0) {
|
|
274
|
-
|
|
439
|
+
// Two very different situations land here:
|
|
440
|
+
// - no Session at all: an in-process caller, always trusted (see isInProcessCaller)
|
|
441
|
+
// - a Session that resolved to no Role, either because it carries no
|
|
442
|
+
// UserIdentityToken (it was never activated) or because its user matched
|
|
443
|
+
// nothing. Permissive by default, for backwards compatibility, but a server
|
|
444
|
+
// can set unresolvedPermissionPolicy: "deny" to fail closed instead.
|
|
445
|
+
return this.unresolvedPermissions;
|
|
275
446
|
}
|
|
447
|
+
const unresolved = this.unresolvedPermissions;
|
|
276
448
|
let orFlags = 0;
|
|
277
|
-
for (const role of roles) {
|
|
278
|
-
orFlags = orFlags | getPermissionForRole(applicableRolePermissions, role);
|
|
449
|
+
for (const role of this.getRolesForPermissionEvaluation(roles)) {
|
|
450
|
+
orFlags = orFlags | getPermissionForRole(applicableRolePermissions, role, unresolved);
|
|
279
451
|
}
|
|
280
452
|
return orFlags;
|
|
281
453
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session_context.js","sourceRoot":"","sources":["../../source/session_context.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session_context.js","sourceRoot":"","sources":["../../source/session_context.ts"],"names":[],"mappings":"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"}
|
|
@@ -720,9 +720,14 @@ class BaseNodeImpl extends node_opcua_address_space_base_1.TypedEventEmitter {
|
|
|
720
720
|
return;
|
|
721
721
|
}
|
|
722
722
|
install_components_as_object_properties(this);
|
|
723
|
+
// Only this node is new, so only this node has to appear on the parent.
|
|
724
|
+
// Re-walking every child the parent already has made building a folder
|
|
725
|
+
// of N children cost O(N^2) - measured at 7.2s for 3000 children, of
|
|
726
|
+
// which 4.1s was spent re-installing properties that were already there.
|
|
727
|
+
const self = this;
|
|
723
728
|
function install_extra_properties_on_parent(ref) {
|
|
724
729
|
const node = reference_impl_1.ReferenceImpl.resolveReferenceNode(addressSpace, ref);
|
|
725
|
-
|
|
730
|
+
install_child_as_object_property(node, self);
|
|
726
731
|
}
|
|
727
732
|
// make sure parent have extra properties updated
|
|
728
733
|
const parentComponents = this.findReferencesEx("HasComponent", node_opcua_data_model_1.BrowseDirection.Inverse);
|
|
@@ -1462,43 +1467,55 @@ const reservedNames = {
|
|
|
1462
1467
|
* install hierarchical references as javascript properties
|
|
1463
1468
|
* Components/Properties/Organizes
|
|
1464
1469
|
*/
|
|
1470
|
+
/**
|
|
1471
|
+
* Expose a single child of `parentObj` as a JavaScript property on it.
|
|
1472
|
+
*
|
|
1473
|
+
* Split out of {@link install_components_as_object_properties} so that adding
|
|
1474
|
+
* one child does not have to re-walk every child the parent already has: that
|
|
1475
|
+
* made building a large folder quadratic. See
|
|
1476
|
+
* {@link BaseNodeImpl.install_extra_properties}.
|
|
1477
|
+
*/
|
|
1478
|
+
function install_child_as_object_property(parentObj, child) {
|
|
1479
|
+
// the parent may be unresolvable while a nodeset is still loading, which is
|
|
1480
|
+
// why the whole-parent form guarded it too
|
|
1481
|
+
if (!parentObj || !child) {
|
|
1482
|
+
return;
|
|
1483
|
+
}
|
|
1484
|
+
// assumption: we ignore namespace here .
|
|
1485
|
+
const name = (0, node_opcua_utils_1.lowerFirstLetter)(child.browseName.name || "");
|
|
1486
|
+
if (Object.hasOwn(reservedNames, name)) {
|
|
1487
|
+
// ignore reserved names
|
|
1488
|
+
if (doDebug) {
|
|
1489
|
+
debugLog(chalk_1.default.bgWhite.red(`Ignoring reserved keyword ${name}`));
|
|
1490
|
+
}
|
|
1491
|
+
return;
|
|
1492
|
+
}
|
|
1493
|
+
// ignore reserved names
|
|
1494
|
+
doDebug && debugLog(`Installing property ${name}`, " on ", parentObj.browseName.toString());
|
|
1495
|
+
const hasProperty = Object.hasOwn(parentObj, name);
|
|
1496
|
+
if (hasProperty &&
|
|
1497
|
+
parentObj[name] !== null &&
|
|
1498
|
+
parentObj[name] !== undefined) {
|
|
1499
|
+
return;
|
|
1500
|
+
}
|
|
1501
|
+
Object.defineProperty(parentObj, name, {
|
|
1502
|
+
configurable: true, // set to true, so we can undefine later
|
|
1503
|
+
enumerable: true,
|
|
1504
|
+
// xx writable: false,
|
|
1505
|
+
get() {
|
|
1506
|
+
return child;
|
|
1507
|
+
}
|
|
1508
|
+
// value: child
|
|
1509
|
+
});
|
|
1510
|
+
}
|
|
1465
1511
|
function install_components_as_object_properties(parentObj) {
|
|
1466
1512
|
if (!parentObj) {
|
|
1467
1513
|
return;
|
|
1468
1514
|
}
|
|
1469
1515
|
const addressSpace = parentObj.addressSpace;
|
|
1470
1516
|
const hierarchicalRefs = parentObj.findHierarchicalReferences();
|
|
1471
|
-
const
|
|
1472
|
-
|
|
1473
|
-
if (!child) {
|
|
1474
|
-
continue;
|
|
1475
|
-
}
|
|
1476
|
-
// assumption: we ignore namespace here .
|
|
1477
|
-
const name = (0, node_opcua_utils_1.lowerFirstLetter)(child.browseName.name || "");
|
|
1478
|
-
if (Object.hasOwn(reservedNames, name)) {
|
|
1479
|
-
// ignore reserved names
|
|
1480
|
-
if (doDebug) {
|
|
1481
|
-
debugLog(chalk_1.default.bgWhite.red(`Ignoring reserved keyword ${name}`));
|
|
1482
|
-
}
|
|
1483
|
-
continue;
|
|
1484
|
-
}
|
|
1485
|
-
// ignore reserved names
|
|
1486
|
-
doDebug && debugLog(`Installing property ${name}`, " on ", parentObj.browseName.toString());
|
|
1487
|
-
const hasProperty = Object.hasOwn(parentObj, name);
|
|
1488
|
-
if (hasProperty &&
|
|
1489
|
-
parentObj[name] !== null &&
|
|
1490
|
-
parentObj[name] !== undefined) {
|
|
1491
|
-
continue;
|
|
1492
|
-
}
|
|
1493
|
-
Object.defineProperty(parentObj, name, {
|
|
1494
|
-
configurable: true, // set to true, so we can undefine later
|
|
1495
|
-
enumerable: true,
|
|
1496
|
-
// xx writable: false,
|
|
1497
|
-
get() {
|
|
1498
|
-
return child;
|
|
1499
|
-
}
|
|
1500
|
-
// value: child
|
|
1501
|
-
});
|
|
1517
|
+
for (const reference of hierarchicalRefs) {
|
|
1518
|
+
install_child_as_object_property(parentObj, reference_impl_1.ReferenceImpl.resolveReferenceNode(addressSpace, reference));
|
|
1502
1519
|
}
|
|
1503
1520
|
}
|
|
1504
1521
|
function getReferenceType(reference) {
|