def __init__(self, process, config, response_class): global sg_instance sg_instance = self self.name = "service_gateway" self.process = process self.config = config self.response_class = response_class self.gateway_base_url = process.gateway_base_url self.develop_mode = self.config.get_safe(CFG_PREFIX + ".develop_mode") is True self.require_login = self.config.get_safe(CFG_PREFIX + ".require_login") is True self.token_from_session = self.config.get_safe( CFG_PREFIX + ".token_from_session") is True # Optional list of trusted originators can be specified in config. self.trusted_originators = self.config.get_safe(CFG_PREFIX + ".trusted_originators") if not self.trusted_originators: self.trusted_originators = None log.info( "Service Gateway will not check requests against trusted originators since none are configured." ) # Service screening self.service_blacklist = self.config.get_safe( CFG_PREFIX + ".service_blacklist") or [] self.service_whitelist = self.config.get_safe( CFG_PREFIX + ".service_whitelist") or [] self.no_login_whitelist = set( self.config.get_safe(CFG_PREFIX + ".no_login_whitelist") or []) self.set_cors_headers = self.config.get_safe(CFG_PREFIX + ".set_cors") is True self.strict_types = self.config.get_safe(CFG_PREFIX + ".strict_types") is True # Swagger spec generation support self.swagger_cfg = self.config.get_safe(CFG_PREFIX + ".swagger_spec") or {} self._swagger_gen = None if self.swagger_cfg.get("enable", None) is True: self._swagger_gen = SwaggerSpecGenerator(config=self.swagger_cfg) # Get the user_cache_size self.user_cache_size = self.config.get_safe( CFG_PREFIX + ".user_cache_size", DEFAULT_USER_CACHE_SIZE) # Initialize an LRU Cache to keep user roles cached for performance reasons #maxSize = maximum number of elements to keep in cache #maxAgeMs = oldest entry to keep self.user_role_cache = LRUCache(self.user_cache_size, 0, 0) self.request_callback = None self.log_errors = self.config.get_safe(CFG_PREFIX + ".log_errors", True) self.rr_client = ResourceRegistryServiceProcessClient( process=self.process) self.idm_client = IdentityManagementServiceProcessClient( process=self.process) self.org_client = OrgManagementServiceProcessClient( process=self.process)
def on_init(self): #defaults self.http_server = None #retain a pointer to this object for use in ProcessRPC calls global service_gateway_instance ###### # to prevent cascading failure, here's an attempted hack if service_gateway_instance is not None and service_gateway_instance.http_server is not None: service_gateway_instance.http_server.stop() # end hack ###### service_gateway_instance = self self.server_hostname = self.CFG.get_safe( 'container.service_gateway.web_server.hostname', DEFAULT_WEB_SERVER_HOSTNAME) self.server_port = self.CFG.get_safe( 'container.service_gateway.web_server.port', DEFAULT_WEB_SERVER_PORT) self.web_server_enabled = self.CFG.get_safe( 'container.service_gateway.web_server.enabled', True) self.web_logging = self.CFG.get_safe( 'container.service_gateway.web_server.log') self.log_errors = self.CFG.get_safe( 'container.service_gateway.log_errors', True) #Optional list of trusted originators can be specified in config. self.trusted_originators = self.CFG.get_safe( 'container.service_gateway.trusted_originators') if not self.trusted_originators: self.trusted_originators = None log.info( "Service Gateway will not check requests against trusted originators since none are configured." ) #Get the user_cache_size self.user_cache_size = self.CFG.get_safe( 'container.service_gateway.user_cache_size', DEFAULT_USER_CACHE_SIZE) #Initialize an LRU Cache to keep user roles cached for performance reasons #maxSize = maximum number of elements to keep in cache #maxAgeMs = oldest entry to keep self.user_role_cache = LRUCache(self.user_cache_size, 0, 0) #Start the gevent web server unless disabled if self.web_server_enabled: log.info("Starting service gateway on %s:%s", self.server_hostname, self.server_port) self.start_service(self.server_hostname, self.server_port) #Configure subscriptions for user_cache events self.user_role_event_subscriber = EventSubscriber( event_type=OT.UserRoleModifiedEvent, origin_type="Org", callback=self.user_role_event_callback) self.add_endpoint(self.user_role_event_subscriber) self.user_role_reset_subscriber = EventSubscriber( event_type=OT.UserRoleCacheResetEvent, callback=self.user_role_reset_callback) self.add_endpoint(self.user_role_reset_subscriber)