Advertisement
Guest User

generate_aliases

a guest
Dec 1st, 2015
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. #!/usr/bin/env python2
  2.  
  3. from __future__ import print_function
  4.  
  5. import json
  6. import os
  7. import sys
  8.  
  9. if len(sys.argv) != 2:
  10. print('usage: ' + sys.argv[0] + ' /path/to/peers')
  11. sys.exit(1)
  12.  
  13. peersDir = sys.argv[1]
  14.  
  15. def normalizeMac(mac):
  16. mac = mac.lower()
  17. normalized = ''
  18.  
  19. n = 0
  20.  
  21. for c in mac:
  22. if c != ':':
  23. if n > 0 and n % 2 == 0:
  24. normalized = normalized + ':'
  25. normalized = normalized + c
  26. n += 1
  27.  
  28. return normalized
  29.  
  30. def toAlias(peer):
  31. alias = {}
  32.  
  33. if not (peer.has_key('name') and peer.has_key('mac')):
  34. return None
  35.  
  36. name = peer['name']
  37. mac = peer['mac']
  38.  
  39. alias['node_id'] = mac.replace(':', '')
  40. alias['hostname'] = name
  41.  
  42. if peer.has_key('geo'):
  43. geo = peer['geo']
  44.  
  45. location = {}
  46.  
  47. if geo.has_key('lon'): location['longitude'] = geo['lon']
  48. if geo.has_key('lat'): location['latitude'] = geo['lat']
  49.  
  50. alias['location'] = location
  51.  
  52. alias['network'] = {}
  53. alias['network']['mesh_interfaces'] = [mac]
  54.  
  55. return alias
  56.  
  57. aliases = []
  58.  
  59. for filename in os.listdir(peersDir):
  60. if len(filename) == 0 or filename[0] == '.':
  61. continue
  62.  
  63. isGateway = False
  64.  
  65. absFilename = peersDir + '/' + filename
  66. if os.path.isfile(absFilename):
  67. peerFile = open(absFilename, 'r')
  68. try:
  69. peerLines = peerFile.readlines()
  70. peer = {}
  71.  
  72. for line in peerLines:
  73. parts = line.split()
  74.  
  75. if len(parts) > 2:
  76. if parts[1] == 'Knotenname:':
  77. peer['name'] = parts[2]
  78.  
  79. elif parts[0] == 'remote':
  80. isGateway = True
  81.  
  82. elif parts[1] == 'MAC:':
  83. peer['mac'] = normalizeMac(parts[2])
  84.  
  85. elif parts[1] == 'Koordinaten:' and len(parts) > 3:
  86. try:
  87. peer['geo'] = {'lat': float(parts[2]), 'lon': float(parts[3])}
  88.  
  89. except ValueError:
  90. print('Error in %s: Invalid coordinates: %s' % (absFilename, parts[2:4]), file = sys.stderr)
  91.  
  92. elif len(parts) == 2 and parts[0] == 'key':
  93. keyParts = parts[1].split('"')
  94. if len(keyParts) > 1:
  95. peer['vpn'] = keyParts[1].lower()
  96.  
  97. if isGateway:
  98. continue
  99.  
  100. alias = toAlias(peer)
  101. if alias:
  102. aliases.append(alias)
  103.  
  104. except Exception as e:
  105. print('Error in %s, ignoring peer: %s' % (absFilename, e), file = sys.stderr)
  106.  
  107. finally:
  108. peerFile.close()
  109.  
  110. print(json.dumps(aliases))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement