QSmartCard::ErrorType QSmartCard::login( QSmartCardData::PinType type ) { PinDialog::PinFlags flags = PinDialog::Pin1Type; QSslCertificate cert; switch( type ) { case QSmartCardData::Pin1Type: flags = PinDialog::Pin1Type; cert = d->t.authCert(); break; case QSmartCardData::Pin2Type: flags = PinDialog::Pin2Type; cert = d->t.signCert(); break; default: return UnknownError; } QScopedPointer<PinDialog> p; PinString pin; if( !d->t.isPinpad() ) { p.reset( new PinDialog( flags, cert, 0, qApp->activeWindow() ) ); if( !p->exec() ) return CancelError; pin = p->text().toUtf8().constData(); } else { p.reset( new PinDialog( PinDialog::PinFlags(flags|PinDialog::PinpadFlag), cert, 0, qApp->activeWindow() ) ); p->open(); } d->m.lock(); if( !d->card ) return QSmartCard::UnknownError; d->cmd = QSmartCardPrivate::Validate; d->type = type; d->pin = pin; connect( this, SIGNAL(eventStarted()), p.data(), SIGNAL(startTimer()) ); d->e.exec(); if( d->result != QSmartCard::NoError ) d->m.unlock(); return d->result; }
void LLDBPlugin::OnLLDBStarted(LLDBEvent& event) { event.Skip(); const auto settings = LLDBSettings().Load(); m_showThreadNames = settings.HasFlag(kLLDBOptionShowThreadNames); m_showFileNamesOnly = settings.HasFlag(kLLDBOptionShowFileNamesOnly); InitializeUI(); LoadLLDBPerspective(); // If this is a normal debug session, a start notification // should follow a 'Run' command switch(event.GetSessionType()) { case kDebugSessionTypeCore: CL_DEBUG("CODELITE>> LLDB started (core file)"); break; case kDebugSessionTypeAttach: { m_raisOnBpHit = settings.IsRaiseWhenBreakpointHit(); CL_DEBUG("CODELITE>> LLDB started (attached)"); m_connector.SetAttachedToProcess(event.GetSessionType() == kDebugSessionTypeAttach); // m_connector.Continue(); break; } case kDebugSessionTypeNormal: { m_raisOnBpHit = settings.IsRaiseWhenBreakpointHit(); CL_DEBUG("CODELITE>> LLDB started (normal)"); m_connector.Run(); break; } } // notify plugins that the debugger just started { clDebugEvent eventStarted(wxEVT_DEBUG_STARTED); eventStarted.SetClientData(NULL); EventNotifier::Get()->ProcessEvent(eventStarted); } }
void QSmartCard::run() { while( !d->terminate ) { if( d->m.tryLock() ) { // Get list of available cards QMap<QString,std::string> cards; QStringList readers; try { EstEIDManager *card = new EstEIDManager(); std::vector<Token> list = card->getTokenList(); for( std::vector<Token>::const_iterator i = list.begin(); i != list.end(); ++i ) { qDebug() << i->first.c_str() << i->second.c_str(); readers << i->first.c_str(); if( !i->second.empty() ) cards[i->second.c_str()] = i->first.c_str(); } delete card; } catch( const std::runtime_error &e ) { qDebug() << Q_FUNC_INFO << e.what(); } // cardlist has changed QStringList order = cards.keys(); std::sort( order.begin(), order.end(), Common::cardsOrder ); bool update = d->t.cards() != order || d->t.readers() != readers; // check if selected card is still in slot if( !d->t.card().isEmpty() && !order.contains( d->t.card() ) ) { update = true; d->t.d = new QSmartCardDataPrivate(); } d->t.d->cards = order; d->t.d->readers = readers; // if none is selected select first from cardlist if( d->t.card().isEmpty() && !d->t.cards().isEmpty() ) selectCard( d->t.cards().first() ); // read card data if( d->t.cards().contains( d->t.card() ) && (!d->card || d->t.authCert().isNull() || d->t.signCert().isNull()) ) { update = true; try { QSmartCardDataPrivate *t = d->t.d; std::string reader = cards.value( t->card ); delete d->card; d->card = 0; d->card = new EstEidCard( reader ); d->card->setReaderLanguageId( d->lang ); d->updateCounters( t ); std::vector<std::string> data; d->card->readPersonalData( data, EstEidCard::SURNAME, EstEidCard::COMMENT4 ); ByteVec authcert = d->card->getAuthCert(); ByteVec signcert = d->card->getSignCert(); t->reader = reader.c_str(); t->pinpad = d->card->isSecureConnection(); t->version = QSmartCardData::CardVersion(d->card->getCardVersion()); try { if( t->version > QSmartCardData::VER_1_1 ) { d->card->sendApplicationIdentifierPreV3(); t->version = QSmartCardData::VER_3_0; } } catch( const std::runtime_error &e ) { qDebug() << Q_FUNC_INFO << "Card is not V3.0: " << e.what(); } t->data[QSmartCardData::SurName] = SslCertificate::formatName( d->encode( data[EstEidCard::SURNAME] ) ).trimmed(); t->data[QSmartCardData::FirstName] = SslCertificate::formatName( d->encode( data[EstEidCard::FIRSTNAME] ) ).trimmed(); t->data[QSmartCardData::MiddleName] = SslCertificate::formatName( d->encode( data[EstEidCard::MIDDLENAME] ) ).trimmed(); t->data[QSmartCardData::Sex] = d->encode( data[EstEidCard::SEX] ); t->data[QSmartCardData::Citizen] = d->encode( data[EstEidCard::CITIZEN] ); t->data[QSmartCardData::BirthDate] = QDate::fromString( d->encode( data[EstEidCard::BIRTHDATE] ), "dd.MM.yyyy" ); t->data[QSmartCardData::Id] = d->encode( data[EstEidCard::ID] ); t->data[QSmartCardData::DocumentId] = d->encode( data[EstEidCard::DOCUMENTID] ); t->data[QSmartCardData::Expiry] = QDate::fromString( d->encode( data[EstEidCard::EXPIRY] ), "dd.MM.yyyy" ); t->data[QSmartCardData::BirthPlace] = SslCertificate::formatName( d->encode( data[EstEidCard::BIRTHPLACE] ) ); t->data[QSmartCardData::IssueDate] = QDate::fromString( d->encode( data[EstEidCard::ISSUEDATE] ), "dd.MM.yyyy" ); t->data[QSmartCardData::ResidencePermit] = d->encode( data[EstEidCard::RESIDENCEPERMIT] ); t->data[QSmartCardData::Comment1] = d->encode( data[EstEidCard::COMMENT1] ); t->data[QSmartCardData::Comment2] = d->encode( data[EstEidCard::COMMENT2] ); t->data[QSmartCardData::Comment3] = d->encode( data[EstEidCard::COMMENT3] ); t->data[QSmartCardData::Comment4] = d->encode( data[EstEidCard::COMMENT4] ); if( !authcert.empty() ) t->authCert = QSslCertificate( QByteArray( (char*)&authcert[0], (int)authcert.size() ), QSsl::Der ); if( !signcert.empty() ) t->signCert = QSslCertificate( QByteArray( (char*)&signcert[0], (int)signcert.size() ), QSsl::Der ); QStringList mailaddresses = t->authCert.alternateSubjectNames().values( QSsl::EmailEntry ); t->data[QSmartCardData::Email] = !mailaddresses.isEmpty() ? mailaddresses.first() : ""; QStringList name = QStringList() << t->data[QSmartCardData::FirstName].toString() << t->data[QSmartCardData::MiddleName].toString() << t->data[QSmartCardData::SurName].toString(); name.removeAll( "" ); t->data[QSmartCardData::FullName] = name.join( " " ); if( t->authCert.type() & SslCertificate::DigiIDType ) { t->data[QSmartCardData::FullName] = t->authCert.toString( "GN SN" ); t->data[QSmartCardData::Id] = t->authCert.subjectInfo("serialNumber"); t->data[QSmartCardData::BirthDate] = IKValidator::birthDate( t->authCert.subjectInfo("serialNumber") ); t->data[QSmartCardData::IssueDate] = t->authCert.effectiveDate(); t->data[QSmartCardData::Expiry] = t->authCert.expiryDate(); } } catch( const std::runtime_error &e ) { qDebug() << Q_FUNC_INFO << "Error on loading card data: " << e.what(); } } // update data if something has changed if( update ) Q_EMIT dataChanged(); d->m.unlock(); } else if( d->e.isRunning() ) { emit eventStarted(); try { byte retries = 0; d->result = QSmartCard::UnknownError; switch( d->cmd ) { case QSmartCardPrivate::Change: switch( d->type ) { case QSmartCardData::Pin1Type: d->card->changeAuthPin( d->pin, d->old, retries ); break; case QSmartCardData::Pin2Type: d->card->changeSignPin( d->pin, d->old, retries ); break; case QSmartCardData::PukType: d->card->changePUK( d->pin, d->old, retries ); break; } d->updateCounters( d->t.d ); break; case QSmartCardPrivate::Unblock: switch( d->type ) { case QSmartCardData::Pin1Type: d->card->unblockAuthPin( d->pin, d->old, retries ); break; case QSmartCardData::Pin2Type: d->card->unblockSignPin( d->pin, d->old, retries ); break; default: break; } d->updateCounters( d->t.d ); break; case QSmartCardPrivate::Validate: switch( d->type ) { case QSmartCardData::Pin1Type: d->card->validateAuthPin( d->pin, retries ); break; case QSmartCardData::Pin2Type: d->card->validateSignPin( d->pin, retries ); break; case QSmartCardData::PukType: d->card->validatePuk( d->pin, retries ); break; default: break; } break; case QSmartCardPrivate::ValidateInternal: switch( d->type ) { case QSmartCardData::Pin1Type: d->card->enterPin( EstEidCard::PIN_AUTH, d->pin ); break; case QSmartCardData::Pin2Type: d->card->enterPin( EstEidCard::PIN_SIGN, d->pin ); break; case QSmartCardData::PukType: d->card->enterPin( EstEidCard::PUK, d->pin ); break; } break; default: break; } d->result = QSmartCard::NoError; } catch( const AuthError &e ) { d->result = d->handleAuthError( d->cmd == QSmartCardPrivate::Unblock ? QSmartCardData::PukType : d->type, e ); } catch( const std::runtime_error &e ) { qDebug() << Q_FUNC_INFO << e.what(); } d->pin.clear(); d->old.clear(); d->e.quit(); } sleep( 5 ); } }