node-opcua-samples 2.98.0 → 2.98.2
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/get_endpoints.d.ts +2 -0
- package/dist/get_endpoints.js +142 -0
- package/dist/get_endpoints.js.map +1 -0
- package/dist/mini_server.d.ts +1 -0
- package/dist/mini_server.js +89 -0
- package/dist/mini_server.js.map +1 -0
- package/dist/server_with_changing_password.d.ts +1 -0
- package/dist/server_with_changing_password.js +101 -0
- package/dist/server_with_changing_password.js.map +1 -0
- package/dist/server_with_push_certificate.d.ts +2 -0
- package/dist/server_with_push_certificate.js +112 -0
- package/dist/server_with_push_certificate.js.map +1 -0
- package/dist/simple_client_ts.d.ts +2 -0
- package/dist/simple_client_ts.js.map +1 -0
- package/dist/simple_findservers.d.ts +2 -0
- package/dist/simple_findservers.js +49 -0
- package/dist/simple_findservers.js.map +1 -0
- package/dist/simple_secure_server.d.ts +2 -0
- package/dist/simple_secure_server.js +126 -0
- package/dist/simple_secure_server.js.map +1 -0
- package/dist/simple_server_with_custom_extension_objects.d.ts +2 -0
- package/dist/simple_server_with_custom_extension_objects.js +82 -0
- package/dist/simple_server_with_custom_extension_objects.js.map +1 -0
- package/dist/stressing_client.d.ts +1 -0
- package/dist/stressing_client.js +37 -0
- package/dist/stressing_client.js.map +1 -0
- package/dist/tiny_client.d.ts +1 -0
- package/dist/tiny_client.js +33 -0
- package/dist/tiny_client.js.map +1 -0
- package/package.json +14 -11
- package/bin/createOPCUACertificate.cmd +0 -6
- package/bin/create_certificates.js +0 -2
- package/bin/crypto_create_CA.js +0 -2
- package/bin/demo_server_with_alarm.js +0 -51
- package/bin/findServersOnNetwork.js +0 -32
- package/bin/get_endpoints.ts +0 -166
- package/bin/machineryServer.js +0 -83
- package/bin/mini_server.ts +0 -106
- package/bin/more.js +0 -40
- package/bin/node-opcua.js +0 -2
- package/bin/opcua_interceptor.js +0 -122
- package/bin/server_with_changing_password.ts +0 -97
- package/bin/server_with_push_certificate.ts +0 -122
- package/bin/simple_client.js +0 -830
- package/bin/simple_client_ts.ts +0 -847
- package/bin/simple_findservers.ts +0 -45
- package/bin/simple_secure_server.ts +0 -152
- package/bin/simple_server_with_custom_extension_objects.ts +0 -89
- package/bin/stressing_client.ts +0 -28
- package/bin/tiny_client.ts +0 -24
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
// tslint:disable:no-console
|
|
14
|
+
const chalk = require("chalk");
|
|
15
|
+
const fs = require("fs");
|
|
16
|
+
const path = require("path");
|
|
17
|
+
const yargs = require("yargs");
|
|
18
|
+
const node_opcua_1 = require("node-opcua");
|
|
19
|
+
const node_opcua_crypto_1 = require("node-opcua-crypto");
|
|
20
|
+
// tslint:disable:no-var-requires
|
|
21
|
+
const Table = require("easy-table");
|
|
22
|
+
const treeify = require("treeify");
|
|
23
|
+
// eslint-disable-next-line max-statements
|
|
24
|
+
function main() {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
// ts-node bin/simple_client.ts --endpoint opc.tcp://localhost:53530/OPCUA/SimulationServer --node "ns=5;s=Sinusoid1"
|
|
27
|
+
const argv = yield yargs(process.argv)
|
|
28
|
+
.wrap(132)
|
|
29
|
+
.option("endpoint", {
|
|
30
|
+
alias: "e",
|
|
31
|
+
demandOption: true,
|
|
32
|
+
describe: "the end point to connect to "
|
|
33
|
+
})
|
|
34
|
+
.option("securityMode", {
|
|
35
|
+
alias: "s",
|
|
36
|
+
default: "None",
|
|
37
|
+
describe: "the security mode ( None Sign SignAndEncrypt )"
|
|
38
|
+
})
|
|
39
|
+
.option("securityPolicy", {
|
|
40
|
+
alias: "P",
|
|
41
|
+
default: "None",
|
|
42
|
+
describe: "the policy mode : (" + Object.keys(node_opcua_1.SecurityPolicy).join(" - ") + ")"
|
|
43
|
+
})
|
|
44
|
+
.option("discovery", {
|
|
45
|
+
alias: "D",
|
|
46
|
+
describe: "specify the endpoint uri of discovery server (by default same as server endpoint uri)"
|
|
47
|
+
})
|
|
48
|
+
.example("get_endpoints --endpoint opc.tcp://localhost:49230", "").argv;
|
|
49
|
+
const securityMode = (0, node_opcua_1.coerceMessageSecurityMode)(argv.securityMode);
|
|
50
|
+
if (securityMode === node_opcua_1.MessageSecurityMode.Invalid) {
|
|
51
|
+
throw new Error("Invalid Security mode");
|
|
52
|
+
}
|
|
53
|
+
const securityPolicy = (0, node_opcua_1.coerceSecurityPolicy)(argv.securityPolicy);
|
|
54
|
+
if (securityPolicy === node_opcua_1.SecurityPolicy.Invalid) {
|
|
55
|
+
throw new Error("Invalid securityPolicy");
|
|
56
|
+
}
|
|
57
|
+
console.log(chalk.cyan("securityMode = "), securityMode.toString());
|
|
58
|
+
console.log(chalk.cyan("securityPolicy = "), securityPolicy.toString());
|
|
59
|
+
const endpointUrl = argv.endpoint;
|
|
60
|
+
if (!endpointUrl) {
|
|
61
|
+
yargs.showHelp();
|
|
62
|
+
process.exit(0);
|
|
63
|
+
}
|
|
64
|
+
const discoveryUrl = argv.discovery ? argv.discovery : endpointUrl;
|
|
65
|
+
const optionsInitial = {
|
|
66
|
+
securityMode,
|
|
67
|
+
securityPolicy,
|
|
68
|
+
endpointMustExist: false,
|
|
69
|
+
connectionStrategy: {
|
|
70
|
+
initialDelay: 2000,
|
|
71
|
+
maxDelay: 10 * 1000,
|
|
72
|
+
maxRetry: 10
|
|
73
|
+
},
|
|
74
|
+
discoveryUrl
|
|
75
|
+
};
|
|
76
|
+
const client = node_opcua_1.OPCUAClient.create(optionsInitial);
|
|
77
|
+
client.on("backoff", (retry, delay) => {
|
|
78
|
+
console.log(chalk.bgWhite.yellow("backoff attempt #"), retry, " retrying in ", delay / 1000.0, " seconds");
|
|
79
|
+
});
|
|
80
|
+
console.log(" connecting to ", chalk.cyan.bold(endpointUrl));
|
|
81
|
+
console.log(" strategy", client.connectionStrategy);
|
|
82
|
+
try {
|
|
83
|
+
yield client.connect(endpointUrl);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.log(chalk.red(" Cannot connect to ") + endpointUrl);
|
|
87
|
+
if (err instanceof Error) {
|
|
88
|
+
console.log(" Error = ", err.message);
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const endpoints = yield client.getEndpoints();
|
|
93
|
+
if (argv.debug) {
|
|
94
|
+
fs.writeFileSync("tmp/endpoints.log", JSON.stringify(endpoints, null, " "));
|
|
95
|
+
console.log(treeify.asTree(endpoints, true));
|
|
96
|
+
}
|
|
97
|
+
const table = new Table();
|
|
98
|
+
let serverCertificate;
|
|
99
|
+
let i = 0;
|
|
100
|
+
for (const endpoint of endpoints) {
|
|
101
|
+
table.cell("endpoint", endpoint.endpointUrl + "");
|
|
102
|
+
table.cell("Application URI", endpoint.server.applicationUri);
|
|
103
|
+
table.cell("Product URI", endpoint.server.productUri);
|
|
104
|
+
table.cell("Application Name", endpoint.server.applicationName.text);
|
|
105
|
+
table.cell("securityLevel", endpoint.securityLevel);
|
|
106
|
+
table.cell("Security Mode", chalk.cyan(node_opcua_1.MessageSecurityMode[endpoint.securityMode].toString()));
|
|
107
|
+
table.cell("securityPolicyUri", chalk.cyan(endpoint.securityPolicyUri));
|
|
108
|
+
table.cell("Type", node_opcua_1.ApplicationType[endpoint.server.applicationType]);
|
|
109
|
+
table.cell("certificate", "..." /*endpoint.serverCertificate*/);
|
|
110
|
+
endpoint.server.discoveryUrls = endpoint.server.discoveryUrls || [];
|
|
111
|
+
table.cell("discoveryUrls", endpoint.server.discoveryUrls.join(" - "));
|
|
112
|
+
serverCertificate = endpoint.serverCertificate;
|
|
113
|
+
const certificate_filename = path.join(__dirname, "../certificates/PKI/server_certificate" + i + ".pem");
|
|
114
|
+
if (serverCertificate) {
|
|
115
|
+
fs.writeFile(certificate_filename, (0, node_opcua_crypto_1.toPem)(serverCertificate, "CERTIFICATE"), () => {
|
|
116
|
+
/**/
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
table.newRow();
|
|
120
|
+
i++;
|
|
121
|
+
}
|
|
122
|
+
console.log(table.toString());
|
|
123
|
+
for (const endpoint of endpoints) {
|
|
124
|
+
console.log("Identify Token for : Security Mode=", chalk.cyan(node_opcua_1.MessageSecurityMode[endpoint.securityMode].toString()), " Policy=", chalk.cyan(endpoint.securityPolicyUri));
|
|
125
|
+
const table2 = new Table();
|
|
126
|
+
for (const token of endpoint.userIdentityTokens) {
|
|
127
|
+
table2.cell("policyId", token.policyId);
|
|
128
|
+
table2.cell("tokenType", node_opcua_1.UserTokenType[token.tokenType]);
|
|
129
|
+
table2.cell("issuedTokenType", token.issuedTokenType);
|
|
130
|
+
table2.cell("issuerEndpointUrl", token.issuerEndpointUrl);
|
|
131
|
+
table2.cell("securityPolicyUri", token.securityPolicyUri);
|
|
132
|
+
table2.newRow();
|
|
133
|
+
}
|
|
134
|
+
console.log(table2.toString());
|
|
135
|
+
}
|
|
136
|
+
yield client.disconnect();
|
|
137
|
+
console.log("success !! ");
|
|
138
|
+
process.exit(0);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
main();
|
|
142
|
+
//# sourceMappingURL=get_endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_endpoints.js","sourceRoot":"","sources":["../bin/get_endpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
// tslint:disable:no-console
|
|
13
|
+
const path = require("path");
|
|
14
|
+
const os = require("os");
|
|
15
|
+
const chalk = require("chalk");
|
|
16
|
+
const node_opcua_1 = require("node-opcua");
|
|
17
|
+
Error.stackTraceLimit = Infinity;
|
|
18
|
+
const port = 26544;
|
|
19
|
+
const env_paths_1 = require("env-paths");
|
|
20
|
+
const config = (0, env_paths_1.default)("MiniNodeOPCUA-Server").config;
|
|
21
|
+
const pkiFolder = path.join(config, "PKI");
|
|
22
|
+
const serverOptions = {
|
|
23
|
+
serverCertificateManager: new node_opcua_1.OPCUACertificateManager({
|
|
24
|
+
rootFolder: pkiFolder
|
|
25
|
+
}),
|
|
26
|
+
port,
|
|
27
|
+
maxConnectionsPerEndpoint: 2,
|
|
28
|
+
nodeset_filename: [(0, node_opcua_1.get_mini_nodeset_filename)()],
|
|
29
|
+
serverInfo: {
|
|
30
|
+
applicationUri: (0, node_opcua_1.makeApplicationUrn)(os.hostname(), "MiniNodeOPCUA-Server"),
|
|
31
|
+
productUri: "Mini NodeOPCUA-Server",
|
|
32
|
+
applicationName: { text: "Mini NodeOPCUA Server", locale: "en" },
|
|
33
|
+
gatewayServerUri: null,
|
|
34
|
+
discoveryProfileUri: null,
|
|
35
|
+
discoveryUrls: []
|
|
36
|
+
},
|
|
37
|
+
buildInfo: {
|
|
38
|
+
buildNumber: "1234"
|
|
39
|
+
},
|
|
40
|
+
serverCapabilities: {
|
|
41
|
+
maxSessions: 10,
|
|
42
|
+
maxBrowseContinuationPoints: 10,
|
|
43
|
+
maxHistoryContinuationPoints: 10,
|
|
44
|
+
// maxInactiveLockTime
|
|
45
|
+
operationLimits: {
|
|
46
|
+
maxNodesPerBrowse: 10,
|
|
47
|
+
maxNodesPerHistoryReadData: 6,
|
|
48
|
+
maxNodesPerHistoryReadEvents: 10,
|
|
49
|
+
maxNodesPerHistoryUpdateData: 10,
|
|
50
|
+
maxNodesPerRead: 10,
|
|
51
|
+
maxNodesPerWrite: 10
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
isAuditing: false
|
|
55
|
+
};
|
|
56
|
+
function main() {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
process.title = "Node OPCUA Server on port : " + serverOptions.port;
|
|
59
|
+
const server = new node_opcua_1.OPCUAServer(serverOptions);
|
|
60
|
+
console.log(chalk.yellow(" server PID :"), process.pid);
|
|
61
|
+
try {
|
|
62
|
+
yield server.start();
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
console.log(" Server failed to start ... exiting");
|
|
66
|
+
process.exit(-3);
|
|
67
|
+
}
|
|
68
|
+
const endpointUrl = server.getEndpointUrl();
|
|
69
|
+
console.log(chalk.yellow(" server on port :"), server.endpoints[0].port.toString());
|
|
70
|
+
console.log(chalk.yellow(" endpointUrl :"), chalk.cyan(endpointUrl));
|
|
71
|
+
console.log(chalk.yellow("\n server now waiting for connections. CTRL+C to stop"));
|
|
72
|
+
server.on("create_session", (session) => {
|
|
73
|
+
console.log(" SESSION CREATED");
|
|
74
|
+
console.log(chalk.cyan(" client application URI: "), session.clientDescription.applicationUri);
|
|
75
|
+
console.log(chalk.cyan(" client product URI: "), session.clientDescription.productUri);
|
|
76
|
+
console.log(chalk.cyan(" client application name: "), session.clientDescription.applicationName.toString());
|
|
77
|
+
console.log(chalk.cyan(" client application type: "), session.clientDescription.applicationType.toString());
|
|
78
|
+
console.log(chalk.cyan(" session name: "), session.sessionName ? session.sessionName.toString() : "<null>");
|
|
79
|
+
console.log(chalk.cyan(" session timeout: "), session.sessionTimeout);
|
|
80
|
+
console.log(chalk.cyan(" session id: "), session.nodeId);
|
|
81
|
+
});
|
|
82
|
+
server.on("session_closed", (session, reason) => {
|
|
83
|
+
console.log(" SESSION CLOSED :", reason);
|
|
84
|
+
console.log(chalk.cyan(" session name: "), session.sessionName ? session.sessionName.toString() : "<null>");
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
main();
|
|
89
|
+
//# sourceMappingURL=mini_server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mini_server.js","sourceRoot":"","sources":["../bin/mini_server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const node_opcua_1 = require("node-opcua");
|
|
13
|
+
const port = 2510;
|
|
14
|
+
let server;
|
|
15
|
+
const users = [
|
|
16
|
+
{
|
|
17
|
+
username: "user1",
|
|
18
|
+
password: "passwor1",
|
|
19
|
+
roles: (0, node_opcua_1.makeRoles)([node_opcua_1.WellKnownRoles.AuthenticatedUser, node_opcua_1.WellKnownRoles.ConfigureAdmin])
|
|
20
|
+
}
|
|
21
|
+
];
|
|
22
|
+
const userManager = {
|
|
23
|
+
isValidUser: (username, password) => {
|
|
24
|
+
const uIndex = users.findIndex(function (u) {
|
|
25
|
+
return u.username === username;
|
|
26
|
+
});
|
|
27
|
+
if (uIndex < 0) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (users[uIndex].password !== password) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
},
|
|
35
|
+
getUserRoles: (username) => {
|
|
36
|
+
const uIndex = users.findIndex(function (x) {
|
|
37
|
+
return x.username === username;
|
|
38
|
+
});
|
|
39
|
+
if (uIndex < 0) {
|
|
40
|
+
return (0, node_opcua_1.makeRoles)("Anonymous");
|
|
41
|
+
}
|
|
42
|
+
const userRole = users[uIndex].roles;
|
|
43
|
+
return userRole;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
function startServer() {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
server = new node_opcua_1.OPCUAServer({
|
|
49
|
+
port: port,
|
|
50
|
+
nodeset_filename: [node_opcua_1.nodesets.standard],
|
|
51
|
+
userManager,
|
|
52
|
+
maxConnectionsPerEndpoint: 1,
|
|
53
|
+
serverCapabilities: {
|
|
54
|
+
maxSessions: 2,
|
|
55
|
+
maxSubscriptions: 10,
|
|
56
|
+
maxSubscriptionsPerSession: 3
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
yield server.initialize();
|
|
60
|
+
yield server.start();
|
|
61
|
+
server.on("newChannel", () => {
|
|
62
|
+
console.log("server => new channel");
|
|
63
|
+
});
|
|
64
|
+
server.on("session_activated", () => {
|
|
65
|
+
console.log("server session activated");
|
|
66
|
+
});
|
|
67
|
+
server.on("connectionRefused", () => {
|
|
68
|
+
console.log("server connection refused");
|
|
69
|
+
});
|
|
70
|
+
server.on("session_closed", () => {
|
|
71
|
+
console.log("server sesion closed");
|
|
72
|
+
});
|
|
73
|
+
server.on("create_session", () => {
|
|
74
|
+
console.log("server create session");
|
|
75
|
+
});
|
|
76
|
+
return server;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
80
|
+
let counter = 0;
|
|
81
|
+
process.on("SIGINT", () => {
|
|
82
|
+
if (counter > 5) {
|
|
83
|
+
process.exit();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
while (true) {
|
|
87
|
+
users[0].password = `password${counter % 2}`;
|
|
88
|
+
counter++;
|
|
89
|
+
console.log("user: user1, password: ", users[0].password);
|
|
90
|
+
const server = yield startServer();
|
|
91
|
+
console.log("server started at", server.getEndpointUrl());
|
|
92
|
+
yield new Promise((resolve) => {
|
|
93
|
+
console.log("waiting for CTRL+C to cycle");
|
|
94
|
+
process.once("SIGINT", resolve);
|
|
95
|
+
});
|
|
96
|
+
console.log("now shutting down");
|
|
97
|
+
yield server.shutdown(1000);
|
|
98
|
+
console.log("server stopped for maintenance");
|
|
99
|
+
}
|
|
100
|
+
}))();
|
|
101
|
+
//# sourceMappingURL=server_with_changing_password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server_with_changing_password.js","sourceRoot":"","sources":["../bin/server_with_changing_password.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
/* eslint no-process-exit: 0 */
|
|
14
|
+
// tslint:disable:no-console
|
|
15
|
+
const path = require("path");
|
|
16
|
+
const chalk = require("chalk");
|
|
17
|
+
const node_opcua_1 = require("node-opcua");
|
|
18
|
+
const node_opcua_pki_1 = require("node-opcua-pki");
|
|
19
|
+
const node_opcua_server_configuration_1 = require("node-opcua-server-configuration");
|
|
20
|
+
const yargs = require("yargs");
|
|
21
|
+
const rootFolder = path.join(__dirname, "../../..");
|
|
22
|
+
const env_paths_1 = require("env-paths");
|
|
23
|
+
const config = (0, env_paths_1.default)("node-opcua-default").config;
|
|
24
|
+
const pkiFolder = path.join(config, "PKI");
|
|
25
|
+
const certificateManager = new node_opcua_1.OPCUACertificateManager({
|
|
26
|
+
automaticallyAcceptUnknownCertificate: true,
|
|
27
|
+
name: "PKI",
|
|
28
|
+
rootFolder: pkiFolder
|
|
29
|
+
});
|
|
30
|
+
const users = [
|
|
31
|
+
{
|
|
32
|
+
username: "user1",
|
|
33
|
+
password: "password1",
|
|
34
|
+
role: (0, node_opcua_1.makeRoles)([node_opcua_1.WellKnownRoles.AuthenticatedUser, node_opcua_1.WellKnownRoles.ConfigureAdmin, node_opcua_1.WellKnownRoles.SecurityAdmin])
|
|
35
|
+
},
|
|
36
|
+
{ username: "user2", password: "password2", role: (0, node_opcua_1.makeRoles)([node_opcua_1.WellKnownRoles.AuthenticatedUser, node_opcua_1.WellKnownRoles.Operator]) }
|
|
37
|
+
];
|
|
38
|
+
const userManager = {
|
|
39
|
+
isValidUser(username, password) {
|
|
40
|
+
const uIndex = users.findIndex((x) => x.username === username);
|
|
41
|
+
if (uIndex < 0) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
if (users[uIndex].password !== password) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
},
|
|
49
|
+
getUserRoles(username) {
|
|
50
|
+
const uIndex = users.findIndex((x) => x.username === username);
|
|
51
|
+
if (uIndex < 0) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
const userRole = users[uIndex].role;
|
|
55
|
+
return userRole;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
function main() {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
const argv = yield yargs.wrap(132).option("port", {
|
|
61
|
+
alias: "p",
|
|
62
|
+
default: "26543",
|
|
63
|
+
describe: "port to listen"
|
|
64
|
+
}).argv;
|
|
65
|
+
const port = parseInt(argv.port, 10) || 26555;
|
|
66
|
+
const serverOptions = {
|
|
67
|
+
port,
|
|
68
|
+
nodeset_filename: [node_opcua_1.nodesets.standard],
|
|
69
|
+
serverCertificateManager: certificateManager,
|
|
70
|
+
userCertificateManager: certificateManager,
|
|
71
|
+
userManager
|
|
72
|
+
};
|
|
73
|
+
process.title = "Node OPCUA Server on port : " + serverOptions.port;
|
|
74
|
+
const tmpFolder = path.join(__dirname, "../certificates/myApp");
|
|
75
|
+
const applicationGroup = new node_opcua_pki_1.CertificateManager({
|
|
76
|
+
location: tmpFolder
|
|
77
|
+
});
|
|
78
|
+
yield applicationGroup.initialize();
|
|
79
|
+
const server = new node_opcua_1.OPCUAServer(serverOptions);
|
|
80
|
+
console.log(" Configuration rootdir = ", server.serverCertificateManager.rootDir);
|
|
81
|
+
console.log(chalk.yellow(" server PID :"), process.pid);
|
|
82
|
+
yield server.initialize();
|
|
83
|
+
const addressSpace = server.engine.addressSpace;
|
|
84
|
+
// to do: expose new nodeid here
|
|
85
|
+
const ns = addressSpace.getNamespaceIndex("http://yourorganisation.org/my_data_type/");
|
|
86
|
+
yield (0, node_opcua_server_configuration_1.installPushCertificateManagement)(addressSpace, {
|
|
87
|
+
applicationGroup: server.serverCertificateManager,
|
|
88
|
+
userTokenGroup: server.userCertificateManager,
|
|
89
|
+
applicationUri: server.serverInfo.applicationUri
|
|
90
|
+
});
|
|
91
|
+
console.log("Certificate rejected folder ", server.serverCertificateManager.rejectedFolder);
|
|
92
|
+
try {
|
|
93
|
+
yield server.start();
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
console.log(" Server failed to start ... exiting");
|
|
97
|
+
process.exit(-3);
|
|
98
|
+
}
|
|
99
|
+
const endpointUrl = server.getEndpointUrl();
|
|
100
|
+
console.log(chalk.yellow(" server on port :"), chalk.cyan(server.endpoints[0].port.toString()));
|
|
101
|
+
console.log(chalk.yellow(" endpointUrl :"), chalk.cyan(endpointUrl));
|
|
102
|
+
console.log(chalk.yellow("\n server now waiting for connections. CTRL+C to stop"));
|
|
103
|
+
process.once("SIGINT", () => __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
// only work on linux apparently
|
|
105
|
+
yield server.shutdown(1000);
|
|
106
|
+
console.log(chalk.red.bold(" shutting down completed "));
|
|
107
|
+
process.exit(-1);
|
|
108
|
+
}));
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
main();
|
|
112
|
+
//# sourceMappingURL=server_with_push_certificate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server_with_push_certificate.js","sourceRoot":"","sources":["../bin/server_with_push_certificate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_client_ts.js","sourceRoot":"","sources":["../bin/simple_client_ts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
// tslint:disable:no-console
|
|
14
|
+
// this script queries the discovery server and display the discovery urls
|
|
15
|
+
const chalk = require("chalk");
|
|
16
|
+
const node_opcua_1 = require("node-opcua");
|
|
17
|
+
function main() {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
const discovery_server_endpointUrl = "opc.tcp://localhost:4840/UADiscovery";
|
|
20
|
+
console.log("Interrogating ", discovery_server_endpointUrl);
|
|
21
|
+
try {
|
|
22
|
+
const { servers, endpoints } = yield (0, node_opcua_1.findServers)(discovery_server_endpointUrl);
|
|
23
|
+
for (const server of servers) {
|
|
24
|
+
console.log(" applicationUri:", chalk.cyan.bold(server.applicationUri));
|
|
25
|
+
console.log(" productUri:", chalk.cyan.bold(server.productUri));
|
|
26
|
+
console.log(" applicationName:", chalk.cyan.bold(server.applicationName.text));
|
|
27
|
+
console.log(" type:", chalk.cyan.bold(node_opcua_1.ApplicationType[server.applicationType]));
|
|
28
|
+
console.log(" gatewayServerUri:", server.gatewayServerUri ? chalk.cyan.bold(server.gatewayServerUri) : "");
|
|
29
|
+
console.log("discoveryProfileUri:", server.discoveryProfileUri ? chalk.cyan.bold(server.discoveryProfileUri) : "");
|
|
30
|
+
console.log(" discoveryUrls:");
|
|
31
|
+
for (const discoveryUrl of server.discoveryUrls) {
|
|
32
|
+
console.log(" " + chalk.cyan.bold(discoveryUrl));
|
|
33
|
+
}
|
|
34
|
+
console.log("-------------");
|
|
35
|
+
}
|
|
36
|
+
for (const endpoint of endpoints) {
|
|
37
|
+
console.log(endpoint.endpointUrl.toString(), endpoint.securityLevel, endpoint.securityPolicyUri, node_opcua_1.MessageSecurityMode[endpoint.securityMode]);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err instanceof Error) {
|
|
42
|
+
console.log("err ", err.message);
|
|
43
|
+
}
|
|
44
|
+
process.exit(-2);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
main();
|
|
49
|
+
//# sourceMappingURL=simple_findservers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_findservers.js","sourceRoot":"","sources":["../bin/simple_findservers.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,4BAA4B;AAC5B,0EAA0E;AAC1E,+BAA+B;AAC/B,2CAA+E;AAE/E,SAAe,IAAI;;QACf,MAAM,4BAA4B,GAAG,sCAAsC,CAAC;QAE5E,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAC;QAE5D,IAAI;YACA,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,wBAAW,EAAC,4BAA4B,CAAC,CAAC;YAC/E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAe,CAAC,CAAC,CAAC;gBAC7E,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAW,CAAC,CAAC,CAAC;gBACzE,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAgB,CAAC,IAAK,CAAC,CAAC,CAAC;gBACpF,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4BAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC9F,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7G,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnH,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBAEpC,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,aAAc,EAAE;oBAC9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAa,CAAC,CAAC,CAAC;iBACxE;gBACD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;aAChC;YAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAC9B,OAAO,CAAC,GAAG,CACP,QAAQ,CAAC,WAAY,CAAC,QAAQ,EAAE,EAChC,QAAQ,CAAC,aAAa,EACtB,QAAQ,CAAC,iBAAiB,EAC1B,gCAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC7C,CAAC;aACL;SACJ;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,YAAY,KAAK,EAAE;gBACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;aACpC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACpB;IACL,CAAC;CAAA;AAED,IAAI,EAAE,CAAC"}
|