#!/usr/bin/python

import glob
import os
import tarfile
import cups
import sys

import moira

moira.connect()

acls = tarfile.open('/home/cups/lpcaccess.out')

academic_acl = acls.extractfile('lpcaccess.top').read()
sap_acl = acls.extractfile('sap-lpcaccess.top').read()

academic_servers = ('MULCH.MIT.EDU', 'PAPER-PUSHER.MIT.EDU', 'IO.MIT.EDU',
                    'HUSQVARNA.MIT.EDU')
sap_servers = ('ARBOR-EATER.MIT.EDU', 'FIBER.MIT.EDU')

map(os.remove, glob.glob('/etc/remctl/conf.d/moira/*'))
map(os.remove, glob.glob('/etc/remctl/acl/moira/*'))

open('/etc/remctl/acl/sap_acl', 'w').write(sap_acl)
open('/etc/remctl/acl/academic_acl', 'w').write(academic_acl)

remctl_conf = "lpc %s /usr/local/sbin/remctl-lpc /etc/remctl/acl/moira/%s\n"

plist = open('/var/www/com.apple.print.favorites.plist', 'w')
print >>plist, """
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
"""

for queue in cups.Connection().getPrinters().keys():
    print >>plist, '\t<key>%s</key>\n\t<true/>' % queue
    
    try:
        acl = acls.extractfile('%s/lpcaccess' % queue).read()
    except KeyError:
        continue
    printer_info = list(moira.query('gprn', queue))[0]
    if printer_info['rm'] in sap_servers:
        acl += "include /etc/remctl/acl/sap_acl"
    elif printer_info['rm'] in academic_servers:
        acl += "include /etc/remctl/acl/academic_acl"
    
    open('/etc/remctl/acl/moira/%s' % queue, 'w').write(acl)
    open('/etc/remctl/conf.d/moira/%s' % queue, 'w').\
        write(remctl_conf % (queue, queue))

print >>plist, """
</dict>
</plist>
"""
plist.close()
