Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
securityMode: MessageSecurityMode,
securityPolicy: SecurityPolicy,
options?: EndpointDescriptionParams
) {
if (!options) {
options = { hostname: getFullyQualifiedDomainName() };
}
options.allowAnonymous = (options.allowAnonymous === undefined) ? true : options.allowAnonymous;
// istanbul ignore next
if (securityMode === MessageSecurityMode.None && securityPolicy !== SecurityPolicy.None) {
throw new Error(" invalid security ");
}
// istanbul ignore next
if (securityMode !== MessageSecurityMode.None && securityPolicy === SecurityPolicy.None) {
throw new Error(" invalid security ");
}
//
const port = this.port;
// resource Path is a string added at the end of the url such as "/UA/Server"
const resourcePath = (options.resourcePath || "").replace(/\\/g, "/");
assert(resourcePath.length === 0 || resourcePath.charAt(0) === "/");
const hostname = options.hostname || getFullyQualifiedDomainName();
const endpointUrl = `opc.tcp://${hostname}:${port}${resourcePath}`;
const endpoint_desc = this.getEndpointDescription(securityMode, securityPolicy, endpointUrl);
securityMode: MessageSecurityMode,
securityPolicy: SecurityPolicy,
options?: EndpointDescriptionParams
) {
if (!options) {
options = { hostname: getFullyQualifiedDomainName() };
}
options.allowAnonymous = (options.allowAnonymous === undefined) ? true : options.allowAnonymous;
// istanbul ignore next
if (securityMode === MessageSecurityMode.None && securityPolicy !== SecurityPolicy.None) {
throw new Error(" invalid security ");
}
// istanbul ignore next
if (securityMode !== MessageSecurityMode.None && securityPolicy === SecurityPolicy.None) {
throw new Error(" invalid security ");
}
//
const port = this.port;
// resource Path is a string added at the end of the url such as "/UA/Server"
const resourcePath = (options.resourcePath || "").replace(/\\/g, "/");
assert(resourcePath.length === 0 || resourcePath.charAt(0) === "/", "resourcePath should start with /");
const hostname = options.hostname || getFullyQualifiedDomainName();
const endpointUrl = `opc.tcp://${hostname}:${port}${resourcePath}`;
const endpoint_desc = this.getEndpointDescription(securityMode, securityPolicy, endpointUrl);
public addEndpointDescription(
securityMode: MessageSecurityMode,
securityPolicy: SecurityPolicy,
options?: EndpointDescriptionParams
) {
if (!options) {
options = { hostname: getFullyQualifiedDomainName() };
}
options.allowAnonymous = (options.allowAnonymous === undefined) ? true : options.allowAnonymous;
// istanbul ignore next
if (securityMode === MessageSecurityMode.None && securityPolicy !== SecurityPolicy.None) {
throw new Error(" invalid security ");
}
// istanbul ignore next
if (securityMode !== MessageSecurityMode.None && securityPolicy === SecurityPolicy.None) {
throw new Error(" invalid security ");
}
//
const port = this.port;
// resource Path is a string added at the end of the url such as "/UA/Server"
const resourcePath = (options.resourcePath || "").replace(/\\/g, "/");
assert(resourcePath.length === 0 || resourcePath.charAt(0) === "/", "resourcePath should start with /");
const hostname = options.hostname || getFullyQualifiedDomainName();
public addEndpointDescription(
securityMode: MessageSecurityMode,
securityPolicy: SecurityPolicy,
options?: EndpointDescriptionParams
) {
if (!options) {
options = { hostname: getFullyQualifiedDomainName() };
}
options.allowAnonymous = (options.allowAnonymous === undefined) ? true : options.allowAnonymous;
// istanbul ignore next
if (securityMode === MessageSecurityMode.None && securityPolicy !== SecurityPolicy.None) {
throw new Error(" invalid security ");
}
// istanbul ignore next
if (securityMode !== MessageSecurityMode.None && securityPolicy === SecurityPolicy.None) {
throw new Error(" invalid security ");
}
//
const port = this.port;
// resource Path is a string added at the end of the url such as "/UA/Server"
const resourcePath = (options.resourcePath || "").replace(/\\/g, "/");
assert(resourcePath.length === 0 || resourcePath.charAt(0) === "/");
const hostname = options.hostname || getFullyQualifiedDomainName();
securityMode: MessageSecurityMode,
securityPolicy: SecurityPolicy,
endpointUrl: string | undefined,
endpoint: EndpointDescription
): boolean {
assert(endpoint instanceof EndpointDescription);
const endpoint_securityPolicy = fromURI(endpoint.securityPolicyUri);
if (endpointUrl && endpoint.endpointUrl! !== endpointUrl) {
return false;
}
return (endpoint.securityMode === securityMode && endpoint_securityPolicy === securityPolicy);
}
const defaultSecurityModes = [
MessageSecurityMode.None,
MessageSecurityMode.Sign,
MessageSecurityMode.SignAndEncrypt
];
const defaultSecurityPolicies = [
SecurityPolicy.Basic128Rsa15,
SecurityPolicy.Basic256,
// xx UNUSED!! SecurityPolicy.Basic256Rsa15,
SecurityPolicy.Basic256Sha256
];
public addRestrictedEndpointDescription(options: EndpointDescriptionParams) {
options = _.clone(options);
options.restricted = true;
return this.addEndpointDescription(MessageSecurityMode.None, SecurityPolicy.None, options);
}
endpoints = endpoints.filter((e: EndpointDescription) => {
return e.securityMode === MessageSecurityMode.None;
});
}
public addRestrictedEndpointDescription(options: EndpointDescriptionParams) {
options = _.clone(options);
options.restricted = true;
return this.addEndpointDescription(MessageSecurityMode.None, SecurityPolicy.None, options);
}
let hostnames: string[] = [ defaultHostname ];
options.alternateHostname = options.alternateHostname || [];
if (typeof options.alternateHostname === "string") {
options.alternateHostname = [ options.alternateHostname];
}
hostnames = _.uniq(hostnames.concat(options.alternateHostname as string[]));
for (const alternateHostname of hostnames ) {
const optionsE = options as EndpointDescriptionParams;
optionsE.hostname = alternateHostname;
if (options.securityModes.indexOf(MessageSecurityMode.None) >= 0) {
this.addEndpointDescription(MessageSecurityMode.None, SecurityPolicy.None, optionsE);
} else {
if (!options.disableDiscovery) {
this.addRestrictedEndpointDescription(optionsE);
}
}
for (const securityMode of options.securityModes) {
if (securityMode === MessageSecurityMode.None) {
continue;
}
for (const securityPolicy of options.securityPolicies) {
if (securityPolicy === SecurityPolicy.None) {
continue;
}
this.addEndpointDescription(securityMode, securityPolicy, optionsE);
}
}
const defaultHostname = options.hostname || getFullyQualifiedDomainName();
let hostnames: string[] = [ defaultHostname ];
options.alternateHostname = options.alternateHostname || [];
if (typeof options.alternateHostname === "string") {
options.alternateHostname = [ options.alternateHostname];
}
hostnames = _.uniq(hostnames.concat(options.alternateHostname as string[]));
for (const alternateHostname of hostnames ) {
const optionsE = options as EndpointDescriptionParams;
optionsE.hostname = alternateHostname;
if (options.securityModes.indexOf(MessageSecurityMode.None) >= 0) {
this.addEndpointDescription(MessageSecurityMode.None, SecurityPolicy.None, optionsE);
} else {
if (!options.disableDiscovery) {
this.addRestrictedEndpointDescription(optionsE);
}
}
for (const securityMode of options.securityModes) {
if (securityMode === MessageSecurityMode.None) {
continue;
}
for (const securityPolicy of options.securityPolicies) {
if (securityPolicy === SecurityPolicy.None) {
continue;
}
this.addEndpointDescription(securityMode, securityPolicy, optionsE);
}