boost::shared_ptr<HootNetworkCookieJar> NetworkIoUtils::getUserSessionCookie( const QString userName, const QString accessToken, const QString accessTokenSecret, const QString url) { LOG_VART(userName); LOG_VART(accessToken); LOG_VART(url); HootApiDb db; LOG_VART(HootApiDb::getBaseUrl()); //hoot db requires a layer to open, but we don't need one here...so put anything in QUrl dbUrl(HootApiDb::getBaseUrl().toString() + "/blah"); db.open(dbUrl); const QString sessionId = db.getSessionIdByAccessTokens(userName, accessToken, accessTokenSecret); LOG_VART(sessionId); db.close(); if (sessionId.isEmpty()) { throw HootException("User: "******" has not been authenticated."); } boost::shared_ptr<HootNetworkCookieJar> cookieJar(new HootNetworkCookieJar()); QList<QNetworkCookie> cookies; QNetworkCookie sessionCookie(QString("SESSION").toUtf8(), sessionId.toUtf8()); cookies.append(sessionCookie); cookieJar->setCookiesFromUrl(cookies, url); LOG_VART(cookieJar->size()); LOG_VART(cookieJar->toString()); return cookieJar; }
bool PersistentStore::init() { QMutexLocker locker(&_mutex); // Get application data directory and database filename. QSettings settings; QString appdata = settings.value("app/app_data").toString(); if(appdata.isEmpty()) { DEBUG << "Error creating the PersistentStore: app.appdata not set."; return false; } bool create = false; QString dbUrl(appdata + QDir::separator() + DEFAULT_DBNAME); QFileInfo dbFileInfo(dbUrl); // Initialize database object. _db = _db.addDatabase("QSQLITE", "tarsnap"); _db.setConnectOptions("QSQLITE_OPEN_URI"); _db.setDatabaseName(dbUrl); // Determine whether to try to open the database. if(!dbFileInfo.exists()) { create = true; } else if(!dbFileInfo.isFile() || !dbFileInfo.isReadable()) { DEBUG << "Error creating the PersistentStore: DB file is not accessible " << dbUrl; return false; } // Database file exists and is readable; attempt to open. else if(!_db.open()) { DEBUG << "Error opening the PersistentStore DB: " << _db.lastError().text(); return false; } else { // Successfully opened database. QStringList tables = _db.tables(); // Is the database valid? if(!tables.contains("archives", Qt::CaseInsensitive)) { _db.close(); DEBUG << "Invalid PersistentStore DB found. Attempting to recover."; QString newName(dbUrl + "." + QString::number(QDateTime::currentMSecsSinceEpoch())); if(!QFile::rename(dbUrl, newName)) { DEBUG << "Failed to rename current invalid PersistentStore DB. " "Please manually clean up the DB directory " << appdata; return false; } create = true; } else { // Check the database version, and upgrade if necessary. if(!tables.contains("version", Qt::CaseInsensitive)) { if(!upgradeVersion0()) { DEBUG << "Failed to upgrade PersistentStore DB. It's best " "to start from scratch by purging the existing DB " "in " << appdata; return false; } } int version = -1; QSqlQuery query(_db); if(query.exec("SELECT version FROM version")) { query.next(); version = query.value(0).toInt(); } else { DEBUG << "Failed to get current DB version: " << query.lastError().text(); return false; } if((version == 0) && upgradeVersion1()) { DEBUG << "DB upgraded to version 1."; version = 1; } if((version == 1) && upgradeVersion2()) { DEBUG << "DB upgraded to version 2."; version = 2; } if((version == 2) && upgradeVersion3()) { DEBUG << "DB upgraded to version 3."; version = 3; } if((version == 3) && upgradeVersion4()) { DEBUG << "DB upgraded to version 4."; version = 4; } } } // Create new database (if needed). if(create) { QFile dbTemplate(":/dbtemplate.db"); if(!dbTemplate.copy(dbUrl)) { DEBUG << "Failed to create the PersistentStore DB."; return false; } // Work around the fact that QFile::copy from the resource system does // not set u+w on the resulted file QFile dbFile(dbUrl); dbFile.setPermissions(dbFile.permissions() | QFileDevice::WriteOwner); dbFile.close(); if(!_db.open()) { DEBUG << "Error opening the PersistentStore DB: " << _db.lastError().text(); return false; } } return _initialized = true; }