|
|
|
@ -34,62 +34,42 @@ class CertClass (QtGui.QWidget):
|
|
|
|
|
# self.default_cert_path = self.default_cert_path.replace("~",homePath)
|
|
|
|
|
|
|
|
|
|
self.sendlayout = QtGui.QGridLayout()
|
|
|
|
|
self.getlayout = QtGui.QGridLayout()
|
|
|
|
|
self.sendlayout.setColumnStretch(0,5)
|
|
|
|
|
self.sendlayout.setColumnStretch(1,5)
|
|
|
|
|
self.sendlayout.setColumnStretch(2,5)
|
|
|
|
|
self.mainlayout = QtGui.QVBoxLayout()
|
|
|
|
|
|
|
|
|
|
# gen ceth by host
|
|
|
|
|
self.sendlayout.addWidget(LabelWordWrap(_('Host'), self), 1,0)
|
|
|
|
|
self.send_host = QtGui.QLineEdit('localhost', self)
|
|
|
|
|
self.sendlayout.addWidget(self.send_host, 1, 1)
|
|
|
|
|
self.sendlayout.addWidget(self.send_host, 1, 1, 1, 2)
|
|
|
|
|
|
|
|
|
|
self.sendlayout.addWidget(LabelWordWrap(_('Port'), self), 2,0)
|
|
|
|
|
|
|
|
|
|
self.send_port = QtGui.QLineEdit('8888', self)
|
|
|
|
|
self.send_port.setValidator(QtGui.QIntValidator(self))
|
|
|
|
|
self.sendlayout.addWidget(self.send_port, 2, 1)
|
|
|
|
|
self.sendlayout.addWidget(self.send_port, 2, 1, 1, 2)
|
|
|
|
|
|
|
|
|
|
Send_button = QtGui.QPushButton(_("Send"), self)
|
|
|
|
|
Send_button.clicked.connect(self.send)
|
|
|
|
|
self.sendlayout.addWidget(Send_button, 3, 1)
|
|
|
|
|
self.sendlayout.addWidget(Send_button, 3, 0)
|
|
|
|
|
|
|
|
|
|
self.GroupBoxSend = QtGui.QGroupBox \
|
|
|
|
|
(_('Send certificate signing request'))
|
|
|
|
|
self.GroupBoxSend.setLayout(self.sendlayout)
|
|
|
|
|
|
|
|
|
|
# GroupBox get certificate
|
|
|
|
|
self.getlayout.addWidget(LabelWordWrap(_('Host'), self), 1,0)
|
|
|
|
|
self.get_host = QtGui.QLineEdit('localhost', self)
|
|
|
|
|
self.getlayout.addWidget(self.get_host, 1, 1)
|
|
|
|
|
|
|
|
|
|
self.getlayout.addWidget(LabelWordWrap(_('Port'), self), 2,0)
|
|
|
|
|
|
|
|
|
|
self.get_port = QtGui.QLineEdit('8888', self)
|
|
|
|
|
self.get_port.setValidator(QtGui.QIntValidator(self))
|
|
|
|
|
self.getlayout.addWidget(self.get_port, 2, 1)
|
|
|
|
|
|
|
|
|
|
Get_button = QtGui.QPushButton(_("Get"), self)
|
|
|
|
|
Get_button.clicked.connect(self.get)
|
|
|
|
|
self.getlayout.addWidget(Get_button, 3, 1)
|
|
|
|
|
|
|
|
|
|
self.GroupBoxGet = QtGui.QGroupBox(_('Get certificate from server'))
|
|
|
|
|
self.GroupBoxGet.setLayout(self.getlayout)
|
|
|
|
|
|
|
|
|
|
# group all in widget
|
|
|
|
|
self.sendlayout.addWidget(Get_button, 3, 1)
|
|
|
|
|
|
|
|
|
|
Quit_button = QtGui.QPushButton(_("Quit"), self)
|
|
|
|
|
Quit_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return))
|
|
|
|
|
Quit_button.clicked.connect(self.close)
|
|
|
|
|
self.sendlayout.addWidget(Quit_button, 3, 2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.connect(Quit_button, QtCore.SIGNAL("clicked()"),
|
|
|
|
|
self, QtCore.SLOT("close()"))
|
|
|
|
|
self.GroupBoxSend = QtGui.QGroupBox \
|
|
|
|
|
(_('Certificate signing request'))
|
|
|
|
|
self.GroupBoxSend.setLayout(self.sendlayout)
|
|
|
|
|
|
|
|
|
|
self.resize(400,200)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.mainlayout.addWidget(self.GroupBoxSend)
|
|
|
|
|
self.mainlayout.addWidget(self.GroupBoxGet)
|
|
|
|
|
|
|
|
|
|
self.mainlayout.addWidget(Quit_button)
|
|
|
|
|
|
|
|
|
|
self.setLayout(self.mainlayout)
|
|
|
|
|
self.setFocus()
|
|
|
|
|
# for clear memory after closed this window
|
|
|
|
@ -117,24 +97,23 @@ class CertClass (QtGui.QWidget):
|
|
|
|
|
if port == '' or not port.isdigit():
|
|
|
|
|
show_msg (_('Enter Port'), _('Field "Port" Error!'))
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# send request
|
|
|
|
|
cert_path = self.default_cert_path
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if os.path.exists(cert_path + 'req_id'):
|
|
|
|
|
text = _("You have sent a request to sign the certificate!")
|
|
|
|
|
informative_text = _("request id = %s\n") \
|
|
|
|
|
%open(cert_path + 'req_id', 'r').read() \
|
|
|
|
|
+ _("Send new request?")
|
|
|
|
|
reply = show_question(self, text, informative_text)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if reply == QtGui.QMessageBox.No:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elif reply == QtGui.QMessageBox.Yes:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
url = "https://%s:%d/?wsdl" %(by_host, int(port))
|
|
|
|
|
print 'URL = ', url
|
|
|
|
|
from suds.client import Client
|
|
|
|
@ -214,19 +193,19 @@ class CertClass (QtGui.QWidget):
|
|
|
|
|
req_id = fc.read()
|
|
|
|
|
fc.close()
|
|
|
|
|
|
|
|
|
|
from_host = self.get_host.text()
|
|
|
|
|
from_host = self.send_host.text()
|
|
|
|
|
if from_host == '':
|
|
|
|
|
show_msg (_('Enter Hostname or IP adress'), \
|
|
|
|
|
_('Field "Host" Error!'))
|
|
|
|
|
return 1
|
|
|
|
|
port = self.get_port.text()
|
|
|
|
|
port = self.send_port.text()
|
|
|
|
|
|
|
|
|
|
if port == '' or not port.isdigit():
|
|
|
|
|
show_msg (_('Enter Port'), _('Field "Port" Error!'))
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
url = "https://%s:%s/?wsdl" %(from_host, port)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from suds.client import Client
|
|
|
|
|
try:
|
|
|
|
|
client = Client(url, \
|
|
|
|
@ -246,24 +225,24 @@ class CertClass (QtGui.QWidget):
|
|
|
|
|
print 'method get in CertificateClass Exception'
|
|
|
|
|
show_msg (e, _("Not connected!"))
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not os.path.exists(cert_path + server_host_name + '.csr'):
|
|
|
|
|
show_msg(_('Request %s not found on client side') \
|
|
|
|
|
%(cert_path + server_host_name + '.csr'))
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
request = open(cert_path + server_host_name + '.csr').read()
|
|
|
|
|
md5 = hashlib.md5()
|
|
|
|
|
md5.update(request)
|
|
|
|
|
md5sum = md5.hexdigest()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
result = client.service.get_client_cert(req_id, md5sum)
|
|
|
|
|
except urllib2.URLError, e:
|
|
|
|
|
print 'client.service.get_client_cert in CertificateClass Exception'
|
|
|
|
|
show_msg (e, _("Not connected!"))
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cert = result[0][0]
|
|
|
|
|
try:
|
|
|
|
|
ca_root = result[0][1]
|
|
|
|
@ -288,33 +267,34 @@ class CertClass (QtGui.QWidget):
|
|
|
|
|
fc.close()
|
|
|
|
|
os.unlink(cert_path + 'req_id')
|
|
|
|
|
show_msg (_('OK. Certificate save. Your certificate id = %s') %req_id)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ca_root:
|
|
|
|
|
system_ca_db = self.ClientObj.VarsApi.Get('cl_glob_root_cert')
|
|
|
|
|
if os.path.exists(system_ca_db):
|
|
|
|
|
if ca_root in open(system_ca_db, 'r').read():
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
cl_client_cert_dir = self.ClientObj.VarsApi.Get('cl_client_cert_dir')
|
|
|
|
|
|
|
|
|
|
cl_client_cert_dir = self.ClientObj.VarsApi.Get \
|
|
|
|
|
('cl_client_cert_dir')
|
|
|
|
|
homePath = self.ClientObj.VarsApi.Get('ur_home_path')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cl_client_cert_dir = cl_client_cert_dir.replace("~",homePath)
|
|
|
|
|
if not os.path.isdir(cl_client_cert_dir):
|
|
|
|
|
os.mkdir(cl_client_cert_dir)
|
|
|
|
|
if not os.path.isdir(cl_client_cert_dir+'/ca'):
|
|
|
|
|
os.mkdir(cl_client_cert_dir+'/ca')
|
|
|
|
|
root_cert_md5 = cl_client_cert_dir + "/ca/cert_list"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
md5 = hashlib.md5()
|
|
|
|
|
md5.update(ca_root)
|
|
|
|
|
md5sum = md5.hexdigest()
|
|
|
|
|
print "\n================================================="
|
|
|
|
|
print "md5sum = ", md5sum
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not os.path.isfile(root_cert_md5):
|
|
|
|
|
fc = open(root_cert_md5,"w")
|
|
|
|
|
fc.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filename = None
|
|
|
|
|
with open(root_cert_md5) as fd:
|
|
|
|
|
t = fd.read()
|
|
|
|
@ -331,15 +311,15 @@ class CertClass (QtGui.QWidget):
|
|
|
|
|
for item in Issuer:
|
|
|
|
|
if item[0] == 'CN':
|
|
|
|
|
filename = item[1]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fc = open(root_cert_md5,"a")
|
|
|
|
|
fc.write('%s %s\n' %(md5sum, filename))
|
|
|
|
|
fc.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not filename:
|
|
|
|
|
show_msg (_('Not found field "CN" in root certificate!'))
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fd = open(cl_client_cert_dir + '/ca/' + filename, 'w')
|
|
|
|
|
fd.write(ca_root)
|
|
|
|
|
fd.close()
|
|
|
|
|