12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/usr/bin/env python3
- """Checks that the peering details in this repo conform to a few basic rules."""
- import json
- import os
- import sys
- REQUIRED_FIELDS = ['publicKey', 'password', 'contact', 'peerName']
- RECOMMENDED_FIELDS = ['gpg', 'login']
- RED = '\x1b[01;31m'
- GREEN = '\x1b[01;32m'
- YELLOW = '\x1b[01;33m'
- END = '\x1b[0m'
- def validate(path):
- """Test a single set of peering creds."""
- print("Validating %s" % path)
- try:
- creds = open(path).read()
- peers = json.loads(creds)
- # Check formatting
- pretty = json.dumps(peers, sort_keys=True, indent=4, separators=(',', ':'))
- pretty = "%s\n" % pretty
- formatting = True
- if pretty != creds:
- if "--clean" in sys.argv:
- with open(path, 'w') as outfile:
- outfile.write(pretty)
- print(" %sJSON in %s has been fixed.%s" % (YELLOW, path, END))
- else:
- print(" %sJSON in %s is NOT properly formatted! This is really easy to fix!"
- " just run tests.py --clean.%s" % (YELLOW, path, END))
- formatting = False
- hosts = peers.keys()
- for host in hosts:
- for field in REQUIRED_FIELDS:
- if field not in peers[host]:
- print(" %sHost %s is missing the required field %s%s" % (RED, host,
- field, END))
- return False
- for field in RECOMMENDED_FIELDS:
- if field not in peers[host]:
- print(" %sHost %s is missing the recommended field %s%s" % (YELLOW, host,
- field, END))
- if formatting:
- return True
- else:
- return False
- except ValueError:
- print(" %sInvalid JSON!%s" % (RED, END))
- return False
- if __name__ == "__main__":
- success = True
- for directory, subdirs, files in os.walk('.'):
- if len(files) > 0:
- if directory != '.' and not directory.startswith('./.git'):
- for f in files:
- result = validate("%s/%s" % (directory, f))
- if not result:
- success = False
- if not success:
- sys.exit(1)
|