mirror of https://github.com/huashengdun/webssh
Eased custom font configuration
parent
359a91b5e8
commit
b805605278
|
@ -10,8 +10,8 @@ import tornado.options as options
|
||||||
from tests.utils import make_tests_data_path
|
from tests.utils import make_tests_data_path
|
||||||
from webssh.policy import load_host_keys
|
from webssh.policy import load_host_keys
|
||||||
from webssh.settings import (
|
from webssh.settings import (
|
||||||
get_host_keys_settings, get_policy_setting, base_dir, print_version,
|
get_host_keys_settings, get_policy_setting, base_dir, get_font_setting,
|
||||||
get_ssl_context, get_trusted_downstream, get_origin_setting
|
get_ssl_context, get_trusted_downstream, get_origin_setting, print_version
|
||||||
)
|
)
|
||||||
from webssh.utils import UnicodeType
|
from webssh.utils import UnicodeType
|
||||||
from webssh._version import __version__
|
from webssh._version import __version__
|
||||||
|
@ -166,3 +166,15 @@ class TestSettings(unittest.TestCase):
|
||||||
options.origin = 'www.example.com:80, www.example.org:443'
|
options.origin = 'www.example.com:80, www.example.org:443'
|
||||||
result = {'http://www.example.com', 'https://www.example.org'}
|
result = {'http://www.example.com', 'https://www.example.org'}
|
||||||
self.assertEqual(get_origin_setting(options), result)
|
self.assertEqual(get_origin_setting(options), result)
|
||||||
|
|
||||||
|
def test_get_font_setting(self):
|
||||||
|
font_dir = os.path.join(base_dir, 'tests', 'data', 'fonts')
|
||||||
|
font = ''
|
||||||
|
self.assertEqual(get_font_setting(font, font_dir), 'fake-font')
|
||||||
|
|
||||||
|
font = 'fake-font'
|
||||||
|
self.assertEqual(get_font_setting(font, font_dir), 'fake-font')
|
||||||
|
|
||||||
|
font = 'wrong-name'
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
get_font_setting(font, font_dir)
|
||||||
|
|
|
@ -323,6 +323,7 @@ class IndexHandler(MixinHandler, tornado.web.RequestHandler):
|
||||||
self.host_keys_settings = host_keys_settings
|
self.host_keys_settings = host_keys_settings
|
||||||
self.ssh_client = self.get_ssh_client()
|
self.ssh_client = self.get_ssh_client()
|
||||||
self.debug = self.settings.get('debug', False)
|
self.debug = self.settings.get('debug', False)
|
||||||
|
self.font = self.settings.get('font', '')
|
||||||
self.result = dict(id=None, status=None, encoding=None)
|
self.result = dict(id=None, status=None, encoding=None)
|
||||||
|
|
||||||
def write_error(self, status_code, **kwargs):
|
def write_error(self, status_code, **kwargs):
|
||||||
|
@ -477,7 +478,8 @@ class IndexHandler(MixinHandler, tornado.web.RequestHandler):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
self.render('index.html', debug=self.debug)
|
self.render('index.html', debug=self.debug, font_filename=self.font,
|
||||||
|
font_family=self.font.split('.')[0])
|
||||||
|
|
||||||
@tornado.gen.coroutine
|
@tornado.gen.coroutine
|
||||||
def post(self):
|
def post(self):
|
||||||
|
|
|
@ -43,6 +43,7 @@ separated by comma;
|
||||||
define('wpintvl', type=int, default=0, help='Websocket ping interval')
|
define('wpintvl', type=int, default=0, help='Websocket ping interval')
|
||||||
define('maxconn', type=int, default=20,
|
define('maxconn', type=int, default=20,
|
||||||
help='Maximum live connections (ssh sessions) per client')
|
help='Maximum live connections (ssh sessions) per client')
|
||||||
|
define('font', default='', help='custom font filename')
|
||||||
define('version', type=bool, help='Show version information',
|
define('version', type=bool, help='Show version information',
|
||||||
callback=print_version)
|
callback=print_version)
|
||||||
|
|
||||||
|
@ -58,6 +59,10 @@ def get_app_settings(options):
|
||||||
websocket_ping_interval=options.wpintvl,
|
websocket_ping_interval=options.wpintvl,
|
||||||
debug=options.debug,
|
debug=options.debug,
|
||||||
xsrf_cookies=options.xsrf,
|
xsrf_cookies=options.xsrf,
|
||||||
|
font=get_font_setting(
|
||||||
|
options.font,
|
||||||
|
os.path.join(base_dir, 'webssh', 'static', 'css', 'fonts')
|
||||||
|
),
|
||||||
origin_policy=get_origin_setting(options)
|
origin_policy=get_origin_setting(options)
|
||||||
)
|
)
|
||||||
return settings
|
return settings
|
||||||
|
@ -150,3 +155,17 @@ def get_origin_setting(options):
|
||||||
raise ValueError('Empty origin list')
|
raise ValueError('Empty origin list')
|
||||||
|
|
||||||
return origins
|
return origins
|
||||||
|
|
||||||
|
|
||||||
|
def get_font_setting(font, font_dir):
|
||||||
|
filenames = {f for f in os.listdir(font_dir) if
|
||||||
|
os.path.isfile(os.path.join(font_dir, f))}
|
||||||
|
if font:
|
||||||
|
if font not in filenames:
|
||||||
|
raise ValueError(
|
||||||
|
'Font file {!r} not found'.format(os.path.join(font_dir, font))
|
||||||
|
)
|
||||||
|
elif filenames:
|
||||||
|
font = filenames.pop()
|
||||||
|
|
||||||
|
return font
|
||||||
|
|
|
@ -24,6 +24,16 @@
|
||||||
.btn-danger {
|
.btn-danger {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
{% if font_filename %}
|
||||||
|
@font-face {
|
||||||
|
font-family: '{{font_family}}';
|
||||||
|
src: url('static/css/fonts/{{font_filename}}');
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: '{{font_family}}';
|
||||||
|
}
|
||||||
|
{% end %}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
Loading…
Reference in New Issue