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 os.path
|
||||
import paramiko
|
||||
from paramiko import RSAKey, DSSKey, Ed25519Key, ECDSAKey
|
||||
|
||||
from tornado.httputil import HTTPServerRequest
|
||||
from handler import MixinHandler
|
||||
from handler import MixinHandler, IndexHandler
|
||||
|
||||
|
||||
class TestMixinHandler(unittest.TestCase):
|
||||
|
@ -26,3 +29,59 @@ class TestMixinHandler(unittest.TestCase):
|
|||
|
||||
handler.request.headers.update({'X-Real-Port': '12345x'})
|
||||
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 data.decode('utf-8')
|
||||
|
||||
@classmethod
|
||||
def get_specific_pkey(self, pkeycls, privatekey, password):
|
||||
logging.info('Trying {}'.format(pkeycls.__name__))
|
||||
try:
|
||||
|
@ -66,6 +67,7 @@ class IndexHandler(MixinHandler, tornado.web.RequestHandler):
|
|||
else:
|
||||
return pkey
|
||||
|
||||
@classmethod
|
||||
def get_pkey_obj(self, privatekey, password):
|
||||
password = password.encode('utf-8') if password else None
|
||||
|
||||
|
|
Loading…
Reference in New Issue