Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[ssud] Implement all methods requiring uid0 in ssu cli
  • Loading branch information
Bernd Wachter committed Sep 4, 2013
1 parent 6ed1598 commit 76c70f3
Show file tree
Hide file tree
Showing 6 changed files with 216 additions and 14 deletions.
43 changes: 43 additions & 0 deletions dbus/org.nemo.ssu.xml
Expand Up @@ -25,6 +25,7 @@

<node name="/org/nemo/ssu">
<interface name="org.nemo.ssu">
<!-- credential management -->
<method name="registerDevice">
<arg direction="in" type="s" name="username"/>
<arg direction="in" type="s" name="password"/>
Expand All @@ -34,12 +35,54 @@
<method name="isRegistered">
<arg direction="out" type="b" name="status"/>
</method>

<!-- deviceInfo related methods -->
<method name="deviceModel">
<arg direction="out" type="s" name="model"/>
</method>
<method name="deviceFamily">
<arg direction="out" type="s" name="model"/>
</method>
<method name="deviceUid">
<arg direction="out" type="s" name="model"/>
</method>
<method name="deviceVariant">
<arg direction="out" type="s" name="model"/>
</method>

<!-- repository management -->
<method name="deviceMode">
<arg direction="out" type="i" name="mode"/>
</method>
<method name="setDeviceMode">
<arg direction="in" type="i" name="mode"/>
</method>
<method name="flavour">
<arg direction="out" type="s" name="flavour"/>
</method>
<method name="setFlavour">
<arg direction="in" type="s" name="flavour"/>
</method>
<method name="release">
<arg direction="out" type="s" name="release"/>
<arg direction="in" type="b" name="rnd" />
</method>
<method name="setRelease">
<arg direction="in" type="s" name="release"/>
<arg direction="in" type="b" name="rnd" />
</method>
<!-- actions are remove(0), add(1), disable(2) and enable(3) -->
<method name="modifyRepo">
<arg direction="in" type="i" name="action"/>
<arg direction="in" type="s" name="repo" />
</method>
<method name="addRepo">
<arg direction="in" type="s" name="repo" />
<arg direction="in" type="s" name="url" />
</method>
<method name="updateRepos">
</method>

<method name="error">
<arg direction="out" type="b" name="status"/>
</method>
Expand Down
54 changes: 54 additions & 0 deletions rndssucli/rndssucli.cpp
Expand Up @@ -32,6 +32,10 @@ RndSsuCli::RndSsuCli(): QObject(){
state = Idle;
}

RndSsuCli::~RndSsuCli(){
ssuProxy->quit();
}

void RndSsuCli::handleResponse(){
QTextStream qout(stdout);

Expand Down Expand Up @@ -76,18 +80,25 @@ void RndSsuCli::optDomain(QStringList opt){

void RndSsuCli::optFlavour(QStringList opt){
QTextStream qout(stdout);
QTextStream qerr(stderr);

if (opt.count() == 3 && opt.at(2) == "-s"){
qout << ssu.flavour();
state = Idle;
} else if (opt.count() == 3){
qout << "Changing flavour from " << ssu.flavour()
<< " to " << opt.at(2) << endl;

QDBusPendingReply<> reply = ssuProxy->setFlavour(opt.at(2));
reply.waitForFinished();
if (reply.isError()){
qerr << "DBus call failed, falling back to libssu" << endl;
ssu.setFlavour(opt.at(2));

SsuRepoManager repoManager;
repoManager.update();
uidWarning();
}

state = Idle;
} else if (opt.count() == 2) {
Expand All @@ -98,6 +109,7 @@ void RndSsuCli::optFlavour(QStringList opt){

void RndSsuCli::optMode(QStringList opt){
QTextStream qout(stdout);
QTextStream qerr(stderr);

// TODO: allow setting meaningful names instead of numbers

Expand Down Expand Up @@ -128,11 +140,17 @@ void RndSsuCli::optMode(QStringList opt){
} else if (opt.count() == 3){
qout << "Setting device mode from " << ssu.deviceMode()
<< " to " << opt.at(2) << endl;

QDBusPendingReply<> reply = ssuProxy->setDeviceMode(opt.at(2).toInt());
reply.waitForFinished();
if (reply.isError()){
qerr << "DBus call failed, falling back to libssu" << endl;
ssu.setDeviceMode(opt.at(2).toInt());

SsuRepoManager repoManager;
repoManager.update();
uidWarning();
}

state = Idle;
}
Expand All @@ -158,6 +176,11 @@ void RndSsuCli::optModifyRepo(int action, QStringList opt){
QTextStream qerr(stderr);

if (opt.count() == 3){
QDBusPendingReply<> reply = ssuProxy->modifyRepo(action, opt.at(2));
reply.waitForFinished();
if (reply.isError()){
qerr << "DBus call failed, falling back to libssu" << endl;

switch(action){
case Add:
repoManager.add(opt.at(2));
Expand All @@ -180,6 +203,7 @@ void RndSsuCli::optModifyRepo(int action, QStringList opt){
uidWarning();
break;
}
}
} else if (opt.count() == 4 && action == Add){
QString url, repo;

Expand All @@ -194,11 +218,16 @@ void RndSsuCli::optModifyRepo(int action, QStringList opt){
return;
}

QDBusPendingReply<> reply = ssuProxy->addRepo(repo, url);
reply.waitForFinished();
if (reply.isError()){
qerr << "DBus call failed, falling back to libssu" << endl;
repoManager.add(repo, url);
repoManager.update();
uidWarning();
}
}
}

void RndSsuCli::optRegister(QStringList opt){
/*
Expand Down Expand Up @@ -244,6 +273,7 @@ void RndSsuCli::optRegister(QStringList opt){

void RndSsuCli::optRelease(QStringList opt){
QTextStream qout(stdout);
QTextStream qerr(stderr);

if (opt.count() == 3){
if (opt.at(2) == "-r"){
Expand All @@ -253,11 +283,17 @@ void RndSsuCli::optRelease(QStringList opt){
qout << "Changing release from " << ssu.release()
<< " to " << opt.at(2) << endl;
qout << "Your device is now in release mode!" << endl;

QDBusPendingReply<> reply = ssuProxy->setRelease(opt.at(2), false);
reply.waitForFinished();
if (reply.isError()){
qerr << "DBus call failed, falling back to libssu" << endl;
ssu.setRelease(opt.at(2));

SsuRepoManager repoManager;
repoManager.update();
uidWarning();
}

state = Idle;
}
Expand All @@ -268,11 +304,17 @@ void RndSsuCli::optRelease(QStringList opt){
qout << "Changing release (RnD) from " << ssu.release(true)
<< " to " << opt.at(3) << endl;
qout << "Your device is now in RnD mode!" << endl;

QDBusPendingReply<> reply = ssuProxy->setRelease(opt.at(3), true);
reply.waitForFinished();
if (reply.isError()){
qerr << "DBus call failed, falling back to libssu" << endl;
ssu.setRelease(opt.at(3), true);

SsuRepoManager repoManager;
repoManager.update();
uidWarning();
}

state = Idle;
}
Expand Down Expand Up @@ -478,16 +520,28 @@ void RndSsuCli::optUpdateCredentials(QStringList opt){
}

void RndSsuCli::optUpdateRepos(){
QTextStream qerr(stdout);

QDBusPendingReply<> reply = ssuProxy->updateRepos();
reply.waitForFinished();
if (reply.isError()){
qerr << "DBus call failed, falling back to libssu" << endl;
SsuRepoManager repoManager;
repoManager.update();
uidWarning();
}
}

void RndSsuCli::run(){
QTextStream qout(stdout);
QTextStream qerr(stderr);

QStringList arguments = QCoreApplication::arguments();

SsuCoreConfig *ssuSettings = SsuCoreConfig::instance();
if (!ssuSettings->isWritable())
qerr << "WARNING: ssu.ini does not seem to be writable. Setting values might not work." << endl;

if (arguments.at(0).endsWith("rndssu"))
qout << "NOTE: this binary is now called ssu. The rndssu symlink will go away after some time" << endl;

Expand Down
9 changes: 5 additions & 4 deletions rndssucli/rndssucli.h
Expand Up @@ -21,6 +21,7 @@ class RndSsuCli: public QObject {

public:
RndSsuCli();
~RndSsuCli();

public slots:
void run();
Expand All @@ -45,10 +46,10 @@ class RndSsuCli: public QObject {
void optUpdateRepos();

enum Actions {
Remove,
Add,
Disable,
Enable
Remove = 0,
Add = 1,
Disable = 2,
Enable = 3,
};

enum State {
Expand Down
2 changes: 1 addition & 1 deletion rpm/ssu.spec
Expand Up @@ -126,7 +126,7 @@ Group: Documentation

%build
mkdir -p build && cd build
qmake -qt=5 DEFINES+='TARGET_ARCH=\\\"\"%{_target_cpu}\"\\\"' -recursive ..
%qmake5 DEFINES+='TARGET_ARCH=\\\"\"%{_target_cpu}\"\\\"' -recursive ..
make %{?_smp_mflags}
cd .. && doxygen doc/Doxyfile

Expand Down
92 changes: 86 additions & 6 deletions ssud/ssud.cpp
Expand Up @@ -9,6 +9,7 @@
#include "ssuadaptor.h"

#include "libssu/ssudeviceinfo.h"
#include "libssu/ssurepomanager.h"

#include <QDBusConnection>

Expand Down Expand Up @@ -42,13 +43,25 @@ QString Ssud::deviceModel(){
SsuDeviceInfo deviceInfo;

return deviceInfo.deviceModel();
};
}

QString Ssud::deviceFamily(){
SsuDeviceInfo deviceInfo;

return deviceInfo.deviceFamily();
}

QString Ssud::deviceUid(){
SsuDeviceInfo deviceInfo;

return deviceInfo.deviceUid();
};
}

QString Ssud::deviceVariant(){
SsuDeviceInfo deviceInfo;

return deviceInfo.deviceVariant();
}

bool Ssud::error(){
return ssu.error();
Expand All @@ -58,18 +71,85 @@ QString Ssud::lastError(){
return ssu.lastError();
}

bool Ssud::isRegistered(){
return ssu.isRegistered();
}

void Ssud::quit(){
QCoreApplication::quit();
}

bool Ssud::isRegistered(){
return ssu.isRegistered();
}

void Ssud::registerDevice(const QString &username, const QString &password){
ssu.sendRegistration(username, password);
}

void Ssud::unregisterDevice(){
ssu.unregister();
};


int Ssud::deviceMode(){
return ssu.deviceMode();
}

void Ssud::setDeviceMode(int mode){
ssu.setDeviceMode(mode);

SsuRepoManager repoManager;
repoManager.update();
}

QString Ssud::flavour(){
return ssu.flavour();
}

void Ssud::setFlavour(const QString &flavour){
ssu.setFlavour(flavour);

SsuRepoManager repoManager;
repoManager.update();
}


QString Ssud::release(bool rnd){
return ssu.release(rnd);
}

void Ssud::setRelease(const QString &release, bool rnd){
ssu.setRelease(release, rnd);

SsuRepoManager repoManager;
repoManager.update();
}

void Ssud::modifyRepo(int action, const QString &repo){
SsuRepoManager repoManager;

switch(action){
case Add:
repoManager.add(repo);
break;
case Remove:
repoManager.remove(repo);
break;
case Disable:
repoManager.disable(repo);
break;
case Enable:
repoManager.enable(repo);
break;
}

repoManager.update();
}

void Ssud::addRepo(const QString &repo, const QString &url){
SsuRepoManager repoManager;
repoManager.add(repo, url);
repoManager.update();
}

void Ssud::updateRepos(){
SsuRepoManager repoManager;
repoManager.update();
}

0 comments on commit 76c70f3

Please sign in to comment.