commit 906bec40b28a7e49ffba3a6e1c646bd81e5441b9 Author: hiro hiro@torproject.org Date: Thu Jan 9 12:24:10 2020 +0100
Fix current issue with gettor strings splitting #32906 Add tests to check sent email messages. --- gettor/services/email/sendmail.py | 82 +++++++++++++++++++++++---------------- gettor/utils/options.py | 8 ++-- gettor/utils/settings.py | 7 ++-- scripts/process_email | 6 ++- share/locale/es.json | 2 +- tests/conftests.py | 2 +- tests/test_email_service.py | 35 ++++++++++++++++- tests/test_twitter.py | 1 + 8 files changed, 98 insertions(+), 45 deletions(-)
diff --git a/gettor/services/email/sendmail.py b/gettor/services/email/sendmail.py index 53d90f6..356f6c4 100644 --- a/gettor/services/email/sendmail.py +++ b/gettor/services/email/sendmail.py @@ -100,6 +100,52 @@ class Sendmail(object): ).addCallback(self.sendmail_callback).addErrback(self.sendmail_errback)
+ def build_help_body_message(self): + body_msg = strings._("help_body_intro") + body_msg += strings._("help_body_paragraph") + body_msg += strings._("help_body_support") + + return body_msg + + + def build_link_strings(self, links, platform, locale): + """ + Build the links strings + """ + + link_msg = None + + for link in links: + provider = link[5] + version = link[4] + arch = link[3] + url = link[0] + file = link[7] + sig_url = url + ".asc" + + link_str = "Tor Browser {} for {}-{}-{} ({}): {}\n".format( + version, platform, locale, arch, provider, url + ) + + link_str += "Signature file: {}\n".format(sig_url) + + link_msg = "{}\n{}".format(link_msg, link_str) + + return link_msg, file + + + def build_body_message(self, link_msg, platform, file): + body_msg = strings._("links_body_platform").format(platform) + body_msg += strings._("links_body_links").format(link_msg) + body_msg += strings._("links_body_archive") + body_msg += strings._("links_body_internet_archive") + body_msg += strings._("links_body_google_drive") + body_msg += strings._("links_body_internet_archive").format(file) + body_msg += strings._("links_body_ending") + + return body_msg + + @defer.inlineCallbacks def get_new(self): """ @@ -132,9 +178,7 @@ class Sendmail(object): ) )
- body_msg = strings._("help_body_intro") - body_msg += strings._("help_body_paragraph") - body_msg += strings._("help_body_support") + body_msg = self.build_help_body_message()
yield self.sendmail( email_addr=id, @@ -179,36 +223,8 @@ class Sendmail(object): )
# build message - link_msg = None - file = "" - - for link in links: - provider = link[5] - version = link[4] - arch = link[3] - url = link[0] - file = link[7] - sig_url = url + ".asc" - - link_str = "Tor Browser {} for {}-{}-{} ({}): {}\n".format( - version, platform, locale, arch, provider, url - ) - - link_str += "Signature file: {}\n".format(sig_url) - - if link_msg: - link_msg = "{}\n{}".format(link_msg, link_str) - else: - link_msg = link_str - - body_msg = strings._("links_body_platform").format(platform) - body_msg += strings._("links_body_links").format(link_msg) - body_msg += strings._("links_body_archive") - body_msg += strings._("links_body_internet_archive") - body_msg += strings._("links_body_google_drive") - body_msg += strings._("links_body_internet_archive").format(file) - body_msg += strings._("links_body_ending") - + link_msg, file = self.build_link_strings(links, platform, locale) + body_msg = self.build_body_message(link_msg, platform, file) subject_msg = strings._("links_subject")
hid = hashlib.sha256(id.encode('utf-8')) diff --git a/gettor/utils/options.py b/gettor/utils/options.py index 8504f42..6f8d693 100644 --- a/gettor/utils/options.py +++ b/gettor/utils/options.py @@ -3,9 +3,7 @@ This file is part of GetTor, a service providing alternative methods to download the Tor Browser.
-:authors: Hiro hiro@torproject.org - parser = argparse.ArgumentParser(formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=28)) - parser.add_argument('--config', metavar='config', please also see AUTHORS file +:authors: Hiro hiro@torproject.org please also see AUTHORS file :copyright: (c) 2008-2014, The Tor Project, Inc. (c) 2014, all entities within the AUTHORS file :license: see included LICENSE for information @@ -24,11 +22,13 @@ def load_settings(config): settings.load() return settings
-def parse_settings(locale, config): +def parse_settings(locale="en", config=None): """ Parse settings and loads strings in a given locale This function needs to be rewritten considering passing a locale and returing translated strings + """ + strings.load_strings(locale) return load_settings(config) diff --git a/gettor/utils/settings.py b/gettor/utils/settings.py index a519755..67c31ec 100644 --- a/gettor/utils/settings.py +++ b/gettor/utils/settings.py @@ -33,7 +33,8 @@ class Settings(object): self.filename = config else: # Default config - self.filename = self.build_filename() + default_config = "/home/gettor/gettor/gettor.conf.json" + self.filename = self.build_filename(default_config)
# Dictionary of available languages, # mapped to the language name, in that language @@ -41,11 +42,11 @@ class Settings(object): self._version = strings.get_version() self._settings = {}
- def build_filename(self): + def build_filename(self, file): """ Returns the path of the settings file. """ - return strings.get_resource_path('/home/gettor/gettor/gettor.conf.json', strings.find_run_dir()) + return strings.get_resource_path(file, strings.find_run_dir())
def load(self): """ diff --git a/scripts/process_email b/scripts/process_email index a5da6eb..37c4e0b 100755 --- a/scripts/process_email +++ b/scripts/process_email @@ -23,7 +23,8 @@ from gettor.utils import options
@defer.inlineCallbacks def process_email(message): - settings = options.parse_settings() + + settings = options.parse_settings("en", "/home/gettor/gettor/gettor.conf.json")
try: ep = EmailParser(settings, "gettor@torproject.org") @@ -49,7 +50,8 @@ def main():
if __name__ == '__main__': - settings = options.parse_settings() + + settings = options.parse_settings("en", "/home/gettor/gettor/gettor.conf.json") email_parser_logfile = settings.get("email_parser_logfile") log.startLogging(open(email_parser_logfile, 'a')) log.msg("New email request received.", system="process email") diff --git a/share/locale/es.json b/share/locale/es.json index be7dd33..8ac5705 100644 --- a/share/locale/es.json +++ b/share/locale/es.json @@ -15,7 +15,7 @@ "help_config": "Custom config file location (optional)", "smtp_links_subject": "[GetTor] Links for your request", "smtp_mirrors_subject": "[GetTor] Mirrors", - "smtp_help_subject": "[GetTor] Help", + "smtp_help_subject": "[GetTor] Ayuda", "smtp_unsupported_locale_subject": "[GetTor] Unsupported locale", "smtp_unsupported_locale_msg": "The locale you requested '{}' is not supported." } diff --git a/tests/conftests.py b/tests/conftests.py index f5194a5..cbb4d28 100644 --- a/tests/conftests.py +++ b/tests/conftests.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals from gettor.utils import options from gettor.utils import strings from gettor.utils import twitter -from gettor.services.email import sendmail +from gettor.services.email.sendmail import Sendmail from gettor.services.twitter import twitterdm from gettor.parse.email import EmailParser, AddressError, DKIMError from gettor.parse.twitter import TwitterParser diff --git a/tests/test_email_service.py b/tests/test_email_service.py index 8e60f7a..ff364f0 100644 --- a/tests/test_email_service.py +++ b/tests/test_email_service.py @@ -14,8 +14,20 @@ class EmailServiceTests(unittest.TestCase): timeout = 15 def setUp(self): self.settings = conftests.options.parse_settings("en","./gettor.conf.json") - self.sm_client = conftests.sendmail.Sendmail(self.settings) + self.sm_client = conftests.Sendmail(self.settings) self.locales = conftests.strings.get_locales() + self.links = [ + [ + "https://gitlab.com/thetorproject/gettorbrowser/raw/torbrowser-releases/TorBr...", + "osx", + "en-US", + "64", + "9.0.3", + "gitlab", + "ACTIVE", + "TorBrowser-9.0.3-osx64_en-US.dmg" + ] + ]
def tearDown(self): print("tearDown()") @@ -76,6 +88,27 @@ class EmailServiceTests(unittest.TestCase): self.assertEqual(request["platform"], "osx") self.assertEqual(request["language"], "en")
+ def test_sent_links_message(self): + ep = self.sm_client + links = self.links + link_msg, file = ep.build_link_strings(links, "osx", "en") + assert "https://gitlab.com/thetorproject/gettorbrowser/raw/torbrowser-releases/TorBr..." in link_msg + assert "osx" in link_msg + + self.assertEqual("TorBrowser-9.0.3-osx64_en-US.dmg", file) + + def test_sent_body_message(self): + ep = self.sm_client + links = self.links + link_msg, file = ep.build_link_strings(links, "osx", "en") + body_msg = ep.build_body_message(link_msg, "osx", file) + assert "You requested Tor Browser for osx" in body_msg + + def test_help_body_message(self): + ep = self.sm_client + help_msg = ep.build_help_body_message() + assert "This is how you can request a tor browser bundle link" in help_msg +
if __name__ == "__main__": unittest.main() diff --git a/tests/test_twitter.py b/tests/test_twitter.py index 7458cfc..a1515d0 100644 --- a/tests/test_twitter.py +++ b/tests/test_twitter.py @@ -20,6 +20,7 @@ class TwitterTests(unittest.TestCase):
def test_load_messages(self): data = self.tw_client.twitter_data() + print(data) assert data['events']