- vnc.py doesn't reflect the source file, which starts the websockify
process and manages its security tokens.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
Makefile.am | 4 +--
model/vms.py | 6 ++--
root.py | 6 ++--
vnc.py | 92 ------------------------------------------------------------
websocket.py | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 100 insertions(+), 100 deletions(-)
delete mode 100644 vnc.py
create mode 100644 websocket.py
diff --git a/Makefile.am b/Makefile.am
index 8ee88f3..a2820b1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -111,7 +111,7 @@ config.py: config.py.in Makefile
install-deb: install
cp -R $(top_srcdir)/contrib/DEBIAN $(DESTDIR)/
mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi
- mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/vnc-tokens
+ mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/ws-tokens
mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/screenshots
mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/isos
@@ -160,7 +160,7 @@ install-data-local:
$(MKDIR_P) $(DESTDIR)/$(localstatedir)/lib/kimchi/
$(MKDIR_P) $(DESTDIR)$(kimchidir)
$(INSTALL_DATA) API.json $(DESTDIR)$(kimchidir)/API.json
- mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/vnc-tokens
+ mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/ws-tokens
mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/screenshots
mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/isos
diff --git a/model/vms.py b/model/vms.py
index 593d73b..da341bf 100644
--- a/model/vms.py
+++ b/model/vms.py
@@ -45,7 +45,7 @@ from wok.xmlutils.utils import dictize, xpath_get_text, xml_item_insert
from wok.xmlutils.utils import xml_item_remove, xml_item_update
from wok.plugins.kimchi import model
-from wok.plugins.kimchi import vnc
+from wok.plugins.kimchi import websocket
from wok.plugins.kimchi.config import READONLY_POOL_TYPE, get_kimchi_version
from wok.plugins.kimchi.kvmusertests import UserTests
from wok.plugins.kimchi.model.config import CapabilitiesModel
@@ -1301,7 +1301,7 @@ class VMModel(object):
wok_log.error('Error deleting vm information from database: '
'%s', e.message)
- vnc.remove_proxy_token(name)
+ websocket.remove_proxy_token(name)
def start(self, name):
# make sure the ISO file has read permission
@@ -1400,7 +1400,7 @@ class VMModel(object):
# (type, listen, port, passwd, passwdValidTo)
graphics_port = self._vm_get_graphics(name)[2]
if graphics_port is not None:
- vnc.add_proxy_token(name.encode('utf-8'), graphics_port)
+ websocket.add_proxy_token(name.encode('utf-8'), graphics_port)
else:
raise OperationFailed("KCHVM0010E", {'name': name})
diff --git a/root.py b/root.py
index 4b56772..b5aa78b 100644
--- a/root.py
+++ b/root.py
@@ -21,7 +21,7 @@ import json
import os
import cherrypy
-from wok.plugins.kimchi import config, mockmodel, vnc
+from wok.plugins.kimchi import config, mockmodel, websocket
from wok.plugins.kimchi.i18n import messages
from wok.plugins.kimchi.control import sub_nodes
from wok.plugins.kimchi.model import model as kimchiModel
@@ -56,8 +56,8 @@ class Kimchi(WokRoot):
setattr(self, ident, node(self.model))
if isinstance(self.model, kimchiModel.Model):
- vnc_ws_proxy = vnc.new_ws_proxy()
- cherrypy.engine.subscribe('exit', vnc_ws_proxy.terminate)
+ ws_proxy = websocket.new_ws_proxy()
+ cherrypy.engine.subscribe('exit', ws_proxy.terminate)
self.api_schema = json.load(open(os.path.join(os.path.dirname(
os.path.abspath(__file__)), 'API.json')))
diff --git a/vnc.py b/vnc.py
deleted file mode 100644
index 4f94ab2..0000000
--- a/vnc.py
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/env python2
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2016
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import base64
-import errno
-import os
-
-from multiprocessing import Process
-from websockify import WebSocketProxy
-
-from wok.config import config, paths, PluginPaths
-
-
-try:
- from websockify.token_plugins import TokenFile
- tokenFile = True
-except ImportError:
- tokenFile = False
-
-
-WS_TOKENS_DIR = os.path.join(PluginPaths('kimchi').state_dir,
'vnc-tokens')
-
-
-def new_ws_proxy():
- try:
- os.makedirs(WS_TOKENS_DIR, mode=0755)
- except OSError as e:
- if e.errno == errno.EEXIST:
- pass
-
- cert = config.get('server', 'ssl_cert')
- key = config.get('server', 'ssl_key')
- if not (cert and key):
- cert = '%s/wok-cert.pem' % paths.conf_dir
- key = '%s/wok-key.pem' % paths.conf_dir
-
- params = {'listen_host': '127.0.0.1',
- 'listen_port': config.get('server',
'websockets_port'),
- 'ssl_only': False}
-
- # old websockify: do not use TokenFile
- if not tokenFile:
- params['target_cfg'] = WS_TOKENS_DIR
-
- # websockify 0.7 and higher: use TokenFile
- else:
- params['token_plugin'] = TokenFile(src=WS_TOKENS_DIR)
-
- def start_proxy():
- server = WebSocketProxy(**params)
- server.start_server()
-
- proc = Process(target=start_proxy)
- proc.start()
- return proc
-
-
-def add_proxy_token(name, port):
- with open(os.path.join(WS_TOKENS_DIR, name), 'w') as f:
- """
- From python documentation base64.urlsafe_b64encode(s)
- substitutes - instead of + and _ instead of / in the
- standard Base64 alphabet, BUT the result can still
- contain = which is not safe in a URL query component.
- So remove it when needed as base64 can work well without it.
- """
- name = base64.urlsafe_b64encode(name).rstrip('=')
- f.write('%s: localhost:%s' % (name.encode('utf-8'), port))
-
-
-def remove_proxy_token(name):
- try:
- os.unlink(os.path.join(WS_TOKENS_DIR, name))
- except OSError:
- pass
diff --git a/websocket.py b/websocket.py
new file mode 100644
index 0000000..5b681af
--- /dev/null
+++ b/websocket.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python2
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2016
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import base64
+import errno
+import os
+
+from multiprocessing import Process
+from websockify import WebSocketProxy
+
+from wok.config import config, paths, PluginPaths
+
+
+try:
+ from websockify.token_plugins import TokenFile
+ tokenFile = True
+except ImportError:
+ tokenFile = False
+
+
+WS_TOKENS_DIR = os.path.join(PluginPaths('kimchi').state_dir,
'ws-tokens')
+
+
+def new_ws_proxy():
+ try:
+ os.makedirs(WS_TOKENS_DIR, mode=0755)
+ except OSError as e:
+ if e.errno == errno.EEXIST:
+ pass
+
+ cert = config.get('server', 'ssl_cert')
+ key = config.get('server', 'ssl_key')
+ if not (cert and key):
+ cert = '%s/wok-cert.pem' % paths.conf_dir
+ key = '%s/wok-key.pem' % paths.conf_dir
+
+ params = {'listen_host': '127.0.0.1',
+ 'listen_port': config.get('server',
'websockets_port'),
+ 'ssl_only': False}
+
+ # old websockify: do not use TokenFile
+ if not tokenFile:
+ params['target_cfg'] = WS_TOKENS_DIR
+
+ # websockify 0.7 and higher: use TokenFile
+ else:
+ params['token_plugin'] = TokenFile(src=WS_TOKENS_DIR)
+
+ def start_proxy():
+ server = WebSocketProxy(**params)
+ server.start_server()
+
+ proc = Process(target=start_proxy)
+ proc.start()
+ return proc
+
+
+def add_proxy_token(name, port):
+ with open(os.path.join(WS_TOKENS_DIR, name), 'w') as f:
+ """
+ From python documentation base64.urlsafe_b64encode(s)
+ substitutes - instead of + and _ instead of / in the
+ standard Base64 alphabet, BUT the result can still
+ contain = which is not safe in a URL query component.
+ So remove it when needed as base64 can work well without it.
+ """
+ name = base64.urlsafe_b64encode(name).rstrip('=')
+ f.write('%s: localhost:%s' % (name.encode('utf-8'), port))
+
+
+def remove_proxy_token(name):
+ try:
+ os.unlink(os.path.join(WS_TOKENS_DIR, name))
+ except OSError:
+ pass
--
1.9.1