Added users management.

new_gui
Ivan Loskutov 14 years ago
parent 25c9621284
commit f3b044bf9f

@ -50,7 +50,7 @@ bool CalculateConfig::getDefaultConfig()
{
QDomElement domRoot = xmlVars.documentElement();
if (domRoot.tagName() == "variables") {
parseVariables(domRoot);
parseVariables(domRoot, m_Config);
} else {
qDebug() << "Section \"variables\" not found";
return false;
@ -80,7 +80,71 @@ bool CalculateConfig::getDefaultConfig()
return true;
}
void CalculateConfig::parseVariables(const QDomNode& node)
QStringList CalculateConfig::getPasswordUsers()
{
QStringList result;
MapConfig migrateUser;
QProcess cl_install;
QString usersParam;
foreach( const QString& user, m_Config["gui_users"].toStringList() )
{
usersParam += " --user " + user;
}
qDebug() << "Start cl-install" << usersParam << " -v --xml --filter *migrate*";
cl_install.start("cl-install" + usersParam + " -v --xml --filter *migrate*" );
if ( !cl_install.waitForStarted() )
{
qDebug() << "Process not started";
return QStringList();
}
if ( !cl_install.waitForFinished() )
{
qDebug() << "Process finished with error";
return QStringList();
}
QString outVars = cl_install.readAll();
QDomDocument xmlVars;
QString errMsg;
int errLine;
int errColumn;
if ( xmlVars.setContent(outVars, true, &errMsg, &errLine, &errColumn) )
{
QDomElement domRoot = xmlVars.documentElement();
if (domRoot.tagName() == "variables") {
parseVariables(domRoot, migrateUser);
} else {
qDebug() << "Section \"variables\" not found";
return QStringList();
}
}
if ( migrateUser["cl_migrate_user"].toStringList().count() !=
migrateUser["cl_migrate_user_psw"].toStringList().count()
)
{
return QStringList();
}
for ( int i(0); i != migrateUser["cl_migrate_user"].toStringList().count(); ++i )
{
if ( migrateUser["cl_migrate_user_psw"].toStringList().at(i) == "yes" )
result << migrateUser["cl_migrate_user"].toStringList().at(i);
}
return result;
}
void CalculateConfig::parseVariables(const QDomNode& node, MapConfig& cfg)
{
QDomNode domNode = node.firstChild();
while ( !domNode.isNull() )
@ -94,11 +158,11 @@ void CalculateConfig::parseVariables(const QDomNode& node)
{
if (domElement.attribute("type") == "var")
{
parseVar(domElement);
parseVar(domElement, cfg);
}
else if (domElement.attribute("type") == "list")
{
parseVarList(domElement);
parseVarList(domElement, cfg);
}
}
}
@ -107,7 +171,7 @@ void CalculateConfig::parseVariables(const QDomNode& node)
}
}
void CalculateConfig::parseVar(const QDomNode& node)
void CalculateConfig::parseVar(const QDomNode& node, MapConfig& cfg)
{
QString name = node.toElement().attribute("name");
QDomNode domNode = node.firstChild();
@ -122,7 +186,7 @@ void CalculateConfig::parseVar(const QDomNode& node)
if (domElement.tagName() == "value")
{
//qDebug() << "var " << name << " = " << domElement.text();
m_Config[name] = QVariant( domElement.text() );
cfg[name] = QVariant( domElement.text() );
}
}
}
@ -130,7 +194,7 @@ void CalculateConfig::parseVar(const QDomNode& node)
}
}
void CalculateConfig::parseVarList(const QDomNode& node)
void CalculateConfig::parseVarList(const QDomNode& node, MapConfig& cfg)
{
QStringList resList;
QString name = node.toElement().attribute("name");
@ -154,7 +218,7 @@ void CalculateConfig::parseVarList(const QDomNode& node)
}
if ( !resList.isEmpty() )
{
m_Config[name] = QVariant( resList );
cfg[name] = QVariant( resList );
}
}
@ -183,7 +247,7 @@ QStringList CalculateConfig::getInstallParameters()
foreach(const QString& disk, m_Config["--disk"].toStringList())
{
QString disk_t(disk);
disk_t.replace(" ", "");
disk_t = disk_t.simplified();
params << QString("--disk ") + disk_t;
}
}
@ -230,5 +294,14 @@ QStringList CalculateConfig::getInstallParameters()
if ( !m_Config["gui_install_language"].toString().isEmpty() )
params << "--lang " + m_Config["gui_install_language"].toString();
// users
if ( m_Config["gui_users"].toStringList().count() > 0 )
{
foreach(const QString& user, m_Config["gui_users"].toStringList())
{
params << QString("--user ") + user;
}
}
return params;
}

@ -10,6 +10,8 @@
class QDomNode;
typedef QMap<QString, QVariant> MapConfig;
class CalculateConfig: public QObject
{
Q_OBJECT
@ -24,6 +26,8 @@ public:
void showInstallParameters();
QStringList getInstallParameters();
QStringList getPasswordUsers();
signals:
void sendParameters(QStringList);
@ -33,12 +37,12 @@ private:
CalculateConfig(const CalculateConfig&);
CalculateConfig& operator=(const CalculateConfig&);
void parseVariables(const QDomNode& node);
void parseVar(const QDomNode& node);
void parseVarList(const QDomNode& node);
void parseVariables(const QDomNode& node, MapConfig& cfg);
void parseVar(const QDomNode& node, MapConfig& cfg);
void parseVarList(const QDomNode& node, MapConfig& cfg);
private:
static CalculateConfig* _instance;
QMap<QString, QVariant> m_Config;
MapConfig m_Config;
};

@ -24,7 +24,7 @@ void PageInstall::setupUi()
m_Output->setReadOnly(true);
QFont font = m_Output->currentFont();
font.setFamily("Droid Sans Mono");
font.setPointSize(10);
font.setPointSize(8);
m_Output->setFont( font );
m_Output->setLineWrapMode( QTextEdit::NoWrap );
@ -57,11 +57,39 @@ void PageInstall::show()
{
qDebug() << "install show()";
CalculateConfig* clConf = CalculateConfig::instance();
emit changeNext(false);
emit changePrev(false);
if ( !m_clProc )
{
// check password for user
QStringList passwdNeed = clConf->getPasswordUsers();
qDebug() << "Passwords need: " + passwdNeed.join(",");
QStringList passwd;
foreach(const QString& user, passwdNeed)
{
if (user == "root")
{
passwd << clConf->getValue("gui_root_psw").toString();
}
else
{
for (int i(0); i != clConf->getValue("gui_users").toStringList().count(); ++i)
{
if ( clConf->getValue("gui_users").toStringList().at(i) == user )
{
passwd << clConf->getValue("gui_passwds").toStringList().at(i);
break;
}
qDebug() << "Unknown user " << user;
return;
}
}
}
m_clProc = new QProcess(this);
connect( m_clProc, SIGNAL(error(QProcess::ProcessError)), this, SLOT(onError(QProcess::ProcessError)) );
@ -82,6 +110,8 @@ void PageInstall::show()
m_Progress->setMinimum(0);
m_Progress->setMaximum(0);
m_clProc->write( (passwd.join("\n") + "\n").toLocal8Bit() );
}
}
@ -97,19 +127,16 @@ void PageInstall::showStdOut()
{
if (m_clProc)
{
// debug
QString str = m_clProc->readAllStandardOutput();
//qDebug() << "stdout : " << str.toLocal8Bit().toHex();
// skip fan (/|\-)
str.replace("\x08/", "");
str.replace("\x08\\", "");
str.replace("\x08-", "");
str.replace("\x08|", "");
m_Output->moveCursor(QTextCursor::End);
m_Output->insertPlainText( str );
m_Output->moveCursor(QTextCursor::EndOfBlock);
}
}
@ -132,6 +159,7 @@ void PageInstall::onFinish(int exitCode, QProcess::ExitStatus exitStatus)
}
else
{
m_Output->moveCursor(QTextCursor::End);
m_Output->insertPlainText(
tr("Error. Additional information in /var/log/calculate/cl-install-gui-err.log")
);

@ -15,6 +15,8 @@
#include <QDebug>
#include "calculateconfig.h"
PageUsers::PageUsers()
: InstallerPage()
{
@ -245,3 +247,23 @@ int PageUsers::findUserName( const UserInfo& userInfo )
return -1;
}
bool PageUsers::validate()
{
CalculateConfig* clConf = CalculateConfig::instance();
clConf->setValue("gui_root_psw", m_edRootPsw->text());
QStringList users;
QStringList passwords;
foreach(const UserInfo& user, m_lstUserInfo)
{
users << user.name;
passwords << user.psw;
}
clConf->setValue("gui_users", users);
clConf->setValue("gui_passwds", passwords);
return true;
}

@ -16,6 +16,7 @@ public:
explicit PageUsers();
void retranslateUi();
bool validate();
protected:
void setupUi();

@ -131,8 +131,8 @@ void SystemInstaller::setupUi()
// minimum size for window TODO: remove magic numbers, add other sizes?
//setMinimumSize(800, 600);
//setMaximumSize(800, 600);
setMinimumSize(800, 500);
setMaximumSize(800, 500);
setMinimumSize(800, 600);
setMaximumSize(800, 600);
QRect scr = QApplication::desktop()->screenGeometry();
move( scr.width() - scr.width()/2 - 800/2, scr.height() - scr.height()/2 - 600/2 );
@ -177,10 +177,10 @@ void SystemInstaller::setupInstallerPages()
PageConfiguration* pageConfiguration( new PageConfiguration );
m_PageManager->addPage(pageConfiguration);
/*
PageUsers* pageUsers( new PageUsers );
m_PageManager->addPage( pageUsers );
*/
PageInstall* pageInstall( new PageInstall );
m_PageManager->addPage(pageInstall);

Loading…
Cancel
Save