mirror of
https://github.com/mainflux/mainflux.git
synced 2025-05-14 19:29:11 +08:00

* NOISSUE- Add OPC-UA adapter Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * NOISSUE - Add opc-adapter PoC, docker and vendor Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Convert OPC messages to SenML Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add gopcua package Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * lora-adapter typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add OPC Reader Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Typo fix Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Typo fix Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Update copyright headers Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix reviews Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix reviews Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add opc config Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add all opc envars in the config Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Config typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add route map Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use opcua package instead of opc Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix OPCUA typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm MQTT sub Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Move interefaces to root Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix revieews and typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Update Gopkg.toml Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add all envars into .env Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>
153 lines
7.8 KiB
Go
153 lines
7.8 KiB
Go
// Copyright 2018-2019 opcua authors. All rights reserved.
|
||
// Use of this source code is governed by a MIT-style license that can be
|
||
// found in the LICENSE file.
|
||
|
||
package uasc
|
||
|
||
import (
|
||
"crypto/rsa"
|
||
"time"
|
||
|
||
"github.com/gopcua/opcua/ua"
|
||
)
|
||
|
||
// Config represents a configuration which UASC client/server has in common.
|
||
type Config struct {
|
||
// SecureChannelID is a unique identifier for the SecureChannel assigned by the Server.
|
||
// If a Server receives a SecureChannelId which it does not recognize it shall return an
|
||
// appropriate transport layer error.
|
||
//
|
||
// When a Server starts the first SecureChannelId used should be a value that is likely to
|
||
// be unique after each restart. This ensures that a Server restart does not cause
|
||
// previously connected Clients to accidentally ‘reuse’ SecureChannels that did not belong
|
||
// to them.
|
||
SecureChannelID uint32
|
||
|
||
// SecurityPolicyURI is the URI of the Security Policy used to secure the Message.
|
||
// This field is encoded as a UTF-8 string without a null terminator.
|
||
SecurityPolicyURI string
|
||
|
||
// Certificate is the X.509 v3 Certificate assigned to the sending application Instance.
|
||
// This is a DER encoded blob.
|
||
// The structure of an X.509 v3 Certificate is defined in X.509 v3.
|
||
// The DER format for a Certificate is defined in X690.
|
||
// This indicates what Private Key was used to sign the MessageChunk.
|
||
// The Stack shall close the channel and report an error to the application if
|
||
// the Certificate is too large for the buffer size supported by the
|
||
// transport layer.
|
||
// This field shall be null if the Message is not signed.
|
||
Certificate []byte
|
||
|
||
// LocalKey is a RSA Private Key which will be used to encrypt the OpenSecureChannel
|
||
// messages. It is the key associated with Certificate
|
||
LocalKey *rsa.PrivateKey
|
||
|
||
// Thumbprint is the thumbprint of the X.509 v3 Certificate assigned to the receiving
|
||
// application Instance.
|
||
// The thumbprint is the CertificateDigest of the DER encoded form of the
|
||
// Certificate.
|
||
// This indicates what public key was used to encrypt the MessageChunk.
|
||
// This field shall be null if the Message is not encrypted.
|
||
Thumbprint []byte
|
||
|
||
// RemoteCertificate is the X.509 Certificate for the receiving instance.
|
||
// Used to encrypt the message chunks in the OpenSecureChannel phase.
|
||
RemoteCertificate []byte
|
||
|
||
// SequenceNumber is a monotonically increasing sequence number assigned by the sender to each
|
||
// MessageChunk sent over the SecureChannel.
|
||
SequenceNumber uint32
|
||
|
||
// RequestID is an identifier assigned by the Client to OPC UA request Message. All MessageChunks
|
||
// for the request and the associated response use the same identifier
|
||
RequestID uint32
|
||
|
||
// SecurityMode is The type of security to apply to the messages. The type MessageSecurityMode
|
||
// is defined in 7.15.
|
||
// A SecureChannel may have to be created even if the securityMode is NONE. The exact behaviour
|
||
// depends on the mapping used and is described in the Part 6.
|
||
SecurityMode ua.MessageSecurityMode
|
||
|
||
// SecurityTokenID is a unique identifier for the SecureChannel SecurityToken used to secure the Message.
|
||
// This identifier is returned by the Server in an OpenSecureChannel response Message.
|
||
// If a Server receives a TokenId which it does not recognize it shall return an appropriate
|
||
// transport layer error.
|
||
SecurityTokenID uint32
|
||
|
||
// Lifetime is the requested lifetime, in milliseconds, for the new SecurityToken when the
|
||
// SecureChannel works as client. It specifies when the Client expects to renew the SecureChannel
|
||
// by calling the OpenSecureChannel Service again. If a SecureChannel is not renewed, then all
|
||
// Messages sent using the current SecurityTokens shall be rejected by the receiver.
|
||
// Lifetime can also be the revised lifetime, the lifetime of the SecurityToken in milliseconds.
|
||
// The UTC expiration time for the token may be calculated by adding the lifetime to the createdAt time.
|
||
Lifetime uint32
|
||
|
||
// RequestTimeout is timeout duration for all synchronous requests over SecureChannel.
|
||
// If the Server doesn't respond within RequestTimeout time, Client returns StatusBadTimeout
|
||
RequestTimeout time.Duration
|
||
}
|
||
|
||
// SessionConfig is a set of common configurations used in Session.
|
||
type SessionConfig struct {
|
||
// AuthenticationToken is the secret Session identifier used to verify that the request is
|
||
// associated with the Session. The SessionAuthenticationToken type is defined in 7.31.
|
||
AuthenticationToken *ua.NodeID
|
||
|
||
// ClientDescription is the information that describes the Client application.
|
||
// The type ApplicationDescription is defined in 7.1.
|
||
ClientDescription *ua.ApplicationDescription
|
||
|
||
// ServerEndpoints is the list of Endpoints that the Server supports.
|
||
// The Server shall return a set of EndpointDescriptions available for the serverUri
|
||
// specified in the request. The EndpointDescription type is defined in 7.10. The Client
|
||
// shall verify this list with the list from a DiscoveryEndpoint if it used a
|
||
// DiscoveryEndpoint to fetch the EndpointDescriptions.
|
||
// It is recommended that Servers only include the server.applicationUri, endpointUrl,
|
||
// securityMode, securityPolicyUri, userIdentityTokens, transportProfileUri and
|
||
// securityLevel with all other parameters set to null. Only the recommended
|
||
// parameters shall be verified by the client.
|
||
ServerEndpoints []*ua.EndpointDescription
|
||
|
||
// LocaleIDs is the list of locale ids in priority order for localized strings. The first
|
||
// LocaleId in the list has the highest priority. If the Server returns a localized string
|
||
// to the Client, the Server shall return the translation with the highest priority that
|
||
// it can. If it does not have a translation for any of the locales identified in this list,
|
||
// then it shall return the string value that it has and include the locale id with the
|
||
// string. See Part 3 for more detail on locale ids. If the Client fails to specify at least
|
||
// one locale id, the Server shall use any that it has.
|
||
// This parameter only needs to be specified during the first call to ActivateSession during
|
||
// a single application Session. If it is not specified the Server shall keep using the
|
||
// current localeIds for the Session.
|
||
LocaleIDs []string
|
||
|
||
// UserIdentityToken is the credentials of the user associated with the Client application.
|
||
// The Server uses these credentials to determine whether the Client should be allowed to
|
||
// activate a Session and what resources the Client has access to during this Session.
|
||
// The UserIdentityToken is an extensible parameter type defined in 7.36.
|
||
// The EndpointDescription specifies what UserIdentityTokens the Server shall accept.
|
||
// Null or empty user token shall always be interpreted as anonymous.
|
||
UserIdentityToken interface{}
|
||
|
||
// If the Client specified a user identity token that supports digital signatures, then it
|
||
// shall create a signature and pass it as this parameter. Otherwise the parameter is null.
|
||
// The SignatureAlgorithm depends on the identity token type.
|
||
// The SignatureData type is defined in 7.32.
|
||
UserTokenSignature *ua.SignatureData
|
||
|
||
// If Session works as a client, SessionTimeout is the requested maximum number of milliseconds
|
||
// that a Session should remain open without activity. If the Client fails to issue a Service
|
||
// request within this interval, then the Server shall automatically terminate the Client Session.
|
||
// If Session works as a server, SessionTimeout is an actual maximum number of milliseconds
|
||
// that a Session shall remain open without activity. The Server should attempt to honour the
|
||
// Client request for this parameter,but may negotiate this value up or down to meet its own constraints.
|
||
SessionTimeout time.Duration
|
||
|
||
// Stored version of the password to authenticate against a server
|
||
// todo: storing passwords in memory seems wrong
|
||
AuthPassword string
|
||
|
||
// PolicyURI to use when encrypting secrets for the User Identity Token
|
||
// Could be different from the secure channel's policy
|
||
AuthPolicyURI string
|
||
}
|