Merge lp:~dobey/ubuntu-sso-client/no-more-ping into lp:ubuntu-sso-client

Proposed by dobey
Status: Merged
Approved by: dobey
Approved revision: 1040
Merged at revision: 1038
Proposed branch: lp:~dobey/ubuntu-sso-client/no-more-ping
Merge into: lp:ubuntu-sso-client
Diff against target: 361 lines (+18/-182)
11 files modified
ubuntu_sso/constants.py.in (+3/-8)
ubuntu_sso/networkstate/darwin.py (+1/-1)
ubuntu_sso/networkstate/tests/run_nwmgr_standalone.py (+1/-1)
ubuntu_sso/qt/current_user_sign_in_page.py (+1/-5)
ubuntu_sso/qt/email_verification_page.py (+1/-5)
ubuntu_sso/qt/sso_wizard_page.py (+1/-2)
ubuntu_sso/qt/tests/test_current_user_sign_in_page.py (+3/-19)
ubuntu_sso/qt/tests/test_email_verification.py (+3/-22)
ubuntu_sso/utils/__init__.py (+1/-33)
ubuntu_sso/utils/tests/test_common.py (+1/-84)
ubuntu_sso/utils/webclient/timestamp.py (+2/-2)
To merge this branch: bzr merge lp:~dobey/ubuntu-sso-client/no-more-ping
Reviewer Review Type Date Requested Status
Natalia Bidart (community) Approve
dobey (community) Abstain
Review via email: mp+230712@code.launchpad.net

This proposal supersedes a proposal from 2014-08-13.

Commit message

Remove the ping URL usage.
Update the Terms and Privacy URLs to point to login.ubuntu.com.
Update timestamp checking URL to point to login.ubuntu.com.

To post a comment you must log in.
Revision history for this message
dobey (dobey) wrote : Posted in a previous version of this proposal

/home/dobey/Projects/canonical/ubuntu-sso-client/no-more-ping/ubuntu_sso/utils/__init__.py:
    39: 'defer' imported but unused
    47: 'compat' imported but unused
    47: 'webclient' imported but unused

/home/dobey/Projects/canonical/ubuntu-sso-client/no-more-ping/ubuntu_sso/utils/tests/test_common.py:
    43: 'EMAIL' imported but unused
    43: 'TOKEN' imported but unused

review: Needs Fixing
Revision history for this message
dobey (dobey) :
review: Abstain
Revision history for this message
Natalia Bidart (nataliabidart) wrote :

Looks good!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ubuntu_sso/constants.py.in'
--- ubuntu_sso/constants.py.in 2013-06-12 14:26:06 +0000
+++ ubuntu_sso/constants.py.in 2014-08-13 21:12:50 +0000
@@ -36,7 +36,7 @@
36import platform36import platform
37import urllib37import urllib
3838
39from ubuntu_sso import SSO_UONE_BASE_URL39from ubuntu_sso import SSO_AUTH_BASE_URL
4040
41VERSION = '@VERSION@'41VERSION = '@VERSION@'
42PROJECT_NAME = '@PROJECT_NAME@'42PROJECT_NAME = '@PROJECT_NAME@'
@@ -45,10 +45,8 @@
4545
46# Ubuntu One sso constants46# Ubuntu One sso constants
47APP_NAME = u"Ubuntu One"47APP_NAME = u"Ubuntu One"
48TC_URL = u"%s/terms/" % SSO_UONE_BASE_URL48TC_URL = u"%s/terms/" % SSO_AUTH_BASE_URL
49POLICY_URL = u"%s/privacy/" % SSO_UONE_BASE_URL49POLICY_URL = u"%s/privacy/" % SSO_AUTH_BASE_URL
50BASE_PING_URL = \
51 u"%s/oauth/sso-finished-so-get-tokens/{email}" % SSO_UONE_BASE_URL
5250
5351
54def platform_data():52def platform_data():
@@ -59,6 +57,3 @@
59 # urlencode will not encode unicode, only bytes57 # urlencode will not encode unicode, only bytes
60 result = urllib.urlencode(result)58 result = urllib.urlencode(result)
61 return result59 return result
62
63# the result of platform_data is given by urlencode, encoded with ascii
64PING_URL = BASE_PING_URL + u"?" + platform_data().decode('ascii')
6560
=== modified file 'ubuntu_sso/networkstate/darwin.py'
--- ubuntu_sso/networkstate/darwin.py 2012-06-22 20:03:57 +0000
+++ ubuntu_sso/networkstate/darwin.py 2014-08-13 21:12:50 +0000
@@ -28,7 +28,7 @@
28from ubuntu_sso.logger import setup_logging28from ubuntu_sso.logger import setup_logging
29logger = setup_logging("ubuntu_sso.networkstate")29logger = setup_logging("ubuntu_sso.networkstate")
3030
31HOSTNAME_TO_CHECK = 'one.ubuntu.com'31HOSTNAME_TO_CHECK = 'login.ubuntu.com'
3232
33from ctypes import (33from ctypes import (
34 CDLL,34 CDLL,
3535
=== modified file 'ubuntu_sso/networkstate/tests/run_nwmgr_standalone.py'
--- ubuntu_sso/networkstate/tests/run_nwmgr_standalone.py 2012-06-27 21:58:15 +0000
+++ ubuntu_sso/networkstate/tests/run_nwmgr_standalone.py 2014-08-13 21:12:50 +0000
@@ -26,7 +26,7 @@
2626
27def my_cb(state):27def my_cb(state):
28 """simple callback just prints state"""28 """simple callback just prints state"""
29 print("one.ubuntu.com:", state)29 print("login.ubuntu.com:", state)
3030
31if __name__ == '__main__':31if __name__ == '__main__':
32 # test once with direct call:32 # test once with direct call:
3333
=== modified file 'ubuntu_sso/qt/current_user_sign_in_page.py'
--- ubuntu_sso/qt/current_user_sign_in_page.py 2012-12-04 19:28:44 +0000
+++ ubuntu_sso/qt/current_user_sign_in_page.py 2014-08-13 21:12:50 +0000
@@ -150,11 +150,7 @@
150 logger.info('CurrentUserSignInPage.login for: %s', email)150 logger.info('CurrentUserSignInPage.login for: %s', email)
151 password = compat.text_type(self.ui.password_edit.text())151 password = compat.text_type(self.ui.password_edit.text())
152 args = (self.app_name, email, password)152 args = (self.app_name, email, password)
153 if self.ping_url:153 f = self.backend.login
154 f = self.backend.login_and_ping
155 args = args + (self.ping_url,)
156 else:
157 f = self.backend.login
158154
159 self.hide_error()155 self.hide_error()
160 self.show_overlay()156 self.show_overlay()
161157
=== modified file 'ubuntu_sso/qt/email_verification_page.py'
--- ubuntu_sso/qt/email_verification_page.py 2012-12-04 19:28:44 +0000
+++ ubuntu_sso/qt/email_verification_page.py 2014-08-13 21:12:50 +0000
@@ -120,11 +120,7 @@
120 args = (self.app_name, self.email, self.password, code)120 args = (self.app_name, self.email, self.password, code)
121 self.hide_error()121 self.hide_error()
122 self.show_overlay()122 self.show_overlay()
123 if self.ping_url:123 f = self.backend.validate_email
124 f = self.backend.validate_email_and_ping
125 args = args + (self.ping_url,)
126 else:
127 f = self.backend.validate_email
128124
129 logger.info('Calling validate_email with email %r, password <hidden>, '125 logger.info('Calling validate_email with email %r, password <hidden>, '
130 'app_name %r and email_token %r.', self.email,126 'app_name %r and email_token %r.', self.email,
131127
=== modified file 'ubuntu_sso/qt/sso_wizard_page.py'
--- ubuntu_sso/qt/sso_wizard_page.py 2013-06-12 14:26:06 +0000
+++ ubuntu_sso/qt/sso_wizard_page.py 2014-08-13 21:12:50 +0000
@@ -45,7 +45,7 @@
45from twisted.internet import defer45from twisted.internet import defer
4646
47from ubuntu_sso import main47from ubuntu_sso import main
48from ubuntu_sso.constants import APP_NAME, TC_URL, POLICY_URL, PING_URL48from ubuntu_sso.constants import APP_NAME, TC_URL, POLICY_URL
49from ubuntu_sso.logger import setup_gui_logging, log_call49from ubuntu_sso.logger import setup_gui_logging, log_call
50from ubuntu_sso.qt import (50from ubuntu_sso.qt import (
51 ERROR_STYLE,51 ERROR_STYLE,
@@ -203,7 +203,6 @@
203203
204 # store common useful data provided by the app204 # store common useful data provided by the app
205 self.app_name = APP_NAME205 self.app_name = APP_NAME
206 self.ping_url = PING_URL
207 self.tc_url = TC_URL206 self.tc_url = TC_URL
208 self.policy_url = POLICY_URL207 self.policy_url = POLICY_URL
209 self.help_text = kwargs.get('help_text', '')208 self.help_text = kwargs.get('help_text', '')
210209
=== modified file 'ubuntu_sso/qt/tests/test_current_user_sign_in_page.py'
--- ubuntu_sso/qt/tests/test_current_user_sign_in_page.py 2013-03-21 13:49:36 +0000
+++ ubuntu_sso/qt/tests/test_current_user_sign_in_page.py 2014-08-13 21:12:50 +0000
@@ -136,25 +136,9 @@
136 self.ui._validate()136 self.ui._validate()
137 self.assertTrue(button.isEnabled())137 self.assertTrue(button.isEnabled())
138138
139 def test_login_with_ping(self):139 def test_login(self):
140 """Test the login method."""140 """Test the login method."""
141 self.patch(self.ui, "hide_error", self._set_called)141 self.patch(self.ui, "hide_error", self._set_called)
142 email = 'valid@email'
143 password = '123456'
144 self.ui.ui.email_edit.setText(email)
145 self.ui.ui.password_edit.setText(password)
146 self.ui.login()
147 self.assertEqual(self._overlay_show_counter, 1)
148 self.assertFalse(self.ui.isEnabled())
149 self.assert_backend_called('login_and_ping',
150 self.app_name, email, password, self.ui.ping_url)
151 expected = ((), {})
152 self.assertEqual(expected, self._called)
153
154 def test_login_without_ping(self):
155 """Test the login method."""
156 self.patch(self.ui, "hide_error", self._set_called)
157 self.ui.ping_url = ''
158 email = 'valid@email'142 email = 'valid@email'
159 password = '123456'143 password = '123456'
160 self.ui.ui.email_edit.setText(email)144 self.ui.ui.email_edit.setText(email)
161145
=== modified file 'ubuntu_sso/qt/tests/test_email_verification.py'
--- ubuntu_sso/qt/tests/test_email_verification.py 2013-03-21 13:49:36 +0000
+++ ubuntu_sso/qt/tests/test_email_verification.py 2014-08-13 21:12:50 +0000
@@ -126,28 +126,9 @@
126 self.assert_signal_emitted(self.ui.registrationSuccess, (email,),126 self.assert_signal_emitted(self.ui.registrationSuccess, (email,),
127 self.ui.on_email_validated, self.app_name, email)127 self.ui.on_email_validated, self.app_name, email)
128128
129 def test_validate_email_with_ping(self):129 def test_validate_email(self):
130 """Test the login method."""130 """Test the login method."""
131 self.patch(self.ui, "hide_error", self._set_called)131 self.patch(self.ui, "hide_error", self._set_called)
132 email = 'email@example.com'
133 password = 'password'
134 code = 'code'
135 self.ui.email = email
136 self.ui.password = password
137 self.ui.ui.verification_code_edit.setText(code)
138
139 self.ui.validate_email()
140
141 self.assert_backend_called('validate_email_and_ping',
142 self.app_name, email, password, code, self.ui.ping_url)
143 expected = ((), {})
144 self.assertEqual(expected, self._called)
145 self.assertEqual(self._overlay_show_counter, 1)
146
147 def test_validate_email_without_ping(self):
148 """Test the login method."""
149 self.patch(self.ui, "hide_error", self._set_called)
150 self.ui.ping_url = ''
151 email = 'email@example.com'132 email = 'email@example.com'
152 password = 'password'133 password = 'password'
153 code = 'code'134 code = 'code'
154135
=== modified file 'ubuntu_sso/utils/__init__.py'
--- ubuntu_sso/utils/__init__.py 2013-05-08 18:38:36 +0000
+++ ubuntu_sso/utils/__init__.py 2014-08-13 21:12:50 +0000
@@ -36,7 +36,6 @@
36from dirspec.basedir import load_config_paths36from dirspec.basedir import load_config_paths
37from dirspec.utils import get_program_path37from dirspec.utils import get_program_path
3838
39from twisted.internet import defer
40from twisted.python import procutils39from twisted.python import procutils
4140
42from ubuntu_sso import (BACKEND_EXECUTABLE,41from ubuntu_sso import (BACKEND_EXECUTABLE,
@@ -44,7 +43,6 @@
44 UI_PROXY_CREDS_DIALOG,43 UI_PROXY_CREDS_DIALOG,
45 UI_SSL_DIALOG)44 UI_SSL_DIALOG)
46from ubuntu_sso.logger import setup_logging45from ubuntu_sso.logger import setup_logging
47from ubuntu_sso.utils import compat, webclient
4846
4947
50logger = setup_logging("ubuntu_sso.utils")48logger = setup_logging("ubuntu_sso.utils")
@@ -166,35 +164,5 @@
166 return ssl_cert_location164 return ssl_cert_location
167165
168166
169@defer.inlineCallbacks
170def ping_url(url, email, credentials):167def ping_url(url, email, credentials):
171 """Ping the 'url' with the 'email' attached to it.168 """Unused -- it was formerly used to let U1 know about new accounts."""
172
173 Sign the request with 'credentials'. The url must not be None.
174
175 """
176 logger.info('Pinging server using url: %r, email: %r.',
177 url, email)
178 assert isinstance(url, compat.text_type), 'Url %r must be unicode' % url
179
180 target_url = url
181 try:
182 target_url = url.format(email=email)
183 except IndexError: # tuple index out of range
184 target_url = url.format(email) # format the first substitution
185
186 if target_url == url:
187 logger.debug('Original url (%r) could not be formatted, '
188 'appending email (%r).', url, email)
189 assert url.endswith('/'), 'Url %r must end with /.' % url
190 target_url = url + email
191
192 wc = webclient.webclient_factory()
193 try:
194 logger.debug('Opening the url %r with webclient.request.', url)
195 response = yield wc.request(target_url, oauth_credentials=credentials)
196 logger.debug('Url %r opened. Response content: %r.',
197 url, response.content)
198 defer.returnValue(response)
199 finally:
200 wc.shutdown()
201169
=== modified file 'ubuntu_sso/utils/tests/test_common.py'
--- ubuntu_sso/utils/tests/test_common.py 2013-05-22 20:14:40 +0000
+++ ubuntu_sso/utils/tests/test_common.py 2014-08-13 21:12:50 +0000
@@ -40,7 +40,7 @@
40from ubuntuone.devtools.testing.txwebserver import HTTPWebServer40from ubuntuone.devtools.testing.txwebserver import HTTPWebServer
4141
42from ubuntu_sso import utils42from ubuntu_sso import utils
43from ubuntu_sso.tests import TestCase, EMAIL, TOKEN43from ubuntu_sso.tests import TestCase
4444
45CONSTANTS_MODULE = 'ubuntu_sso.constants'45CONSTANTS_MODULE = 'ubuntu_sso.constants'
46NOT_DEFINED = object()46NOT_DEFINED = object()
@@ -238,86 +238,3 @@
238 # pylint: disable=E1101238 # pylint: disable=E1101
239 root = RootResource()239 root = RootResource()
240 super(MockWebServer, self).__init__(root)240 super(MockWebServer, self).__init__(root)
241
242
243class FakedError(Exception):
244 """A mock, test, sample, and fake exception."""
245
246
247class PingUrlTestCase(TestCase):
248 """Test suite for the URL pinging."""
249
250 @defer.inlineCallbacks
251 def setUp(self):
252 yield super(PingUrlTestCase, self).setUp()
253 self.url = 'http://example.com/'
254 self.wc = FakeWebclient()
255 self.patch(utils.webclient, "webclient_factory",
256 lambda *args: self.wc)
257
258 @defer.inlineCallbacks
259 def test_ping_url(self):
260 """The url is opened."""
261 yield utils.ping_url(url=self.url, email=EMAIL, credentials=TOKEN)
262
263 args, _kwargs = self.wc.called[0]
264 self.assertEqual(args[0], self.url + EMAIL)
265
266 @defer.inlineCallbacks
267 def test_ping_url_result(self):
268 """The result is returned."""
269 result = yield utils.ping_url(url=self.url, email=EMAIL,
270 credentials=TOKEN)
271 self.assertEqual(result.content, 'response')
272
273 @defer.inlineCallbacks
274 def test_request_is_signed_with_credentials(self):
275 """The http request to url is signed with the credentials."""
276 yield utils.ping_url(url=self.url, email=EMAIL, credentials=TOKEN)
277
278 _args, kwargs = self.wc.called[0]
279 self.assertEqual(kwargs["oauth_credentials"], TOKEN)
280
281 @defer.inlineCallbacks
282 def test_ping_url_formatting(self):
283 """The email is added as the first formatting argument."""
284 self.url = 'http://example.com/{email}/something/else'
285 yield utils.ping_url(url=self.url, email=EMAIL, credentials=TOKEN)
286
287 expected = self.url.format(email=EMAIL)
288 assert len(self.wc.called) > 0
289 args, _kwargs = self.wc.called[0]
290 self.assertEqual(expected, args[0])
291
292 @defer.inlineCallbacks
293 def test_ping_url_formatting_with_query_params(self):
294 """The email is added as the first formatting argument."""
295 self.url = 'http://example.com/{email}?something=else'
296 yield utils.ping_url(url=self.url, email=EMAIL, credentials=TOKEN)
297
298 expected = self.url.format(email=EMAIL)
299 assert len(self.wc.called) > 0
300 args, _kwargs = self.wc.called[0]
301 self.assertEqual(expected, args[0])
302
303 @defer.inlineCallbacks
304 def test_ping_url_formatting_no_email_kwarg(self):
305 """The email is added as the first formatting argument."""
306 self.url = 'http://example.com/{0}/yadda/?something=else'
307 yield utils.ping_url(url=self.url, email=EMAIL, credentials=TOKEN)
308
309 expected = self.url.format(EMAIL)
310 assert len(self.wc.called) > 0
311 args, _kwargs = self.wc.called[0]
312 self.assertEqual(expected, args[0])
313
314 @defer.inlineCallbacks
315 def test_ping_url_formatting_no_format(self):
316 """The email is appended if formatting could not be accomplished."""
317 self.url = 'http://example.com/yadda/'
318 yield utils.ping_url(url=self.url, email=EMAIL, credentials=TOKEN)
319
320 expected = self.url + EMAIL
321 assert len(self.wc.called) > 0
322 args, _kwargs = self.wc.called[0]
323 self.assertEqual(expected, args[0])
324241
=== modified file 'ubuntu_sso/utils/webclient/timestamp.py'
--- ubuntu_sso/utils/webclient/timestamp.py 2013-04-19 15:32:17 +0000
+++ ubuntu_sso/utils/webclient/timestamp.py 2014-08-13 21:12:50 +0000
@@ -32,7 +32,7 @@
3232
33from twisted.internet import defer33from twisted.internet import defer
3434
35from ubuntu_sso import SSO_UONE_BASE_URL35from ubuntu_sso import SSO_AUTH_BASE_URL
36from ubuntu_sso.logger import setup_logging36from ubuntu_sso.logger import setup_logging
3737
38logger = setup_logging("ubuntu_sso.utils.webclient.timestamp")38logger = setup_logging("ubuntu_sso.utils.webclient.timestamp")
@@ -44,7 +44,7 @@
4444
45 CHECKING_INTERVAL = 60 * 60 # in seconds45 CHECKING_INTERVAL = 60 * 60 # in seconds
46 ERROR_INTERVAL = 30 # in seconds46 ERROR_INTERVAL = 30 # in seconds
47 SERVER_IRI = u"%s/api/time" % SSO_UONE_BASE_URL47 SERVER_IRI = SSO_AUTH_BASE_URL
4848
49 def __init__(self, webclient_class):49 def __init__(self, webclient_class):
50 """Initialize this instance."""50 """Initialize this instance."""

Subscribers

People subscribed via source and target branches