#!/usr/bin/env python # Requests # # Douglas Thrift # # $Id$ from __init__ import lock import base64 from ccscslab.main import utils from ccscslab.main.jsons import RequestJSONEncoder from ccscslab.main.models import Request from django.db import transaction import getpass from M2Crypto import m2urllib2, SSL import optparse import pytz import urllib, urllib2 try: import simplejson as json except ImportError: import json @transaction.commit_on_success def main(): parser = optparse.OptionParser() parser.add_option('-D', '--debug', action = 'store_true', dest = 'debug') parser.add_option('-s', '--secret', action = 'store_true', dest = 'secret') options = parser.parse_args()[0] lock(options.debug) requests = Request.objects.all() if options.debug: for request in requests: print '%s:\n %s\n %s\n %s\n %s\n %s\n %s' % (request.name, request.full_name, '*' * len(request.temporary_password), utils.timezone(request.requested), request.ip_address, request.dns_name, request.email) if not requests: return context = SSL.Context() context.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 2) context.load_verify_locations(cafile = 'ssl/cacert.pem') realm = 'Account Requests Update' url = 'https://cscl.creativestudies.org/account/requests/update' handler = urllib2.HTTPBasicAuthHandler() if options.secret: with open('/ccs/etc/web.secret', 'rb') as file: handler.add_password(realm, url, *base64.b64decode(file.readline().rstrip().decode('rot13')).split(':', 1)) else: handler.add_password(realm, url, raw_input('User: '), getpass.getpass()) opener = m2urllib2.build_opener(context, handler) opener.open(url, urllib.urlencode({'r': json.dumps(requests, cls = RequestJSONEncoder)})) requests.delete() if __name__ == '__main__': main()