Generate the VNC token key at invirt-vnc-server install-time instead
[invirt/packages/invirt-vnc-server.git] / python / vnc / extauth.py
index 30e89e1..b7351a3 100644 (file)
@@ -1,5 +1,5 @@
 """
-Wrapper for sipb-xen VNC proxying
+Wrapper for Invirt VNC proxying
 """
 
 # twisted imports
@@ -18,11 +18,15 @@ import hmac
 import base64
 import socket
 import time
-import get_port
 
-TOKEN_KEY = "0M6W0U1IXexThi5idy8mnkqPKEq1LtEnlK/pZSn0cDrN"
+def getTokenKey():
+    token_key = file('/etc/invirt/secrets/vnc-key').read().strip()
+    while True:
+        yield token_key
+getTokenKey = getTokenKey().next
 
 def getPort(name, auth_data):
+    import get_port
     if (auth_data["machine"] == name):
         port = get_port.findPort(name)
         if port is None:
@@ -62,12 +66,11 @@ class VNCAuth(protocol.Protocol):
         self.otherConn=None
 
     def validateToken(self, token):
-        global TOKEN_KEY
         self.auth_error = "Invalid token"
         try:
             token = base64.urlsafe_b64decode(token)
             token = cPickle.loads(token)
-            m = hmac.new(TOKEN_KEY, digestmod=sha)
+            m = hmac.new(getTokenKey(), digestmod=sha)
             m.update(token['data'])
             if (m.digest() == token['digest']):
                 data = cPickle.loads(token['data'])