QByteArray SSLConnect::getUrl( RequestType type, const QString &value ) { if( !d->ssl ) return QByteArray(); if( !SSL_check_private_key( d->ssl ) ) { d->setError(); return QByteArray(); } QString label; HTTPRequest req; switch( type ) { case AccessCert: { label = tr("Loading server access certificate. Please wait."); SOAPDocument s( "GetAccessToken", "urn:GetAccessToken" ); s.writeParameter( "Language", Settings::language().toUpper() ); s.writeParameter( "RequestTime", "" ); s.writeParameter( "SoftwareName", "DigiDoc3" ); s.writeParameter( "SoftwareVersion", qApp->applicationVersion() ); s.finalize(); req = HTTPRequest( "POST", "1.1", "https://id.sk.ee/GetAccessTokenWS/" ); req.setRawHeader( "Content-Type", "text/xml" ); req.setRawHeader( "SOAPAction", QByteArray() ); req.setRawHeader( "Connection", "close" ); req.setContent( s.document() ); break; } case MobileInfo: { label = tr("Loading Mobile info"); SOAPDocument s( "GetMIDTokens", "urn:GetMIDTokens" ); s.finalize(); req = HTTPRequest( "POST", "1.1", "https://id.sk.ee/MIDInfoWS/" ); req.setRawHeader( "Content-Type", "text/xml" ); req.setRawHeader( "SOAPAction", QByteArray() ); req.setRawHeader( "Connection", "close" ); req.setContent( s.document() ); break; } case EmailInfo: label = tr("Loading Email info"); req = HTTPRequest( "GET", "1.0", "https://sisene.www.eesti.ee/idportaal/postisysteem.naita_suunamised" ); break; case ActivateEmails: label = tr("Loading Email info"); req = HTTPRequest( "GET", "1.0", QString("https://www.eesti.ee/portaal/!postisysteem.suunamised?%1").arg( value ) ); break; case PictureInfo: label = tr("Downloading picture"); req = HTTPRequest( "GET", "1.0", "https://sisene.www.eesti.ee/idportaal/portaal.idpilt" ); break; default: return QByteArray(); } QByteArray url = req.url().host().toUtf8(); BIO *sock = BIO_new_connect( (char*)url.constData() ); BIO_set_conn_port( sock, "https" ); if( BIO_do_connect( sock ) <= 0 ) { d->setError( tr( "Failed to connect to host. Are you connected to the internet?" ) ); return QByteArray(); } SSL_set_bio( d->ssl, sock, sock ); if( !SSL_connect( d->ssl ) ) { d->setError(); return QByteArray(); } QByteArray header = req.request(); if( !SSL_write( d->ssl, header.constData(), header.size() ) ) { d->setError(); return QByteArray(); } QProgressDialog p( label, QString(), 0, 0, qApp->activeWindow() ); p.setWindowFlags( (p.windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowCloseButtonHint ); if( QProgressBar *bar = p.findChild<QProgressBar*>() ) bar->setTextVisible( false ); p.open(); return SSLReadThread( d ).waitForDone(); }