mirror of https://github.com/huashengdun/webssh
Updated test_handler.py
parent
d1177bc2c5
commit
d6e4339540
|
@ -0,0 +1,8 @@
|
||||||
|
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||||
|
QyNTUxOQAAACB69SvZKJh/9VgSL0G27b5xVYa8nethH3IERbi0YqJDXwAAAKhjwAdrY8AH
|
||||||
|
awAAAAtzc2gtZWQyNTUxOQAAACB69SvZKJh/9VgSL0G27b5xVYa8nethH3IERbi0YqJDXw
|
||||||
|
AAAEA9tGQi2IrprbOSbDCF+RmAHd6meNSXBUQ2ekKXm4/8xnr1K9komH/1WBIvQbbtvnFV
|
||||||
|
hryd62EfcgRFuLRiokNfAAAAI2FsZXhfZ2F5bm9yQEFsZXhzLU1hY0Jvb2stQWlyLmxvY2
|
||||||
|
FsAQI=
|
||||||
|
-----END OPENSSH PRIVATE KEY-----
|
|
@ -0,0 +1,8 @@
|
||||||
|
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
|
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABDaKD4ac7
|
||||||
|
kieb+UfXaLaw68AAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIOQn7fjND5ozMSV3
|
||||||
|
CvbEtIdT73hWCMRjzS/lRdUDw50xAAAAsE8kLGyYBnl9ihJNqv378y6mO3SkzrDbWXOnK6
|
||||||
|
ij0vnuTAvcqvWHAnyu6qBbplu/W2m55ZFeAItgaEcV2/V76sh/sAKlERqrLFyXylN0xoOW
|
||||||
|
NU5+zU08aTlbSKGmeNUU2xE/xfJq12U9XClIRuVUkUpYANxNPbmTRpVrbD3fgXMhK97Jrb
|
||||||
|
DEn8ca1IqMPiYmd/hpe5+tq3OxyRljXjCUFWTnqkp9VvUdzSTdSGZHsW9i
|
||||||
|
-----END OPENSSH PRIVATE KEY-----
|
|
@ -1,7 +1,10 @@
|
||||||
import unittest
|
import unittest
|
||||||
|
import os.path
|
||||||
|
import paramiko
|
||||||
|
from paramiko import RSAKey, DSSKey, Ed25519Key, ECDSAKey
|
||||||
|
|
||||||
from tornado.httputil import HTTPServerRequest
|
from tornado.httputil import HTTPServerRequest
|
||||||
from handler import MixinHandler
|
from handler import MixinHandler, IndexHandler
|
||||||
|
|
||||||
|
|
||||||
class TestMixinHandler(unittest.TestCase):
|
class TestMixinHandler(unittest.TestCase):
|
||||||
|
@ -26,3 +29,59 @@ class TestMixinHandler(unittest.TestCase):
|
||||||
|
|
||||||
handler.request.headers.update({'X-Real-Port': '12345x'})
|
handler.request.headers.update({'X-Real-Port': '12345x'})
|
||||||
self.assertEqual(handler.get_real_client_addr(), False)
|
self.assertEqual(handler.get_real_client_addr(), False)
|
||||||
|
|
||||||
|
|
||||||
|
class TestIndexHandler(unittest.TestCase):
|
||||||
|
|
||||||
|
def read_privatekey(self, filename):
|
||||||
|
with open(filename, 'rb') as f:
|
||||||
|
return f.read().decode('utf-8')
|
||||||
|
|
||||||
|
def test_get_specific_pkey_with_plain_key(self):
|
||||||
|
|
||||||
|
fname = 'test_rsa.key'
|
||||||
|
cls = paramiko.RSAKey
|
||||||
|
key = self.read_privatekey(os.path.join('tests', fname))
|
||||||
|
pkey = IndexHandler.get_specific_pkey(cls, key, None)
|
||||||
|
self.assertIsInstance(pkey, cls)
|
||||||
|
pkey = IndexHandler.get_specific_pkey(cls, key, b'iginored')
|
||||||
|
self.assertIsInstance(pkey, cls)
|
||||||
|
pkey = IndexHandler.get_specific_pkey(cls, 'x'+key, None)
|
||||||
|
self.assertIsNone(pkey)
|
||||||
|
|
||||||
|
def test_get_specific_pkey_with_encrypted_key(self):
|
||||||
|
fname = 'test_rsa_password.key'
|
||||||
|
cls = paramiko.RSAKey
|
||||||
|
password = b'television'
|
||||||
|
|
||||||
|
key = self.read_privatekey(os.path.join('tests', fname))
|
||||||
|
pkey = IndexHandler.get_specific_pkey(cls, key, password)
|
||||||
|
self.assertIsInstance(pkey, cls)
|
||||||
|
pkey = IndexHandler.get_specific_pkey(cls, 'x'+key, None)
|
||||||
|
self.assertIsNone(pkey)
|
||||||
|
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
pkey = IndexHandler.get_specific_pkey(cls, key, None)
|
||||||
|
|
||||||
|
def test_get_pkey_obj_with_plain_key(self):
|
||||||
|
fname = 'test_ed25519.key'
|
||||||
|
cls = paramiko.Ed25519Key
|
||||||
|
key = self.read_privatekey(os.path.join('tests', fname))
|
||||||
|
pkey = IndexHandler.get_pkey_obj(key, None)
|
||||||
|
self.assertIsInstance(pkey, cls)
|
||||||
|
pkey = IndexHandler.get_pkey_obj(key, u'iginored')
|
||||||
|
self.assertIsInstance(pkey, cls)
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
pkey = IndexHandler.get_pkey_obj('x'+key, None)
|
||||||
|
|
||||||
|
def test_get_pkey_obj_with_encrypted_key(self):
|
||||||
|
fname = 'test_ed25519_password.key'
|
||||||
|
password = 'abc123'
|
||||||
|
cls = paramiko.Ed25519Key
|
||||||
|
key = self.read_privatekey(os.path.join('tests', fname))
|
||||||
|
pkey = IndexHandler.get_pkey_obj(key, password)
|
||||||
|
self.assertIsInstance(pkey, cls)
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
pkey = IndexHandler.get_pkey_obj(key, u'wrongpass')
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
pkey = IndexHandler.get_pkey_obj('x'+key, password)
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIICWgIBAAKBgQDTj1bqB4WmayWNPB+8jVSYpZYk80Ujvj680pOTh2bORBjbIAyz
|
||||||
|
oWGW+GUjzKxTiiPvVmxFgx5wdsFvF03v34lEVVhMpouqPAYQ15N37K/ir5XY+9m/
|
||||||
|
d8ufMCkjeXsQkKqFbAlQcnWMCRnOoPHS3I4vi6hmnDDeeYTSRvfLbW0fhwIBIwKB
|
||||||
|
gBIiOqZYaoqbeD9OS9z2K9KR2atlTxGxOJPXiP4ESqP3NVScWNwyZ3NXHpyrJLa0
|
||||||
|
EbVtzsQhLn6rF+TzXnOlcipFvjsem3iYzCpuChfGQ6SovTcOjHV9z+hnpXvQ/fon
|
||||||
|
soVRZY65wKnF7IAoUwTmJS9opqgrN6kRgCd3DASAMd1bAkEA96SBVWFt/fJBNJ9H
|
||||||
|
tYnBKZGw0VeHOYmVYbvMSstssn8un+pQpUm9vlG/bp7Oxd/m+b9KWEh2xPfv6zqU
|
||||||
|
avNwHwJBANqzGZa/EpzF4J8pGti7oIAPUIDGMtfIcmqNXVMckrmzQ2vTfqtkEZsA
|
||||||
|
4rE1IERRyiJQx6EJsz21wJmGV9WJQ5kCQQDwkS0uXqVdFzgHO6S++tjmjYcxwr3g
|
||||||
|
H0CoFYSgbddOT6miqRskOQF3DZVkJT3kyuBgU2zKygz52ukQZMqxCb1fAkASvuTv
|
||||||
|
qfpH87Qq5kQhNKdbbwbmd2NxlNabazPijWuphGTdW0VfJdWfklyS2Kr+iqrs/5wV
|
||||||
|
HhathJt636Eg7oIjAkA8ht3MQ+XSl9yIJIS8gVpbPxSw5OMfw0PjVE7tBdQruiSc
|
||||||
|
nvuQES5C9BMHjF39LZiGH1iLQy7FgdHyoP+eodI7
|
||||||
|
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,18 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
Proc-Type: 4,ENCRYPTED
|
||||||
|
DEK-Info: DES-EDE3-CBC,DAA422E8A5A8EFB7
|
||||||
|
|
||||||
|
+nssHGmWl91IcmGiE6DdCIqGvAP04tuLh60wLjWBvdjtF9CjztPnF57xe+6pBk7o
|
||||||
|
YgF/Ry3ik9ZV9rHNcRXifDKM9crxtYlpUlkM2C0SP89sXaO0P1Q1yCnrtZUwDIKO
|
||||||
|
BNV8et5X7+AGMFsy/nmv0NFMrbpoG03Dppsloecd29NTRlIXwxHRFyHxy6BdEib/
|
||||||
|
Dn0mEVbwg3dTvKrd/sODWR9hRwpDGM9nkEbUNJCh7vMwFKkIZZF8yqFvmGckuO5C
|
||||||
|
HZkDJ6RkEDYrSZJAavQaiOPF5bu3cHughRfnrIKVrQuTTDiWjwX9Ny8e4p4k7dy7
|
||||||
|
rLpbPhtxUOUbpOF7T1QxljDi1Tcq3Ebk3kN/ZLPRFnDrJfyUx+m9BXmAa78Wxs/l
|
||||||
|
KaS8DTkYykd3+EGOeJFjZg2bvgqil4V+5JIt/+MQ5pZ/ui7i4GcH2bvZyGAbrXzP
|
||||||
|
3LipSAdN5RG+fViLe3HUtfCx4ZAgtU78TWJrLk2FwKQGglFxKLnswp+IKZb09rZV
|
||||||
|
uxmG4pPLUnH+mMYdiy5ugzj+5C8iZ0/IstpHVmO6GWROfedpJ82eMztTOtdhfMep
|
||||||
|
8Z3HwAwkDtksL7Gq9klb0Wq5+uRlBWetixddAvnmqXNzYhaANWcAF/2a2Hz06Rb0
|
||||||
|
e6pe/g0Ek5KV+6YI+D+oEblG0Sr+d4NtxtDTmIJKNVkmzlhI2s53bHp6txCb5JWJ
|
||||||
|
S8mKLPBBBzaNXYd3odDvGXguuxUntWSsD11KyR6B9DXMIfWQW5dT7hp5kTMGlXWJ
|
||||||
|
lD2hYab13DCCuAkwVTdpzhHYLZyxLYoSu05W6z8SAOs=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
|
@ -54,6 +54,7 @@ class IndexHandler(MixinHandler, tornado.web.RequestHandler):
|
||||||
return
|
return
|
||||||
return data.decode('utf-8')
|
return data.decode('utf-8')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
def get_specific_pkey(self, pkeycls, privatekey, password):
|
def get_specific_pkey(self, pkeycls, privatekey, password):
|
||||||
logging.info('Trying {}'.format(pkeycls.__name__))
|
logging.info('Trying {}'.format(pkeycls.__name__))
|
||||||
try:
|
try:
|
||||||
|
@ -66,6 +67,7 @@ class IndexHandler(MixinHandler, tornado.web.RequestHandler):
|
||||||
else:
|
else:
|
||||||
return pkey
|
return pkey
|
||||||
|
|
||||||
|
@classmethod
|
||||||
def get_pkey_obj(self, privatekey, password):
|
def get_pkey_obj(self, privatekey, password):
|
||||||
password = password.encode('utf-8') if password else None
|
password = password.encode('utf-8') if password else None
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue