from flask import request from IPy import IP import ddns.backend.dnsupdate import ddns.auth import ddns.cfg_parser @ddns.auth.require_auth def dyn_com(): if request.method != 'GET': return "badagent" if not request.args.has_key('hostname'): return "nohost" if len(request.args.getlist('hostname')) > 1: return "numhost" if not request.args.has_key('myip'): return "nohost" if len(request.args.getlist('myip')) != 1: return "nohost" hostname = request.args.get('hostname') if not '.' in hostname: return "notfqdn" zone_name = hostname[hostname.find('.')+1:] if zone_name[-1] != '.': zone_name += '.' hostname = hostname[0:hostname.find('.')] try: ip = IP(request.args.get('myip')) except ValueError: return "nohost" for zone in ddns.cfg_parser.cfg['zones']: if zone_name == zone['name']: for domain in zone['domains']: if domain['domain'] == hostname: if request.authorization.username in users: ddns.backend.dnsupdate.update_dns(zone_name, hostname, ip) # We should probably check something here... return "good" return auth.authenticate("!yours") return "nohost" return "nohost"