소스 검색

server: check VPN data for proper remote entry only on startup and not per request

Helge Jung 9 년 전
부모
커밋
7dae34d782
1개의 변경된 파일28개의 추가작업 그리고 27개의 파일을 삭제
  1. 28 27
      ffstatus/server.py

+ 28 - 27
ffstatus/server.py

@@ -24,33 +24,6 @@ class BatcaveHttpRequestHandler(BaseHTTPRequestHandler):
 		self.logger = logging.getLogger('API')
 		BaseHTTPRequestHandler.__init__(self, request, client_address, server)
 
-		# check all entries for a proper 'remote' entry
-		vpn = self.server.storage.data[self.DATAKEY_VPN]
-		init_vpn_cache = {}
-		for key in vpn:
-			if not isinstance(vpn[key], dict):
-				continue
-			for mode in vpn[key]:
-				if not isinstance(vpn[key][mode], dict):
-					continue
-				for gw in vpn[key][mode]:
-					if not isinstance(vpn[key][mode][gw], dict):
-						continue
-					item = vpn[key][mode][gw]
-					if 'remote' in item and not 'remote_raw' in item:
-						item['remote_raw'] = item['remote']
-						resolved = None
-						if item['remote'] in init_vpn_cache:
-							resolved = init_vpn_cache[item['remote']]
-						else:
-							resolved = ffstatus.resolve_ipblock(item['remote'])
-							init_vpn_cache[item['remote']] = resolved
-							if not resolved is None:
-								self.logger.info('Startup: resolved VPN entry \'{0}\' to net \'{1}\'.'.format(item['remote'], resolved['name']))
-						if not resolved is None:
-							item['remote'] = resolved
-		self.server.storage.save()
-
 	def parse_url_pathquery(self):
 		"""Extracts the query parameters from the request path."""
 		url = re.match(r'^/(?P<path>.*?)(\?(?P<query>.+))?$', self.path.strip())
@@ -558,6 +531,34 @@ class ApiServer(ThreadingMixIn, HTTPServer):
 		HTTPServer.__init__(self, endpoint, BatcaveHttpRequestHandler)
 		self.storage = storage
 
+		# check all entries for a proper 'remote' entry
+		vpn = storage.data[BatcaveHttpRequestHandler.DATAKEY_VPN] if BatcaveHttpRequestHandler.DATAKEY_VPN in storage.data else {}
+		init_vpn_cache = {}
+		for key in vpn:
+			if not isinstance(vpn[key], dict):
+				continue
+			for mode in vpn[key]:
+				if not isinstance(vpn[key][mode], dict):
+					continue
+				for gw in vpn[key][mode]:
+					if not isinstance(vpn[key][mode][gw], dict):
+						continue
+					item = vpn[key][mode][gw]
+					if 'remote' in item and not 'remote_raw' in item:
+						item['remote_raw'] = item['remote']
+						resolved = None
+						if item['remote'] in init_vpn_cache:
+							resolved = init_vpn_cache[item['remote']]
+						else:
+							resolved = ffstatus.resolve_ipblock(item['remote'])
+							init_vpn_cache[item['remote']] = resolved
+							if not resolved is None:
+								self.logger.info('Startup: resolved VPN entry \'{0}\' to net \'{1}\'.'.format(item['remote'], resolved['name']))
+						if not resolved is None:
+							item['remote'] = resolved
+		storage.save()
+
+
 	def __str__(self):
 		return 'ApiServer on {0}'.format(self.server_address)