#!/usr/bin/python

from invirt.config import structs as config
from subprocess import Popen, check_call, PIPE, CalledProcessError
import tempfile
import os
import sys
import shutil

def check_wait(popen):
    retcode = popen.wait()
    if retcode != 0:
        raise CalledProcessError(retcode, popen.pid)
    return retcode

def main():
    check_call(['kinit', '-k', 'daemon/%s' % config.web.hostname])
    
    temp_dir = tempfile.mkdtemp()

    jarfile = os.path.join(temp_dir, 'VncViewer.jar')

    shutil.copy('/usr/share/invirt-vnc-client/VncViewer.src.jar',
                jarfile)
    
    keystore = os.path.join(temp_dir, 'trust.store')
    for host in config.hosts:
        cert = Popen(['remctl', config.remote.hostname, 'web', 'vnccert', host.hostname],
                     stdout=PIPE)
        check_wait(cert)
        check_call(['keytool', '-import', '-noprompt', '-alias', host.hostname,
                    '-keystore', keystore, '-storepass', 'foobar'],
                   stdin=cert.stdout)
    
    check_call(['jar', 'uf', jarfile,
                '-C', temp_dir, 'trust.store'])

    shutil.move(jarfile, '/usr/share/invirt-vnc-client/VncViewer.jar')
    
    shutil.rmtree(temp_dir)

if __name__ == '__main__':
    sys.exit(main())
