def _enable_setup_mode(self, session_user, params): id = params.pop('message_id') if 'admin' not in session_user['groups']: _log.debug('Returning json_error enable_setup_mode') return jsonrpc.json_error( id, UNAUTHORIZED, "Admin access is required to enable setup mode") auth_file = AuthFile() entries = auth_file.find_by_credentials(".*") if len(entries) > 0: return "SUCCESS" entry = AuthEntry(credentials="/.*/", comments="Un-Authenticated connections allowed here", user_id="unknown") auth_file.add(entry) return "SUCCESS"
def _periodic_attempt_registration(self): _log.debug("periodic attempt to register.") if self._scheduled_connection_event is not None: # This won't hurt anything if we are canceling ourselves. self._scheduled_connection_event.cancel() if not self.enable_registration: _log.debug('Registration of vcp is not enabled.') next_update_time = self._next_update_time() self._scheduled_connection_event = self.core.schedule( next_update_time, self._periodic_attempt_registration) return try: vc = self.get_vc_connection() if vc is None: _log.debug("vc not connected") return local_address = self.current_config.get( 'local_external_addresses')[0] if not vc.call("is_registered", address=local_address): _log.debug("platform agent is not registered.") self.registration_state = RegistrationStates.NotRegistered if self.registration_state == RegistrationStates.NotRegistered: vc_agent_publickey = vc.call("get_publickey") _log.debug( 'vc agent publickey is {}'.format(vc_agent_publickey)) assert vc_agent_publickey and len(vc_agent_publickey) == 43 authfile = AuthFile() # find_by_credentials returns a list. entries = authfile.find_by_credentials(vc_agent_publickey) if entries is not None and len(entries) > 0: entry = entries[0] if "manage" not in entry.capabilities: _log.debug("Updating vc capability.") entry.add_capabilities("manager") authfile.add(entry, overwrite=True) else: _log.debug('Adding vc publickey to auth') entry = AuthEntry(credentials=vc_agent_publickey, capabilities=['manager'], comments="Added by VCP", user_id="vc") authfile = AuthFile() authfile.add(entry) local_address = self.current_config.get( 'local_external_addresses')[0] local_name = self.current_config.get('local_instance_name', local_address) local_serverkey = self.current_config.get('local_serverkey') vc_address = self.current_config.get( 'volttron_central_address') _log.debug("Registering with vc from vcp.") _log.debug("Instance is named: {}".format(local_name)) _log.debug("Local Address is: {}".format(local_address)) _log.debug("VC Address is: {}".format(vc_address)) vc.call('register_instance', address=local_address, display_name=local_name, vcpserverkey=local_serverkey, vcpagentkey=self.core.publickey) else: _log.debug("Current platform registration state: {}".format( self.registration_state)) except Unreachable as e: _log.error("Couldn't connect to volttron.central. {}".format( self.current_config.get('volttron_central_address'))) except ValueError as e: _log.error(e.message) except Exception as e: _log.error("Error: {}".format(e.args)) except gevent.Timeout as e: _log.error("timout occured connecting to remote platform.") finally: _log.debug('Scheduling next periodic call') next_update_time = self._next_update_time() self._scheduled_connection_event = self.core.schedule( next_update_time, self._periodic_attempt_registration)