summaryrefslogtreecommitdiffstats
path: root/pica-client/openssltool.cpp
diff options
context:
space:
mode:
authorme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2012-07-22 12:00:06 +0000
committerme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2012-07-22 12:00:06 +0000
commitc7323aafac1769cb809da3f1d7ddd05383ace641 (patch)
treeddd736fbbe600d6eacc1f324d98a3c3064244b89 /pica-client/openssltool.cpp
parentf190872a4ab94577d1d9db343c0ca7643f40eae6 (diff)
downloadpica-pica-c7323aafac1769cb809da3f1d7ddd05383ace641.tar.gz
pica-pica-c7323aafac1769cb809da3f1d7ddd05383ace641.zip
1) Automatic account registration implemented;
2) All openssl command line tools invocations moved to new class OpenSSLTool git-svn-id: svn://localhost/project_picapica/trunk@150 fb96df88-216d-11de-830c-f3023f12d8ac
Diffstat (limited to 'pica-client/openssltool.cpp')
-rw-r--r--pica-client/openssltool.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/pica-client/openssltool.cpp b/pica-client/openssltool.cpp
new file mode 100644
index 0000000..29cb3b7
--- /dev/null
+++ b/pica-client/openssltool.cpp
@@ -0,0 +1,133 @@
+#include "openssltool.h"
+#include <QProcess>
+#include <QRegExp>
+#include <QMessageBox>
+
+OpenSSLTool::OpenSSLTool()
+{
+}
+
+QString OpenSSLTool::NameFromCertFile(QString cert_file)
+{
+ //
+ QProcess openssl;
+
+ openssl.start("openssl",QStringList()<<"x509"<<"-in"<<cert_file<<"-subject"<<"-nameopt"<<"oneline,-esc_msb,utf8"<<"-noout");
+ if (!openssl.waitForStarted())
+ return QString();
+
+ if (!openssl.waitForFinished())
+ return QString();
+
+ QByteArray result = openssl.readAll();
+ QRegExp rx("CN = [0-9]+\\#([^\\s\\#]+)");
+
+
+ QString name=QString::fromUtf8( result.constData());
+
+ if (name.contains(rx))
+ {
+ name=rx.cap(1);
+ }
+
+ //
+return name;
+}
+
+QString OpenSSLTool::NameFromCertString(QString cert_pem)
+{
+ QProcess openssl;
+
+ openssl.start("openssl",QStringList()<<"x509"<<"-subject"<<"-nameopt"<<"oneline,-esc_msb,utf8"<<"-noout");
+ if (!openssl.waitForStarted())
+ return QString();
+
+ openssl.write(cert_pem.toAscii());
+
+ if (!openssl.waitForFinished())
+ return QString();
+
+ QByteArray result = openssl.readAll();
+ QRegExp rx("CN = [0-9]+\\#([^\\s\\#]+)");
+
+
+ QString name=QString::fromUtf8( result.constData());
+
+ if (name.contains(rx))
+ {
+ name=rx.cap(1);
+ }
+
+ //
+return name;
+}
+
+QString OpenSSLTool::CertTextFromString(QString cert_pem)
+{
+ QProcess openssl;
+ qint64 ret;
+ char *data;
+ QByteArray ba;
+
+ openssl.start("openssl", QStringList()<<"x509"<<"-noout"<<"-text"<<"-nameopt"<<"multiline,-esc_msb,utf8");
+
+ if (!openssl.waitForStarted())
+ return QString();
+
+ ba = cert_pem.toAscii();
+ ret = openssl.write(data = (char*)ba.constData());
+ openssl.closeWriteChannel();
+
+ if (!openssl.waitForFinished())
+ return QString();
+
+ return QString::fromUtf8(openssl.readAllStandardOutput().constData());
+}
+
+bool OpenSSLTool::GenRSAKeySignal(quint32 numbits, QString keyfile, QObject *receiver, const char *finished_slot)
+{
+ openssl_.start("openssl", QStringList()<<"genrsa"<<"-out"<<keyfile<<QString::number(numbits));
+
+ if (!openssl_.waitForStarted())
+ return false;
+
+ openssl_.disconnect(&openssl_, SIGNAL(finished(int,QProcess::ExitStatus)), 0, 0);
+ openssl_.connect(&openssl_, SIGNAL(finished(int,QProcess::ExitStatus)),receiver, finished_slot);
+
+ return true;
+}
+
+bool OpenSSLTool::GenCSRSignal(QString csr_file, QString keyfile, QString subject, QObject *receiver, const char *finished_slot)
+{
+ openssl_.start("openssl",
+ QStringList()
+ <<"req"
+ <<"-out"<<csr_file
+ <<"-key"<<keyfile
+ <<"-subj"<<"/CN=" + subject
+ <<"-new"
+ <<"-days"<<"3680"
+ <<"-utf8"
+ <<"-batch");
+
+ if (!openssl_.waitForStarted())
+ return false;
+
+ openssl_.disconnect(&openssl_, SIGNAL(finished(int,QProcess::ExitStatus)), 0, 0);
+ openssl_.connect(&openssl_, SIGNAL(finished(int,QProcess::ExitStatus)),receiver, finished_slot);
+
+ return true;
+}
+
+QString OpenSSLTool::ReadStdErr()
+{
+ return QString::fromUtf8(openssl_.readAllStandardError().constData());
+}
+
+QString OpenSSLTool::ReadStdOut()
+{
+ return QString::fromUtf8(openssl_.readAllStandardOutput().constData());
+}
+
+
+