def __init__(self, shelffile=None, iserver=None): self.logger = logging.getLogger(__name__) self.endpoint = urlparse("opc.tcp://0.0.0.0:4840/freeopcua/server/") self._application_uri = "urn:freeopcua:python:server" self.product_uri = "urn:freeopcua.github.no:python:server" self.name = "FreeOpcUa Python Server" self.application_type = ua.ApplicationType.ClientAndServer self.default_timeout = 3600000 if iserver is not None: self.iserver = iserver else: self.iserver = InternalServer(shelffile) self.bserver = None self._discovery_clients = {} self._discovery_period = 60 self.certificate = None self.private_key = None self._policies = [] self.nodes = Shortcuts(self.iserver.isession) # setup some expected values self.set_application_uri(self._application_uri) sa_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerArray)) sa_node.set_value([self._application_uri]) # enable all endpoints by default self._security_policy = [#"None", "Basic128Rsa15_Sign", # "Basic128Rsa15_SignAndEncrypt", "Basic256_Sign", "Basic256_SignAndEncrypt"] self._policyIDs = ["Anonymous", "Basic256", "Basic128", "Username"]
def __init__(self, shelffile=None, iserver=None): self.logger = logging.getLogger(__name__) self.endpoint = urlparse("opc.tcp://0.0.0.0:4840/freeopcua/server/") self._application_uri = "urn:freeopcua:python:server" self.product_uri = "urn:freeopcua.github.io:python:server" self.name = "FreeOpcUa Python Server" self.manufacturer_name = "FreeOpcUa" self.application_type = ua.ApplicationType.ClientAndServer self.default_timeout = 3600000 if iserver is not None: self.iserver = iserver else: self.iserver = InternalServer(shelffile = shelffile) self.bserver = None self._policies = [] self.nodes = Shortcuts(self.iserver.isession) # setup some expected values self.set_application_uri(self._application_uri) sa_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerArray)) sa_node.set_value([self._application_uri]) self.set_build_info(self.product_uri, self.manufacturer_name, self.name, "1.0pre", "0", datetime.now()) # enable all endpoints by default self.certificate = None self.private_key = None self.user_manager = UserManager(parent = self) self._security_policy = [ ua.SecurityPolicyType.NoSecurity, ua.SecurityPolicyType.Basic256Sha256_SignAndEncrypt, ua.SecurityPolicyType.Basic256Sha256_Sign ] self._policyIDs = ["Anonymous", "Basic256Sha256", "Username"]
def setUpClass(cls): iserver = InternalServer(session_cls=CustomInternalSession) cls.srv = Server(iserver=iserver) iserver._parent = cls.srv cls.srv.set_endpoint('opc.tcp://127.0.0.1:{0:d}'.format(cls.PORT_NUM2)) cls.srv.start() # start admin client # short timeout since we want it to fail cls.clt = Client('opc.tcp://[email protected]:{0:d}'.format( cls.PORT_NUM2), timeout=1) cls.clt.connect() cls.opc = cls.clt
def __init__(self, shelffile=None, iserver=None): self.logger = logging.getLogger(__name__) self.endpoint = urlparse("opc.tcp://0.0.0.0:4840/freeopcua/server/") self._application_uri = "urn:freeopcua:python:server" self.product_uri = "urn:freeopcua.github.io:python:server" self.name = "FreeOpcUa Python Server" self.manufacturer_name = "FreeOpcUa" self.application_type = ua.ApplicationType.ClientAndServer self.default_timeout = 3600000 if iserver is not None: self.iserver = iserver else: self.iserver = InternalServer(shelffile) self.bserver = None self._discovery_clients = {} self._discovery_period = 60 self.certificate = None self.private_key = None self._policies = [] self.nodes = Shortcuts(self.iserver.isession) # setup some expected values self.set_application_uri(self._application_uri) sa_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerArray)) sa_node.set_value([self._application_uri]) status_node = self.get_node(ua.NodeId( ua.ObjectIds.Server_ServerStatus)) build_node = self.get_node( ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo)) status = ua.ServerStatusDataType() status.BuildInfo.ProductUri = self.product_uri status.BuildInfo.ManufacturerName = self.manufacturer_name status.BuildInfo.ProductName = self.name status.BuildInfo.SoftwareVersion = "1.0pre" status.BuildInfo.BuildNumber = "0" status.BuildInfo.BuildDate = datetime.now() status.SecondsTillShutdown = 0 status_node.set_value(status) build_node.set_value(status.BuildInfo) # enable all endpoints by default self._security_policy = [ ua.SecurityPolicyType.NoSecurity, ua.SecurityPolicyType.Basic128Rsa15_SignAndEncrypt, ua.SecurityPolicyType.Basic128Rsa15_Sign, ua.SecurityPolicyType.Basic256_SignAndEncrypt, ua.SecurityPolicyType.Basic256_Sign ] self._policyIDs = ["Anonymous", "Basic256", "Basic128", "Username"]
def __init__(self): self.logger = logging.getLogger(__name__) self.endpoint = urlparse("opc.tcp://0.0.0.0:4840/freeopcua/server/") self.application_uri = "urn:freeopcua:python:server" self.product_uri = "urn:freeopcua.github.no:python:server" self.name = "FreeOpcUa Python Server" self.application_type = ua.ApplicationType.ClientAndServer self.default_timeout = 3600000 self.iserver = InternalServer() self.bserver = None self._discovery_clients = {} self._discovery_period = 60 self.certificate = None self.private_key = None self._policies = [] # setup some expected values self.register_namespace(self.application_uri) sa_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerArray)) sa_node.set_value([self.application_uri])
def __init__(self, name, shared): super().__init__(name, shared) self.logger = logging.getLogger(self.name) self.logger.info("init") self.shared.config.set_hidden_value(self.name, "user") self.shared.config.set_hidden_value(self.name, "password") self.shared.config.set_hidden_value(self.name, "password_hash") def config(key, val): return self.shared.config.config(self.name, key, val) endpoint = config("endpoint", "no_endpoint") certificate = config("certificate", "") private_key = config("private_key", "") name = config("name", "FreeOpcUa Python Server") uri = config("uri", "http://examples.freeopcua.github.io") root_object_name = config("root_object_name", "TEST") separator = config("separator", ".") namespace = config("namespace", 2) auto_build_folders = config("auto_build_folders", 0) self.oldnew = config("oldnew_comparision", 0) self.debug_statistics = config("debug_statistics", 0) admin_username = config("user", "admin") admin_password = config("password", "admin") admin_password_hash = config("password_hash", "").replace("$$", "$") security_ids = [] anonymous_on = config("anonymous_on", 0) username_on = config("username_on", 1) certificate_on = config("certificate_basic256sha256_on", 0) if anonymous_on: security_ids.append("Anonymous") if username_on: security_ids.append("Username") if certificate_on: security_ids.append("Basic256Sha256") security_policy = [] if config("nosecurity_on", 1): security_policy.append(ua.SecurityPolicyType.NoSecurity) if config("basic128rsa15_sign_on", 0): security_policy.append(ua.SecurityPolicyType.Basic128Rsa15_Sign) if config("basic128rsa15_signandencrypt_on", 0): security_policy.append( ua.SecurityPolicyType.Basic128Rsa15_SignAndEncrypt) if config("basic256_sign_on", 0): security_policy.append(ua.SecurityPolicyType.Basic256_Sign) if config("basic256_signandencrypt_on", 0): security_policy.append( ua.SecurityPolicyType.Basic256_SignAndEncrypt) if config("basic256sha256_sign_on", 1): security_policy.append(ua.SecurityPolicyType.Basic256Sha256_Sign) if config("basic256sha256_signandencrypt_on", 1): security_policy.append( ua.SecurityPolicyType.Basic256Sha256_SignAndEncrypt) initial_values_is_quality_good = config( "initial_values_is_quality_good", 0) if anonymous_on: server = CustomServer(iserver=InternalServer( session_cls=CustomAnonInternalSession)) else: server = CustomServer(iserver=InternalServer( session_cls=CustomInternalSession)) server.iserver._parent = server server.set_application_uri(uri) server.name = name server.set_endpoint(endpoint) server.allow_remote_admin(False) if certificate and private_key: server.load_certificate(str(certificate)) server.load_private_key(str(private_key)) if security_ids: server.set_security_IDs(security_ids) if security_policy: server.set_security_policy(security_policy) def custom_user_manager(isession, userName, password): if userName != admin_username: return False if admin_password_hash: if werkzeug.security.check_password_hash( admin_password_hash, password): return True else: # fallback to plaintext if password == admin_password: return True return False if username_on: server.user_manager.set_user_manager(custom_user_manager) idx = server.register_namespace(uri) objects = server.get_objects_node() root = objects.add_object(idx, root_object_name) self.server = server self.objects = objects self.root = root self.sep = separator self.ns = namespace self.auto_build_folders = auto_build_folders self.items = [] self.subscription = None if initial_values_is_quality_good: self.initial_status_code = ua.StatusCodes.Good else: self.initial_status_code = ua.StatusCodes.BadWaitingForInitialData self.initial_timestamp = datetime.datetime.utcnow()