Index: trunk/packages/invirt-vnc-server/config.todo
===================================================================
--- trunk/packages/invirt-vnc-server/config.todo	(revision 1388)
+++ 	(revision )
@@ -1,1 +1,0 @@
-code/vncexternalauth.py: TOKEN_KEY?
Index: trunk/packages/invirt-vnc-server/debian/changelog
===================================================================
--- trunk/packages/invirt-vnc-server/debian/changelog	(revision 1388)
+++ trunk/packages/invirt-vnc-server/debian/changelog	(revision 1389)
@@ -3,6 +3,7 @@
   * sipb-xen-vnc-server -> invirt-vnc-server
   * Generate the VNC token key at install-time instead of hard-coding
+  * Add a script for generating VNC auth tokens, to be exposed over remctl
 
- -- Evan Broder <broder@mit.edu>  Tue, 28 Oct 2008 19:44:04 -0400
+ -- Evan Broder <broder@mit.edu>  Tue, 28 Oct 2008 19:45:35 -0400
 
 sipb-xen-vnc-server (1.2) unstable; urgency=low
Index: trunk/packages/invirt-vnc-server/invirt-vnc-authtoken
===================================================================
--- trunk/packages/invirt-vnc-server/invirt-vnc-authtoken	(revision 1389)
+++ trunk/packages/invirt-vnc-server/invirt-vnc-authtoken	(revision 1389)
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+
+import os
+import sys
+import hmac
+import cPickle
+import sha
+import time
+import base64
+from invirt.vnc import getTokenKey
+
+def getAuthToken(username, machine, lifetime=5*60):
+    data = {}
+    data['user'] = username
+    data['machine'] = machine
+    data['expires'] = time.time() + lifetime
+    pickled_data = cPickle.dumps(data)
+    m = hmac.new(getTokenKey(), digestmod=sha)
+    m.update(pickled_data)
+    token = {'data': pickled_data, 'digest': m.digest()}
+    token = cPickle.dumps(token)
+    token = base64.urlsafe_b64encode(token)
+    return token
+
+def main():
+    try:
+        username = os.environ['REMOTE_USER']
+    except KeyError:
+        username = None
+    machine = sys.argv[1]
+    print getAuthToken(username, machine)
+
+if __name__ == '__main__':
+    main()
Index: trunk/packages/invirt-vnc-server/setup.py
===================================================================
--- trunk/packages/invirt-vnc-server/setup.py	(revision 1388)
+++ trunk/packages/invirt-vnc-server/setup.py	(revision 1389)
@@ -21,4 +21,4 @@
     packages = ['invirt.vnc'],
     package_dir = {'invirt': 'python'},
-    scripts=['invirt-vnc-server']
+    scripts=['invirt-vnc-server', 'invirt-vnc-authtoken']
 )
