/*! @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"<