示例#1
0
static void addExtension(const ExtensionInfo &info)
{
	const QMetaObject *meta = info.generator()->metaObject();
	qDebug() << meta->className();
	Q_ASSERT(meta);
	ensureNode(meta)->infos << info;
	const QList<QByteArray> interfaces = info.generator()->interfaces();
	for (int i = 0; i < interfaces.size(); ++i)
		ensureNode(interfaces.at(i))->infos << info;
}
示例#2
0
ModuleManagerImpl::ModuleManagerImpl()
{
	ModuleManager::loadPlugins();

	CryptoService *cryptoService = NULL;
	foreach (const ObjectGenerator *gen, ObjectGenerator::module<CryptoService>()) {
		if (CRYPTO_BACKEND == QLatin1String(gen->metaObject()->className())) {
			cryptoService = gen->generate<CryptoService>();
			break;
		}
	}
	QList<ConfigBackend*> &configBackends = get_config_backends();
	foreach (const ObjectGenerator *gen, ObjectGenerator::module<ConfigBackend>()) {
		const ExtensionInfo info = gen->info();
		ConfigBackend *backend = info.generator()->generate<ConfigBackend>();
		if (QLatin1String(backend->metaObject()->className()) == CONFIG_BACKEND)
			configBackends.prepend(backend);
		else
			configBackends.append(backend);
	}
	Q_ASSERT(cryptoService);
	Q_ASSERT(!configBackends.isEmpty());
	
	QVector<QDir> &dirs = *system_info_dirs();
	dirs[SystemInfo::ConfigDir] = QDir::home().absoluteFilePath(".config/qutim");
	dirs[SystemInfo::HistoryDir] = QDir::home().absoluteFilePath(".config/qutim/history");
	dirs[SystemInfo::ShareDir] = QDesktopServices::storageLocation(QDesktopServices::DataLocation);

	Config config = Profile::instance()->config();
	if (!config.hasChildGroup("profile")) {
		QString user;
		QT_TRY {
			struct passwd *userInfo = getpwuid(getuid());
			QTextCodec *codec = QTextCodec::codecForLocale();
			user = codec->toUnicode(userInfo->pw_name);
		} QT_CATCH(...) {
		}
		config.beginGroup("profile");
		config.setValue("name", user);
		config.setValue("id", user);
		config.setValue("crypto",cryptoService->metaObject()->className());
		config.setValue("config", QLatin1String(configBackends.first()->metaObject()->className()));
		config.setValue("portable", false);
		
		config.setValue("configDir", SystemInfo::getPath(SystemInfo::ConfigDir));
		config.setValue("historyDir", SystemInfo::getPath(SystemInfo::HistoryDir));
		config.setValue("shareDir", SystemInfo::getPath(SystemInfo::ShareDir));
		config.endGroup();
	}
示例#3
0
    foreach (AccountCreationWizard *wizard, m_wizards) {
        ExtensionInfo info = wizard->info();
        QIcon icon = info.icon();
        if (icon.isNull())
            icon = Icon(QLatin1String("im-") + info.name());
        if (!icon.actualSize(QSize(1,1)).isValid())
            icon = Icon("applications-internet");

        QListWidgetItem *item = new QListWidgetItem(ui->protocolList);
        item->setData(Qt::UserRole + 1, reinterpret_cast<qptrdiff>(wizard));
        item->setData(Qt::UserRole + 2, qVariantFromValue(info));

        item->setIcon(icon);
        item->setText(info.name());
        item->setData(DescriptionRole,info.description().toString());
    }
示例#4
0
QVariant AddAccountDialogWrapper::data(const QModelIndex &index, int role) const
{
	if (index.row() < 0 || index.row() > m_wizards->size())
		return QVariant();
	AccountCreationWizard *wizard = m_wizards->at(index.row());
	ExtensionInfo info = wizard->info();
	QIcon icon = info.icon();
	if (!icon.actualSize(QSize(1,1)).isValid())
		icon = Icon("applications-internet");
	switch (role) {
	case Qt::DisplayRole:
		return info.name().toString();
	case Qt::DecorationRole:
		return QString();
	case WizardRole:
		return m_wizards->indexOf(wizard);
	case InfoRole:{
		return info.description().toString();}
	default:
		return QVariant();
	}

}
void ProfileCreationPage::initializePage()
{
	m_password = wizard()->property("password").toString();
	m_singleProfile = wizard()->property("singleProfile").toBool();
	bool first = true;
	if (!m_singleProfile) {
		registerField("crypto", ui->cryptoBox, "currentText");
	} else {
		ui->label_6->hide();
		ui->cryptoBox->hide();
		ui->cryptoDescription->hide();
	}
	foreach (const ObjectGenerator *gen, ObjectGenerator::module<CryptoService>()) {
		const ExtensionInfo info = gen->info();
		if (!m_singleProfile
				|| info.generator()->metaObject()->className() == QLatin1String("Core::NoCryptoService")) {
			ui->cryptoBox->addItem(info.icon(), info.name(), qVariantFromValue(info));
			if (first) {
				ui->cryptoBox->setCurrentIndex(0);
				ui->cryptoDescription->setText(info.description());
				first = false;
			}
		}
	}
	Q_ASSERT_X(ui->cryptoBox->count() > 0, "ProfileCreationPage::initializePage", "Have not been found any crypto plugin");
	first = true;
	foreach (const ObjectGenerator *gen, ObjectGenerator::module<ConfigBackend>()) {
		const ExtensionInfo info = gen->info();
		ui->configBox->addItem(info.icon(), info.name(), qVariantFromValue(info));
		if (first) {
			ui->configBox->setCurrentIndex(0);
			ui->configDescription->setText(info.description());
			first = false;
		}
	}
	Q_ASSERT_X(ui->cryptoBox->count() > 0, "ProfileCreationPage::initializePage", "Have not been found any config plugin");
	rebaseDirs();
}
void ProfileCreationPage::on_configBox_currentIndexChanged(int index)
{
	ExtensionInfo info = ui->configBox->itemData(index).value<ExtensionInfo>();
	ui->configDescription->setText(info.description());
}
bool ProfileCreationPage::validatePage()
{
	//FIXME Elessar, WTF? why the generators are run on several times?
	if (m_is_valid)
		return true; //dummy

	QString str;
	if (!createDirs(str)) {
		QMessageBox::warning(this,
							 tr("Error"),
							 tr("Unable to create directory %1. "
								"Maybe you are trying to create a directory "
								"in a protected system directory").arg(str));
		return false;
	}

	QVector<QDir> &systemDirs = *system_info_dirs();
	systemDirs[SystemInfo::ConfigDir] = QDir::cleanPath(ui->configEdit->text());
	systemDirs[SystemInfo::HistoryDir] = QDir::cleanPath(ui->historyEdit->text());
	systemDirs[SystemInfo::ShareDir] = QDir::cleanPath(ui->dataEdit->text());
	QFile file(SystemInfo::getDir(SystemInfo::ConfigDir).absoluteFilePath("profilehash"));
	if (file.exists()) {
		int ret = QMessageBox::question(this,
										tr("Warning"),
										tr("Profile already exists, overwrite?"),
										QMessageBox::Yes,
										QMessageBox::No);
		if(ret != QMessageBox::Yes)
			return false;
	}
	if(!file.open(QIODevice::WriteOnly)) {
		QMessageBox::warning(this,tr("Warning"),tr("Unable to create profile hash"));
		return false;
	}
	ExtensionInfo info = ui->cryptoBox->itemData(ui->cryptoBox->currentIndex()).value<ExtensionInfo>();
	CryptoService *service = info.generator()->generate<CryptoService>();
	QByteArray data;
	QVariant serviceData = service->generateData(ui->idEdit->text());
	m_cryptoName = service->metaObject()->className();
	{
		QDataStream out(&data, QIODevice::WriteOnly);
		// We shouldn't store password as is
		QByteArray passwordHash = QCryptographicHash::hash(m_password.toUtf8()
														   + "5667dd05fbe97bb238711a3af63",
														   QCryptographicHash::Sha1);
		out << ui->idEdit->text() << passwordHash << m_cryptoName;
	}
	service->setPassword(m_password, serviceData);
	QVariant hash = service->crypt(data);
	file.write(hash.toByteArray());
	file.flush();
	file.close();
	m_password.clear();
	info = ui->configBox->itemData(ui->configBox->currentIndex()).value<ExtensionInfo>();
	QList<ConfigBackend*> &configBackends = get_config_backends();
	debug() << configBackends.count();
	for (int i = 0; i < ui->configBox->count(); i++) {
		ExtensionInfo extInfo = ui->configBox->itemData(i).value<ExtensionInfo>();
		ConfigBackend *backend = extInfo.generator()->generate<ConfigBackend>();
		if (i == ui->configBox->currentIndex())
			configBackends.prepend(backend);
		else
			configBackends.append(backend);
	}
	debugClearConfig();
	
	m_is_valid = true;
	return true;
}
void* ExtensionInfo_DataCopy( void* extensionInfo, void* source, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;

	return self->_dataCopy( self, source, dest, deep, nameExt, ptrMap );
}
示例#9
0
bool ExtensionInfo::operator<= ( const ExtensionInfo& rhs ) const
{
    return name().toLower() <= rhs.name().toLower();
}
示例#10
0
bool ExtensionInfo::operator==( const ExtensionInfo& rhs) const
{
    return configFile() == rhs.configFile();
}