I have made the following changes intended for :
  CE:MW:Shared / ssu

Please review and accept or decline.
BOSS has already run some checks on this request.
See the "Messages from BOSS" section below.

https://build.pub.meego.com//request/show/7688

Thank You,
Pekka Lundstrom

[This message was auto-generated]

---

Request # 7688:

Messages from BOSS:

State: review at 2013-01-16T18:13:33 by bossbot

Reviews:
       accepted by bossbot : Prechecks succeeded.
       new for CE-maintainers : Please replace this text with a review and 
approve/reject the review (not the SR). BOSS will take care of the rest

Changes:
  submit: home:plundstr:branches:CE:MW:Shared / ssu -> CE:MW:Shared / ssu
  
changes files:
--------------
--- ssu.changes
+++ ssu.changes
@@ -0,0 +1,4 @@
+* Wed Jan 16 2013 Pekka Lundstrom <[email protected]> - 0.18
+- Added domain support for registration
+- Added support to remove old values from config by using ssu-defaults.ini
+

old:
----
  ssu-0.17.tar.gz

new:
----
  ssu-0.18.tar.gz

spec files:
-----------
--- ssu.spec
+++ ssu.spec
@@ -1,5 +1,5 @@
 Name: ssu
-Version: 0.17
+Version: 0.18
 Release: 1
 Summary: SSU enabler for RND
 Group: System/Base

other changes:
--------------

++++++ ssu-0.17.tar.gz -> ssu-0.18.tar.gz
--- libssu/ssu.cpp
+++ libssu/ssu.cpp
@@ -54,7 +54,17 @@
       defaultKeys = defaultSettings.allKeys();
       defaultSettings.endGroup();
       foreach (const QString &key, defaultKeys){
-        if (!settings->contains(key)){
+        // Default keys support both commands and new keys
+        if (key.compare("cmd-remove", Qt::CaseSensitive) == 0){
+          // Remove keys listed in value as string list
+          QStringList oldKeys = defaultSettings.value(currentSection + 
key).toStringList();
+          foreach (const QString &oldKey, oldKeys){
+            if (settings->contains(oldKey)){
+              settings->remove(oldKey);
+              qDebug() << "Removing old key:" << oldKey;
+            }
+          }
+        } else if (!settings->contains(key)){
           // Add new keys..
           settings->setValue(key, defaultSettings.value(currentSection + key));
           qDebug() << "Adding new key: " << key;
@@ -256,6 +266,13 @@
     return "release";
 }
 
+QString Ssu::domain(){
+  if (settings->contains("domain"))
+    return settings->value("domain").toString();
+  else
+    return "";
+}
+
 bool Ssu::isRegistered(){
   if (!settings->contains("privateKey"))
     return false;
@@ -352,6 +369,19 @@
   repoParameters.insert("deviceFamily", deviceFamily());
   repoParameters.insert("deviceModel", deviceModel());
 
+  // Domain variables
+  QString domainSection = domain() + "-domain";
+  QStringList sections = repoSettings->childGroups();
+  if (sections.contains(domainSection))
+    repoSettings->beginGroup(domainSection);
+  else
+    repoSettings->beginGroup("default-domain");
+  QStringList domainKeys = repoSettings->allKeys();
+  foreach (const QString &key, domainKeys){
+      repoParameters.insert(key, repoSettings->value(key).toString());
+  }
+  repoSettings->endGroup();
+
   if (settings->contains("repository-urls/" + repoName))
     r = settings->value("repository-urls/" + repoName).toString();
   else {
@@ -440,10 +470,23 @@
     emit done();
 }
 
-void Ssu::sendRegistration(QString username, QString password){
+void Ssu::sendRegistration(QString usernameDomain, QString password){
   errorFlag = false;
 
   QString ssuCaCertificate, ssuRegisterUrl;
+  QString username, domainName;
+
+  // Username can include also domain, (user@domain), separate those
+  if (usernameDomain.contains('@')) {
+      // separate domain/username and set domain
+      username = usernameDomain.section('@', 0, 0);
+      domainName = usernameDomain.section('@', 1, 1);
+      setDomain(domainName);
+  } else {
+      // No domain defined
+      username = usernameDomain;
+  }
+
   if (!settings->contains("ca-certificate")){
     setError("CA certificate for SSU not set (config key 'ca-certificate')");
     return;
@@ -451,8 +494,11 @@
     ssuCaCertificate = settings->value("ca-certificate").toString();
 
   if (!settings->contains("register-url")){
-    setError("URL for SSU registration not set (config key 'register-url')");
-    return;
+    ssuRegisterUrl = repoUrl("register-url");
+    if (ssuRegisterUrl.isEmpty()){
+      setError("URL for SSU registration not set (config key 'register-url')");
+      return;
+    }
   } else
     ssuRegisterUrl = settings->value("register-url").toString();
 
@@ -482,8 +528,13 @@
   QUrl form;
   form.addQueryItem("protocolVersion", SSU_PROTOCOL_VERSION);
   form.addQueryItem("deviceModel", deviceModel());
+  if (!domain().isEmpty()){
+    form.addQueryItem("domain", domain());
+  }
 
   qDebug() << "Sending request to " << request.url();
+  qDebug() << form.encodedQueryItems();
+
   QNetworkReply *reply;
 
   pendingRequests++;
@@ -494,8 +545,8 @@
   if (!homeUrl.isEmpty()){
     // clear header, the other request bits are reusable
     request.setHeader(QNetworkRequest::ContentTypeHeader, 0);
-    qDebug() << "sending request to " << homeUrl;
     request.setUrl(homeUrl + "/authorized_keys");
+    qDebug() << "sending request to " << request.url();
     pendingRequests++;
     manager->get(request);
   }
@@ -565,6 +616,11 @@
     settings->setValue("release", release);
 }
 
+void Ssu::setDomain(QString domain){
+  settings->setValue("domain", domain);
+  settings->sync();
+}
+
 void Ssu::storeAuthorizedKeys(QByteArray data){
   QDir dir;
 
@@ -605,8 +661,11 @@
     ssuCaCertificate = settings->value("ca-certificate").toString();
 
   if (!settings->contains("credentials-url")){
-    setError("URL for credentials update not set (config key 
'credentials-url')");
-    return;
+    ssuCredentialsUrl = repoUrl("credentials-url");
+    if (ssuCredentialsUrl.isEmpty()){
+      setError("URL for credentials update not set (config key 
'credentials-url')");
+      return;
+    }
   } else
     ssuCredentialsUrl = settings->value("credentials-url").toString();
 
@@ -649,9 +708,6 @@
   qDebug() << request.url();
   request.setSslConfiguration(sslConfiguration);
 
-  QUrl form;
-  form.addQueryItem("protocolVersion", SSU_PROTOCOL_VERSION);
-
   pendingRequests++;
   manager->get(request);
 }
--- libssu/ssu.h
+++ libssu/ssu.h
@@ -65,6 +65,11 @@
      */
     Q_INVOKABLE QString flavour();
     /**
+     * Get the current domain used in registration
+     * @return domain, or "" if not set
+     */
+    Q_INVOKABLE QString domain();
+    /**
      * Return devices RND registration status
      * @retval true device is registered
      * @retval false device is not registered
@@ -99,6 +104,10 @@
      */
     Q_INVOKABLE void setRelease(QString release, bool rnd=false);
     /**
+     * Set the domain string (usually something like nemo, jolla, ..)
+     */
+    Q_INVOKABLE void setDomain(QString domain);
+    /**
      * Unregister a device. This will clean all registration data from a 
device,
      * though will not touch the information on SSU server; the information 
there
      * has to be manually cleaned for a device we don't own anymore, but will 
be
--- repos.ini
+++ repos.ini
@@ -34,26 +34,26 @@
 
 [all]
 credentials=jolla
-
+credentials-url=https://%(ssuRegDomain)/%(ssuRegPath)/%1/credentials.xml
+register-url=https://%(ssuRegDomain)/%(ssuRegPath)/%1/register.xml
 
 [release]
-jolla=https://packages.example.com/releases/%(release)/jolla/%(arch)/
-jolla-bad=https://packages.example.com/notused-bad/%(release)/bad/%(arch)/
-mer-core=https://packages.example.com/%(release)/mer/%(arch)/%(debugSplit)/
-adaptation-common-main=https://packages.example.com/releases/%(release)/nemo/adaptation-%(deviceFamily)-common/%(arch)/
-adaptation=https://packages.example.com/releases/%(release)/nemo/adaptation-%(adaptation)/%(arch)/
-nemo=https://packages.example.com/releases/%(release)/nemo/platform/%(arch)/
-
+jolla=https://%(packagesDomain)/releases/%(release)/jolla/%(arch)/
+jolla-bad=https://%(packagesDomain)/notused-bad/%(release)/bad/%(arch)/
+mer-core=https://%(packagesDomain)/%(release)/mer/%(arch)/%(debugSplit)/
+adaptation-common-main=https://%(packagesDomain)/releases/%(release)/nemo/adaptation-%(deviceFamily)-common/%(arch)/
+adaptation=https://%(packagesDomain)/releases/%(release)/nemo/adaptation-%(adaptation)/%(arch)/
+nemo=https://%(packagesDomain)/releases/%(release)/nemo/platform/%(arch)/
 
 [rnd]
-mer-core=https://packages.example.com/mer/%(release)/builds/%(arch)/%(debugSplit)/
-adaptation-common-main=https://packages.example.com/nemo/%(release)/adaptation-%(adaptation)-common/%(arch)/
-adaptation=https://packages.example.com/nemo/%(release)/adaptation-%(deviceFamily)/%(arch)/
-nemo=https://packages.example.com/nemo/%(release)/platform/%(arch)/
-non-oss-bad=https://dump.example.com/pj:/non-oss-bad%(flavour)/%(release)_%(arch)/
-non-oss=https://dump.example.com/pj:/non-oss%(flavour)/%(release)_%(arch)/
-oss-bad=https://dump.example.com/pj:/oss-bad%(flavour)/%(release)_%(arch)/
-oss=https://dump.example.com/pj:/oss%(flavour)/%(release)_%(arch)/
+mer-core=https://%(packagesDomain)/mer/%(release)/builds/%(arch)/%(debugSplit)/
+adaptation-common-main=https://%(packagesDomain)/nemo/%(release)/adaptation-%(adaptation)-common/%(arch)/
+adaptation=https://%(packagesDomain)/nemo/%(release)/adaptation-%(deviceFamily)/%(arch)/
+nemo=https://%(packagesDomain)/nemo/%(release)/platform/%(arch)/
+non-oss-bad=https://%(dumpDomain)/pj:/non-oss-bad%(flavour)/%(release)_%(arch)/
+non-oss=https://%(dumpDomain)/pj:/non-oss%(flavour)/%(release)_%(arch)/
+oss-bad=https://%(dumpDomain)/pj:/oss-bad%(flavour)/%(release)_%(arch)/
+oss=https://%(dumpDomain)/pj:/oss%(flavour)/%(release)_%(arch)/
 
 [devel-flavour]
 flavour-pattern=
@@ -63,3 +63,16 @@
 
 [testing-flavour]
 flavour-pattern=:/testing
+
+[example-domain]
+dumpDomain=dump.example.com
+packagesDomain=packages.example.com
+ssuRegDomain=ssu.example.com
+ssuRegPath=ssu/device
+
+# fallback if domain is not matched or not set
+[default-domain]
+dumpDomain=dump.testing.com
+packagesDomain=packages.testing.com
+ssuRegDomain=ssu.testing.com
+ssuRegPath=ssu/device
--- ssu-defaults.ini
+++ ssu-defaults.ini
@@ -1,3 +1,12 @@
+# ssu configuration is located in /etc/ssu/ssu.ini
+# When ssu is initialized configVersion number in that file is compared
+# to configVersion in this file (/usr/share/ssu/ssu-defaults.ini). 
+# If this file has bigger version then upgrade takes place.
+# Starting from next bigger version block new key/value pairs are read and 
added to
+# the config (/etc/ssu/ssu.ini) assuming config doesn't have that key already.
+# Old keys can be removed from the config with special key called "cmd-remove"
+# Syntax cmd-remove=<old-key1>, <old-key2>, ...
+
 [General]
 configVersion=2
 
@@ -8,10 +17,8 @@
 release=
 adaptation=
 ca-certificate=
-credentials-url=https://example.com/ssu/device/%1/credentials.xml
-register-url=https://example.com/ssu/device/%1/register.xml
 credentials-scope=example
 
 [2]
 release=latest
-credentials-url-example=https://example.com
+
--- ssu.ini
+++ ssu.ini
@@ -6,8 +6,6 @@
 release=
 adaptation=
 ca-certificate=
-credentials-url=https://example.com/ssu/device/%1/credentials.xml
-register-url=https://example.com/ssu/device/%1/register.xml
 credentials-scope=example
 
 [repository-urls]
--- tests/ut_urlresolver/urlresolvertest.cpp
+++ tests/ut_urlresolver/urlresolvertest.cpp
@@ -60,6 +60,28 @@
   ssu.setRelease("latest", true);
 }
 
+void UrlResolverTest::checkDomain(){
+  QString credentialsUrl;
+  QString registerUrl;
+
+  // domain not defined -> default
+  ssu.setDomain("");
+  credentialsUrl = ssu.repoUrl("credentials-url");
+  QCOMPARE(credentialsUrl, 
QString("https://ssu.testing.com/ssu/device/%1/credentials.xml";));
+
+  // domain defined but not matching block -> default
+  ssu.setDomain("nevermind");
+  credentialsUrl = ssu.repoUrl("credentials-url");
+  QCOMPARE(credentialsUrl, 
QString("https://ssu.testing.com/ssu/device/%1/credentials.xml";));
+
+  ssu.setDomain("example");
+  QCOMPARE(ssu.domain(), QString("example"));
+  credentialsUrl = ssu.repoUrl("credentials-url");
+  QCOMPARE(credentialsUrl, 
QString("https://ssu.example.com/ssu/device/%1/credentials.xml";));
+  registerUrl = ssu.repoUrl("register-url");
+  QCOMPARE(registerUrl, 
QString("https://ssu.example.com/ssu/device/%1/register.xml";));
+
+}
 void UrlResolverTest::checkCleanUrl(){
   QHashIterator<QString, QString> i(rndRepos);
   while (i.hasNext()){
@@ -101,3 +123,5 @@
     QCOMPARE(url, i.value());
   }
 }
+
+
--- tests/ut_urlresolver/urlresolvertest.h
+++ tests/ut_urlresolver/urlresolvertest.h
@@ -22,6 +22,7 @@
     void cleanupTestCase();
     void checkFlavour();
     void checkRelease();
+    void checkDomain();
     void checkCleanUrl();
     void simpleRepoUrlLookup();
     void checkReleaseRepoUrls();



Reply via email to