|
@@ -24,6 +24,25 @@ 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]
|
|
|
+ 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 = ffstatus.resolve_ipblock(item['remote'])
|
|
|
+ if not resolved is None:
|
|
|
+ self.logger.info('Startup: resolved VPN entry \'{0}\' to net \'{1}\'.'.format(item['remote'], resolved['name']))
|
|
|
+ item['remote'] = resolved
|
|
|
+
|
|
|
def parse_url_pathquery(self):
|
|
|
"""Extracts the query parameters from the request path."""
|
|
|
url = re.match(r'^/(?P<path>.*?)(\?(?P<query>.+))?$', self.path.strip())
|
|
@@ -360,8 +379,23 @@ class BatcaveHttpRequestHandler(BaseHTTPRequestHandler):
|
|
|
if not key in storage.data[self.DATAKEY_VPN]: storage.data[self.DATAKEY_VPN][key] = { 'active': {}, 'last': {} }
|
|
|
item = storage.data[self.DATAKEY_VPN][key]
|
|
|
|
|
|
+ # resolve remote addr to its netblock
|
|
|
+ remote_raw = remote
|
|
|
+ remote_resolved = None
|
|
|
+ if not remote is None:
|
|
|
+ remote_resolved = ffstatus.resolve_ipblock(remote)
|
|
|
+ if not remote_resolved is None:
|
|
|
+ self.logger.debug('Resolved IP \'{0}\' to block \'{1}\'.'.format(remote, remote_resolved['name']))
|
|
|
+ remote = remote_resolved
|
|
|
+
|
|
|
if action == 'establish':
|
|
|
- item['active'][gw] = { 'establish': time.time(), 'peer': peername, 'remote': remote }
|
|
|
+ item['active'][gw] = {
|
|
|
+ 'establish': time.time(),
|
|
|
+ 'peer': peername,
|
|
|
+ 'remote': remote,
|
|
|
+ 'remote_raw': remote_raw,
|
|
|
+ }
|
|
|
+
|
|
|
elif action == 'disestablish':
|
|
|
active = {}
|
|
|
if gw in item['active']:
|
|
@@ -422,6 +456,8 @@ class BatcaveHttpRequestHandler(BaseHTTPRequestHandler):
|
|
|
ip = ''
|
|
|
if t in item and gw in item[t]:
|
|
|
ip = item[t][gw]['remote'] if 'remote' in item[t][gw] else ''
|
|
|
+ if isinstance(ip, dict):
|
|
|
+ ip = ip['name']
|
|
|
self.wfile.write('<td title="' + ip + '">' + ('✓' if len(ip) > 0 else '×') + '</td>')
|
|
|
|
|
|
self.wfile.write('</tr>\n')
|