/*! @file @id $Id: main.cxx 15 2010-06-03 14:17:27Z marc $ Build für Windoof: QMAKESPEC=$(pwd)/mkspecs/mingw-g++ qmake-qt4 && make release */ // 1 2 3 4 5 6 7 8 // 45678901234567890123456789012345678901234567890123456789012345678901234567890 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //! @defgroup browser The Surfer Executable and Main Window //! @defgroup pkcs11 The PKCS#11 Client Authentication //! @defgroup qbrowserlib The Browser Library //! @defgroup designer Qt Designer Plugin for Browser Related Widgets /*! @mainpage The Secure PKCS#11 WebBrowser The browser is divided into a library, @ref qbrowserlib that implements generic browsing utilities, the main @ref browser page that collects those features into a main window, a @ref pkcs11 SuisseID hardware token client authentication and a @ref designer plugin for flexible GUI creation. */ //! @addtogroup browser //! @{ QMap& env() { static QStringList l(QProcess::systemEnvironment()); static QMap env; if (env.isEmpty()) for (QStringList::iterator it(l.begin()); it!=l.end(); ++it) { QStringList v(it->split('=')); QString key(*v.begin()); QString value((v.pop_front(), v.join("="))); env.insert(key, value); } return env; } QString helptext() { return QObject::trUtf8 ("Usage: %1 [OPTIONS...] [ ...]\n" "Options:\n" " -h, --help show this help text\n" " -d, --debug enable verbose debug mode\n" " -t --tmp path temporary folder for data caching\n" " -k, --kiosk no url bar\n" " if you sepcify -k and -s, -k must be first\n" " -q, --quirks alternate user interface\n" " -n, --no-settings don't load or store any settings\n" " --login ask for smartcard password at startup\n" " -l, --lib path to file libengine_act.so\n" " -s, --settings \n" " load settings from \n" " if you sepcify -k and -s, -k must be first\n" " -c, --cert load local client certificate from \n" " -y, --key load local certificate key from \n" " -m, --mime \n" " start for mimetype \n" " -b, --bookmarks \n" " load and save bookmarks from and to \n" " -e, --edit-bookmarks\n" " start in bookmark-edition mode\n" " optional full URL\n" "Environment:\n" " LANGUAGE \"de\", \"en\", ... " "(actual: %5)\n" " PROXY_TYPE \"http\" or \"socks\" or \"\" " "(actual: %2)\n" " PROXY_PORT proxy port number (actual: %3)\n" " PROXY_HOST proxy host name (actual: %4)\n" " _USERAGENT fake user agent (actual: %6)") .arg(QFileInfo(QCoreApplication::arguments().at(0)).fileName()) .arg(env()["PROXY_TYPE"]).arg(env()["PROXY_PORT"]).arg(env()["PROXY_HOST"]) .arg(env()["LANGUAGE"]).arg(env()["_USERAGENT"]); } int main(int argv, char** argc) try { //............................................................................ QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration()); sslConfig.setProtocol(QSsl::AnyProtocol); sslConfig.setPeerVerifyMode(QSslSocket::AutoVerifyPeer); //............................................................................ QTextCodec* utf8(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForLocale(utf8); QApplication app(argv, argc); app.setWindowIcon(QIcon(":/icons/32x32/surfer.png")); app.setApplicationName(QObject::trUtf8("Surfer", "application name")); app.setApplicationVersion(VERSION); QTranslator qtTranslator; if (env().contains("LANGUAGE")) QLocale::setDefault(env()["LANGUAGE"]); qtTranslator.load(":/language/qt_" + QLocale().name()); app.installTranslator(&qtTranslator); QTranslator appTranslator; appTranslator.load(":/language/surfer_"+ QLocale().name()); app.installTranslator(&appTranslator); //---------------------------------------------------------------------------- QString tmp(QDir::toNativeSeparators(QDir::tempPath())); QStringList urls; QString actlib #ifdef Q_OS_LINUX ("libcvP11.so") #else #ifdef Q_OS_MAC ("libcvP11.dylib") #else #ifdef Q_OS_WIN ("cvP11.dll") #endif #endif #endif ; QWebSettings::globalSettings()->setAttribute (QWebSettings::PluginsEnabled, true); bool silent(false); bool quirks(false); bool login(false); qbrowserlib::Settings::MimeTypes mimetypes; QString bookmarks; bool editbookmarks(false); QStringList args(app.arguments()); std::unique_ptr settings (std::unique_ptr(new QSettings("Sign", "Surfer"))); for (QStringList::iterator it(args.begin()); ++it!=args.end();) if (*it=="-h" || *it=="--help" || *it=="-help" || *it=="/?") { std::cout< (new QSettings(*it, QSettings::IniFormat)); } else if ((*it=="-c" || *it=="--cert") && ++it!=args.end()) { QFile file(*it); file.open(QIODevice::ReadOnly); QSslCertificate c(&file); if (c.isNull()) { std::cerr< certs(sslConfig.caCertificates()); for (QList::iterator cert(certs.begin()); cert!=certs.end(); ++cert) { LOG_FN<<"CERTIFICATE: " <issuerInfo(QSslCertificate::Organization) <issuerInfo(QSslCertificate::CommonName) <subjectInfo(QSslCertificate::Organization) <subjectInfo(QSslCertificate::CommonName); } QSslConfiguration::setDefaultConfiguration(sslConfig); //............................................................................ if (env()["PROXY_TYPE"]=="http") QNetworkProxy::setApplicationProxy (QNetworkProxy (QNetworkProxy::HttpProxy, env()["PROXY_HOST"], env()["PROXY_PORT"].toInt())); if (env()["PROXY_TYPE"]=="socks") QNetworkProxy::setApplicationProxy (QNetworkProxy (QNetworkProxy::Socks5Proxy, env()["PROXY_HOST"], env()["PROXY_PORT"].toInt())); else QNetworkProxyFactory::setUseSystemConfiguration(true); LOG_FN<<"Start - Proxy:" <<(QNetworkProxy::applicationProxy().type()==QNetworkProxy::NoProxy ? "No Proxy" : (QNetworkProxy::applicationProxy().type() ==QNetworkProxy::Socks5Proxy ? "socks" : "http")) <<"Hostname"<