Merge lp:~ken-vandine/ubuntu-system-settings/rtm-check-hash into lp:ubuntu-system-settings/rtm-14.09

Proposed by Ken VanDine
Status: Rejected
Rejected by: Sebastien Bacher
Proposed branch: lp:~ken-vandine/ubuntu-system-settings/rtm-check-hash
Merge into: lp:ubuntu-system-settings/rtm-14.09
Diff against target: 224 lines (+77/-5)
7 files modified
plugins/system-update/PageComponent.qml (+1/-0)
plugins/system-update/download_tracker.cpp (+3/-4)
plugins/system-update/download_tracker.h (+5/-1)
plugins/system-update/network/network.cpp (+2/-0)
plugins/system-update/update.cpp (+1/-0)
plugins/system-update/update.h (+5/-0)
tests/autopilot/ubuntu_system_settings/utils/mock_update_click_server.py (+60/-0)
To merge this branch: bzr merge lp:~ken-vandine/ubuntu-system-settings/rtm-check-hash
Reviewer Review Type Date Requested Status
Sebastien Bacher (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+247489@code.launchpad.net

Commit message

[system-update] Add support for checksum validation.

Description of the change

This branch uses the download manager checksum support. Rather than checking for the checksum in the system settings application this is relayed to the download manager which will check the file against the given signature. If the signature passes everything continues as expected else, udm will emit an error signal and the download will be considered a failure.

Instructions to test this can be found in the test plan https://wiki.ubuntu.com/Process/Merges/TestPlan/ubuntu-system-settings

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Sebastien Bacher (seb128) wrote :

Ken, do you have hints on how to test those changes?

Small stylistic comments
- why do you reorder an include in non alphabetic order?
- the extra new line after includes don't look necessary

review: Needs Information
974. By Ken VanDine

reorder includes to be alphabetical and removed a blank line

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Sebastien Bacher (seb128) wrote :

thanks

review: Approve
Revision history for this message
Sebastien Bacher (seb128) wrote :

seems like we are not doing more rtm landing, so cleaning the list a bit, that one is rather going to be including with the vivid rebase

Unmerged revisions

974. By Ken VanDine

reorder includes to be alphabetical and removed a blank line

973. By Ken VanDine

[system-update] Add support for checksum validation.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'plugins/system-update/PageComponent.qml'
--- plugins/system-update/PageComponent.qml 2015-01-30 18:36:21 +0000
+++ plugins/system-update/PageComponent.qml 2015-02-26 19:00:45 +0000
@@ -538,6 +538,7 @@
538 packageName: modelData.packageName538 packageName: modelData.packageName
539 clickToken: modelData.clickToken539 clickToken: modelData.clickToken
540 download: modelData.downloadUrl540 download: modelData.downloadUrl
541 downloadSha512: modelData.downloadSha512
541542
542 onFinished: {543 onFinished: {
543 progress.visible = false;544 progress.visible = false;
544545
=== modified file 'plugins/system-update/download_tracker.cpp'
--- plugins/system-update/download_tracker.cpp 2015-01-15 11:08:33 +0000
+++ plugins/system-update/download_tracker.cpp 2015-02-26 19:00:45 +0000
@@ -1,5 +1,5 @@
1/*1/*
2 * Copyright (C) 2014 - Canonical Ltd.2 * Copyright (C) 2014-2015 - Canonical Ltd.
3 *3 *
4 * This program is free software: you can redistribute it and/or modify it4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License, as5 * under the terms of the GNU Lesser General Public License, as
@@ -18,9 +18,7 @@
18 * Authored by: Diego Sarmentero <diego.sarmentero@canonical.com>18 * Authored by: Diego Sarmentero <diego.sarmentero@canonical.com>
19 */19 */
2020
21#include <QDebug>
22#include <QProcessEnvironment>21#include <QProcessEnvironment>
23
24#include <ubuntu/download_manager/download_struct.h>22#include <ubuntu/download_manager/download_struct.h>
25#include <ubuntu/download_manager/error.h>23#include <ubuntu/download_manager/error.h>
2624
@@ -31,6 +29,7 @@
31 const QString DOWNLOAD_COMMAND = "post-download-command";29 const QString DOWNLOAD_COMMAND = "post-download-command";
32 const QString APP_ID = "app_id";30 const QString APP_ID = "app_id";
33 const QString PKCON_COMMAND = "pkcon";31 const QString PKCON_COMMAND = "pkcon";
32 const QString DOWNLOAD_MANAGER_SHA512 = "sha512";
34}33}
3534
36namespace UpdatePlugin {35namespace UpdatePlugin {
@@ -88,7 +87,7 @@
88 vmap[APP_ID] = m_packageName;87 vmap[APP_ID] = m_packageName;
89 StringMap map;88 StringMap map;
90 map[X_CLICK_TOKEN] = m_clickToken;89 map[X_CLICK_TOKEN] = m_clickToken;
91 DownloadStruct dstruct = DownloadStruct(m_downloadUrl, vmap, map);90 DownloadStruct dstruct(m_downloadUrl, m_download_sha512, DOWNLOAD_MANAGER_SHA512, vmap, map);
92 m_manager->createDownload(dstruct);91 m_manager->createDownload(dstruct);
93 }92 }
94}93}
9594
=== modified file 'plugins/system-update/download_tracker.h'
--- plugins/system-update/download_tracker.h 2015-01-14 11:23:42 +0000
+++ plugins/system-update/download_tracker.h 2015-02-26 19:00:45 +0000
@@ -42,6 +42,7 @@
42 Q_PROPERTY(QString clickToken READ clickToken WRITE setClickToken)42 Q_PROPERTY(QString clickToken READ clickToken WRITE setClickToken)
43 Q_PROPERTY(QString download READ download WRITE setDownload)43 Q_PROPERTY(QString download READ download WRITE setDownload)
44 Q_PROPERTY(QString packageName READ packageName WRITE setPackageName)44 Q_PROPERTY(QString packageName READ packageName WRITE setPackageName)
45 Q_PROPERTY(QString downloadSha512 READ downloadSha512 WRITE setDownloadSha512)
45 Q_PROPERTY(int progress READ progress NOTIFY progressChanged)46 Q_PROPERTY(int progress READ progress NOTIFY progressChanged)
4647
47public:48public:
@@ -54,10 +55,12 @@
54 QString download() { return m_downloadUrl; }55 QString download() { return m_downloadUrl; }
55 QString clickToken() { return m_clickToken; }56 QString clickToken() { return m_clickToken; }
56 QString packageName() { return m_packageName; }57 QString packageName() { return m_packageName; }
58 QString downloadSha512() { return m_download_sha512; }
59 int progress() { return m_progress; }
57 void setDownload(const QString& url);60 void setDownload(const QString& url);
58 void setClickToken(const QString& token);61 void setClickToken(const QString& token);
59 void setPackageName(const QString& package);62 void setPackageName(const QString& package);
60 int progress() { return m_progress; }63 void setDownloadSha512(const QString &sha512) { m_download_sha512 = sha512; }
6164
62public Q_SLOTS:65public Q_SLOTS:
63 void bindDownload(Download* download);66 void bindDownload(Download* download);
@@ -84,6 +87,7 @@
84 Download* m_download = nullptr;87 Download* m_download = nullptr;
85 Manager* m_manager = nullptr;88 Manager* m_manager = nullptr;
86 int m_progress = 0;89 int m_progress = 0;
90 QString m_download_sha512 = QString::null;
8791
88 void startService();92 void startService();
89 QString getPkconCommand();93 QString getPkconCommand();
9094
=== modified file 'plugins/system-update/network/network.cpp'
--- plugins/system-update/network/network.cpp 2014-09-18 13:50:15 +0000
+++ plugins/system-update/network/network.cpp 2015-02-26 19:00:45 +0000
@@ -107,6 +107,7 @@
107 QString version = object.value("version").toString();107 QString version = object.value("version").toString();
108 QString icon_url = object.value("icon_url").toString();108 QString icon_url = object.value("icon_url").toString();
109 QString url = object.value("download_url").toString();109 QString url = object.value("download_url").toString();
110 QString download_sha512 = object.value("download_sha512").toString();
110 int size = object.value("binary_filesize").toVariant().toInt();111 int size = object.value("binary_filesize").toVariant().toInt();
111 if (m_apps.contains(name)) {112 if (m_apps.contains(name)) {
112 m_apps[name]->setRemoteVersion(version);113 m_apps[name]->setRemoteVersion(version);
@@ -114,6 +115,7 @@
114 m_apps[name]->setIconUrl(icon_url);115 m_apps[name]->setIconUrl(icon_url);
115 m_apps[name]->setDownloadUrl(url);116 m_apps[name]->setDownloadUrl(url);
116 m_apps[name]->setBinaryFilesize(size);117 m_apps[name]->setBinaryFilesize(size);
118 m_apps[name]->setDownloadSha512(download_sha512);
117 updates = true;119 updates = true;
118 }120 }
119 }121 }
120122
=== modified file 'plugins/system-update/update.cpp'
--- plugins/system-update/update.cpp 2015-01-14 11:23:42 +0000
+++ plugins/system-update/update.cpp 2015-02-26 19:00:45 +0000
@@ -32,6 +32,7 @@
32 QObject(parent),32 QObject(parent),
33 m_binary_filesize(0),33 m_binary_filesize(0),
34 m_click_url(""),34 m_click_url(""),
35 m_clickToken(""),
35 m_downloadUrl(""),36 m_downloadUrl(""),
36 m_download_progress(0),37 m_download_progress(0),
37 m_error(""),38 m_error(""),
3839
=== modified file 'plugins/system-update/update.h'
--- plugins/system-update/update.h 2014-09-12 19:12:36 +0000
+++ plugins/system-update/update.h 2015-02-26 19:00:45 +0000
@@ -57,6 +57,7 @@
57 NOTIFY downloadProgressChanged)57 NOTIFY downloadProgressChanged)
58 Q_PROPERTY(QString downloadUrl READ downloadUrl NOTIFY downloadUrlChanged)58 Q_PROPERTY(QString downloadUrl READ downloadUrl NOTIFY downloadUrlChanged)
59 Q_PROPERTY(QString clickToken READ clickToken NOTIFY clickTokenChanged)59 Q_PROPERTY(QString clickToken READ clickToken NOTIFY clickTokenChanged)
60 Q_PROPERTY(QString downloadSha512 READ downloadSha512 NOTIFY downloadSha512Changed)
6061
61Q_SIGNALS:62Q_SIGNALS:
62 void systemUpdateChanged();63 void systemUpdateChanged();
@@ -75,6 +76,7 @@
75 void downloadUrlChanged();76 void downloadUrlChanged();
76 void clickTokenChanged();77 void clickTokenChanged();
77 void packageNameChanged();78 void packageNameChanged();
79 void downloadSha512Changed();
7880
79public:81public:
80 explicit Update(QObject *parent = 0);82 explicit Update(QObject *parent = 0);
@@ -97,6 +99,7 @@
97 const QString& getClickUrl() const { return m_click_url; }99 const QString& getClickUrl() const { return m_click_url; }
98 QString downloadUrl() { return m_downloadUrl; }100 QString downloadUrl() { return m_downloadUrl; }
99 QString clickToken() { return m_clickToken; }101 QString clickToken() { return m_clickToken; }
102 QString downloadSha512() { return m_download_sha512; }
100103
101 void setSystemUpdate(bool isSystem);104 void setSystemUpdate(bool isSystem);
102 void initializeApplication(QString packagename, QString title,105 void initializeApplication(QString packagename, QString title,
@@ -115,6 +118,7 @@
115 void setClickUrl(const QString &url) { m_click_url = url; }118 void setClickUrl(const QString &url) { m_click_url = url; }
116 void setDownloadUrl(const QString &url);119 void setDownloadUrl(const QString &url);
117 void setClickToken(const QString &token) { m_clickToken = token; Q_EMIT clickTokenChanged(); }120 void setClickToken(const QString &token) { m_clickToken = token; Q_EMIT clickTokenChanged(); }
121 void setDownloadSha512(const QString &sha512) { m_download_sha512 = sha512; Q_EMIT downloadSha512Changed(); }
118122
119private:123private:
120 int m_binary_filesize;124 int m_binary_filesize;
@@ -134,6 +138,7 @@
134 bool m_update;138 bool m_update;
135 bool m_update_ready;139 bool m_update_ready;
136 bool m_update_state;140 bool m_update_state;
141 QString m_download_sha512;
137142
138 bool getIgnoreUpdates();143 bool getIgnoreUpdates();
139};144};
140145
=== added file 'tests/autopilot/ubuntu_system_settings/utils/mock_update_click_server.py'
--- tests/autopilot/ubuntu_system_settings/utils/mock_update_click_server.py 1970-01-01 00:00:00 +0000
+++ tests/autopilot/ubuntu_system_settings/utils/mock_update_click_server.py 2015-02-26 19:00:45 +0000
@@ -0,0 +1,60 @@
1import json
2import threading
3from http.server import BaseHTTPRequestHandler, HTTPServer
4
5
6KEEP_ALIVE = True
7
8
9class MyHandler(BaseHTTPRequestHandler):
10
11 def do_HEAD(self):
12 self.send_response(200)
13 self.send_header("X-Click-Token", "X-Click-Token")
14 self.end_headers()
15
16 def response_item_info(self):
17 response = [{
18 "name": "com.ubuntu.calculator",
19 "version": "9.0",
20 "icon_url": ("https://raw.githubusercontent.com/ninja-ide/"
21 "ninja-ide/master/ninja_ide/img/ninja_icon.png"),
22 "download_url": ("https://public.apps.ubuntu.com/download/com."
23 "ubuntu/calculator/com.ubuntu.calculator_1"
24 ".3.329_all.click"),
25 "binary_filesize": 3423,
26 "download_sha512": "343244fsdfdsffs"
27 }]
28 self.send_response(200)
29 self.send_header("Content-type", "application/json")
30 self.end_headers()
31 self.wfile.write(bytes(json.dumps(response), 'UTF-8'))
32
33 def do_POST(self):
34 """Respond to a POST request."""
35 self.do_GET()
36
37 def do_GET(self):
38 """Respond to a GET request."""
39 if self.path.find("iteminfo/") != -1:
40 self.response_item_info()
41 elif self.path.find("shutdown") != -1:
42 global KEEP_ALIVE
43 KEEP_ALIVE = False
44
45
46def run_click_server():
47 server_address = ('', 8000)
48 httpd = HTTPServer(server_address, MyHandler)
49 global KEEP_ALIVE
50 print('start')
51 while KEEP_ALIVE:
52 httpd.handle_request()
53
54
55def run_mocked_settings():
56 t = threading.Thread(target=run_click_server)
57 t.start()
58
59
60run_mocked_settings()

Subscribers

People subscribed via source and target branches