This library provides a simple and nice C++ wrapper around these libraries, so that programmers can concentrate on functionality. It offers general support for PCSC-lite, OpenSSL, PKCS#11, plus specific functionality for the SuisseID.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
3.2 KiB
112 lines
3.2 KiB
/*! @file |
|
|
|
@id $Id$ |
|
*/ |
|
// 1 2 3 4 5 6 7 8 |
|
// 45678901234567890123456789012345678901234567890123456789012345678901234567890 |
|
|
|
#ifndef CARDGUI_HXX |
|
#define CARDGUI_HXX |
|
|
|
#include <cardgui-model.hxx> |
|
#include <ui_cardgui.hxx> |
|
#include <password.hxx> |
|
|
|
#include <QtCore/QProcess> |
|
#if QT_VERSION >= 0x050000 |
|
#include <QtWidgets/QMessageBox> |
|
#else |
|
#include <QtGui/QMessageBox> |
|
#endif |
|
|
|
class CardGui: public QMainWindow, protected Ui_CardGui { |
|
|
|
Q_OBJECT; |
|
|
|
public: |
|
|
|
CardGui(QWidget* p=0): |
|
QMainWindow(p), _pwd(this) { |
|
setupUi(this); |
|
on__rescan_clicked(); |
|
} |
|
|
|
void resizeEvent(QResizeEvent* event) { |
|
QMainWindow::resizeEvent(event); |
|
if (_tree->model()) |
|
for (int i = 0; i < _tree->model()->columnCount(); ++i) |
|
_tree->resizeColumnToContents(i); |
|
} |
|
|
|
public Q_SLOTS: |
|
|
|
void on__rescan_clicked(bool=true) { |
|
static bool inRescan(false); |
|
if (inRescan) return; |
|
inRescan = true; |
|
try { |
|
delete _tree->model(); |
|
_tree->setModel(0); |
|
_card->clear(); |
|
pcsc::Connection::Strings readers(pcsc::Connection::scan()); |
|
for (pcsc::Connection::Strings::iterator r(readers.begin()); |
|
r!=readers.end(); ++r) |
|
_card->addItem(QString::fromStdString(*r)); |
|
} catch (...) { |
|
} |
|
inRescan = false; |
|
} |
|
|
|
void on__card_currentIndexChanged(int) { |
|
on__reload_clicked(); |
|
} |
|
|
|
void on__reload_clicked(bool=true) { |
|
try { |
|
delete _tree->model(); |
|
_tree->setModel(0); |
|
cardos::Commands cmd(pcsc::Connection::reader |
|
(_card->currentText().toStdString())); |
|
_tree->setModel(new CardGuiModel(cmd, "3f00")); |
|
} catch (...) { |
|
on__rescan_clicked(); |
|
} |
|
} |
|
|
|
void on__actionRestartPCSCD_triggered() { |
|
delete _tree->model(); |
|
_tree->setModel(0); |
|
if (_pwd.exec()) { |
|
_p.start("sudo -S service pcscd restart"); |
|
_p.write((_pwd.password()+"\n").toUtf8()); |
|
_p.closeWriteChannel(); |
|
if (!_p.waitForFinished()) |
|
QMessageBox::warning(this, tr("Restarting PCSC Daemon failed"), |
|
tr("<html><p>Restarting PCSC daemon" |
|
" failed with message:</p>" |
|
"\n<pre>%1</pre></html>") |
|
.arg(QString::fromUtf8 |
|
(_p.readAll()+"\n"+ |
|
_p.readAllStandardOutput()+"\n"+ |
|
_p.readAllStandardError()))); |
|
else |
|
QMessageBox::information(this, tr("Restarted PCSC Daemon"), |
|
tr("<html><p>Restarted PCSC daemon" |
|
" with message:</p>" |
|
"\n<pre>%1</pre></html>") |
|
.arg(QString::fromUtf8 |
|
(_p.readAll()+"\n"+ |
|
_p.readAllStandardOutput()+"\n"+ |
|
_p.readAllStandardError()))); |
|
} |
|
on__reload_clicked(); |
|
} |
|
|
|
protected: |
|
|
|
Password _pwd; |
|
QProcess _p; |
|
|
|
}; |
|
|
|
#endif
|
|
|