diff options
| author | Denis Costa <deniscostadsc@gmail.com> | 2016-09-23 12:36:36 -0300 | 
|---|---|---|
| committer | Denis Costa <deniscostadsc@gmail.com> | 2016-09-23 12:39:27 -0300 | 
| commit | 563bee8fc23a0858f8e6e9711b00c80df8f816ab (patch) | |
| tree | 5e8167eec5b07872b69f1c228949bd9d5b3c5ab1 | |
| parent | e9426843d8d772317f364347002bddb4f3ddc10d (diff) | |
Adds translation to welcome mail.
| -rw-r--r-- | service/pixelated/adapter/model/mail.py | 9 | ||||
| -rw-r--r-- | service/pixelated/adapter/welcome_mail.py | 6 | ||||
| -rw-r--r-- | service/pixelated/assets/welcome.mail.en-US (renamed from service/pixelated/assets/welcome.mail) | 0 | ||||
| -rw-r--r-- | service/pixelated/assets/welcome.mail.pt-BR | 80 | ||||
| -rw-r--r-- | service/pixelated/resources/login_resource.py | 12 | ||||
| -rw-r--r-- | service/test/unit/resources/test_login_resource.py | 24 | ||||
| -rw-r--r-- | service/test/unit/test_welcome_mail.py | 4 | 
7 files changed, 120 insertions, 15 deletions
| diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py index a24818c0..a5702a20 100644 --- a/service/pixelated/adapter/model/mail.py +++ b/service/pixelated/adapter/model/mail.py @@ -13,10 +13,8 @@  #  # You should have received a copy of the GNU Affero General Public License  # along with Pixelated. If not, see <http://www.gnu.org/licenses/>. -import os  import re  import logging -from email import message_from_file  from email.mime.text import MIMEText  from email.header import Header  from hashlib import sha256 @@ -217,10 +215,3 @@ class InputMail(Mail):                  input_mail.body = unicode(payload.as_string())          input_mail._mime = input_mail.to_mime_multipart()          return input_mail - - -def welcome_mail(): -    current_path = os.path.dirname(os.path.abspath(__file__)) -    with open(os.path.join(current_path, '..', '..', 'assets', 'welcome.mail')) as mail_template_file: -        mail_template = message_from_file(mail_template_file) -    return InputMail.from_python_mail(mail_template) diff --git a/service/pixelated/adapter/welcome_mail.py b/service/pixelated/adapter/welcome_mail.py index a40e44a4..8d3cdd7a 100644 --- a/service/pixelated/adapter/welcome_mail.py +++ b/service/pixelated/adapter/welcome_mail.py @@ -18,8 +18,10 @@ from email import message_from_file  from pixelated.adapter.model.mail import InputMail -def add_welcome_mail(mail_store): -    welcome_mail = pkg_resources.resource_filename('pixelated.assets', 'welcome.mail') +def add_welcome_mail(mail_store, language='en-US'): +    welcome_mail = pkg_resources.resource_filename( +        'pixelated.assets', +        'welcome.mail.%s' % (language))      with open(welcome_mail) as mail_template_file:          mail_template = message_from_file(mail_template_file) diff --git a/service/pixelated/assets/welcome.mail b/service/pixelated/assets/welcome.mail.en-US index 8ef4e120..8ef4e120 100644 --- a/service/pixelated/assets/welcome.mail +++ b/service/pixelated/assets/welcome.mail.en-US diff --git a/service/pixelated/assets/welcome.mail.pt-BR b/service/pixelated/assets/welcome.mail.pt-BR new file mode 100644 index 00000000..197e0e13 --- /dev/null +++ b/service/pixelated/assets/welcome.mail.pt-BR @@ -0,0 +1,80 @@ +From: Pixelated Team <pixelated-team@pixelated-project.org> +Date: Sat, 21 Mar 2015 19:30:09 -0300 +Subject: Bem vindo ao Pixelated +To: Replace <will.be@the.user> +Content-Type: multipart/alternative; boundary=000boundary000 + +--000boundary000 +Bem vindo ao Pixelated Mail, um email moderno com criptografia. + +Pixelated Mail é um projeto de código aberto que visa prover um email seguro no navegador com todas a funcionalidades que se espera de um cliente moderno de email. + +Como usar +Pixelated Mail deve prover uma forma de uso parecida com o que você encontra com o seu software de email.  À esquerda, você vai encontrar a barra de navegação que prove acesso a todas as suas pastas e etiquetas. Clicando nelas você carregará as mensagens correspondentes no painel do meio - a lista de emails. Clicando em um email ele será aberto nesse painel aqui, mas você já sabe disso, né? + +Para compor uma mensagem procure por um grande botão azul no canto superior esquerdo. Você pode adicionar etiquetas clicando no sinal de "+" abaixo do assunto da mensagem. Você também pode visualizar o estado de criptografia das mensagens logo abaixo das informações do remetente. + +Um pouco mais sobre o Pixelated +Pixelated é um projeto de código-aberto licenciado sob AGPL 3.0. É composto de duas partes principais, o cliente web (que você está usando agora) e a plataforma (o servidor por trás do sinal de "@", que provê o serviço de email que você usará para mandar e receber mensagens). Você pode aprender mais visitando https://pixelated-project.org/. + +Sobre esta mensagem e seu estado de criptografia +Esta mensagem não foi criptografada, em outras palavras, ela poderia ter sido lida por outras pessoas em algum ponto durante a transmissão, como em qualquer cliente de email. +Para enviar mensagens criptografadas, you precisa ter a chave pública dos recipientes. No Pixelated, existem 2 possibilidades: +• enviar um email para outra conta do Pixelated: as chaves públicas são trocadas por padrão; +• enviar um email para outro servidor de email: você deverá trocar as chaves públicas com os recipientes anteriormente. + +Aproveite seu email seguro! + +--000boundary000 +Content-Type: text/html; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable +<p> +Bem vindo ao Pixelated Mail, um email moderno com criptografia. +</p> +<p> +Pixelated Mail =C3=A9 um projeto de c=C3=B3digo aberto que visa prover um e= +mail seguro no navegador com todas a funcionalidades que se espera de um cl= +iente moderno de email. +</p> +<p> +<b>Como usar</b><br> +Pixelated Mail deve prover uma forma de uso parecida com o que voc=C3=AA en= +contra com o seu software de email.  =C3=80 esquerda, voc=C3=AA vai encontr= +ar a barra de navega=C3=A7=C3=A3o que prove acesso a todas as suas pastas e= + etiquetas. Clicando nelas voc=C3=AA carregar=C3=A1 as mensagens correspond= + entes no painel do meio - a lista de emails. Clicando em um email ele ser= + =C3=A1 aberto nesse painel aqui, mas voc=C3=AA j=C3=A1 sabe disso, n=C3=A9? +</p> +<p> +Para compor uma mensagem procure por um grande bot=C3=A3o azul no canto sup= +erior esquerdo. Voc=C3=AA pode adicionar etiquetas clicando no sinal de "+"= + abaixo do assunto da mensagem. Voc=C3=AA tamb=C3=A9m pode visualizar o est= + ado de criptografia das mensagens logo abaixo das informa=C3=A7=C3=B5es do = + remetente. =20 +</p> +<p> +<b>Um pouco mais sobre o Pixelated</b><br> +Pixelated =C3=A9 um projeto de c=C3=B3digo-aberto licenciado sob AGPL 3.0. = +=C3=89 composto de duas partes principais, o cliente web (que voc=C3=AA est= +=C3=A1 usando agora) e a plataforma (o servidor por tr=C3=A1s do sinal de "= +@", que prov=C3=AA o servi=C3=A7o de email que voc=C3=AA usar=C3=A1 para ma= +ndar e receber mensagens). Voc=C3=AA pode aprender mais visitando https://p= +ixelated-project.org/. +</p> +<p> +<b>Sobre esta mensagem e seu estado de criptografia</b><br> +Esta mensagem n=C3=A3o foi criptografada, em outras palavras, ela poderia t= +er sido lida por outras pessoas em algum ponto durante a transmiss=C3=A3o, = +como em qualquer cliente de email. +Para enviar mensagens criptografadas, you precisa ter a chave p=C3=BAblica = +dos recipientes. No Pixelated, existem 2 possibilidades: +<p>=E2=80=A2 enviar um email para outra conta do Pixelated: as chaves p=C3=BAb= +licas s=C3=A3o trocadas por padr=C3=A3o; +<br>=E2=80=A2 enviar um email para outro servidor de email: voc=C3=AA dever=C3= +=A1 trocar as chaves p=C3=BAblicas com os recipientes anteriormente. +</p> +<p> +Aproveite seu email seguro! +</p> +--000boundary000-- + diff --git a/service/pixelated/resources/login_resource.py b/service/pixelated/resources/login_resource.py index 1e7c26a5..48092aa5 100644 --- a/service/pixelated/resources/login_resource.py +++ b/service/pixelated/resources/login_resource.py @@ -50,6 +50,15 @@ def _get_static_folder():      return static_folder +def parse_accept_language(all_headers): +    accepted_languages = ['pt-BR', 'en-US'] +    for language in accepted_languages: +        languages = all_headers['accept-language'].split(';')[0] +        if language in languages: +            return language +    return 'pt-BR' + +  class DisclaimerElement(Element):      loader = XMLFile(FilePath(os.path.join(_get_startup_folder(), '_login_disclaimer_banner.html'))) @@ -166,7 +175,8 @@ class LoginResource(BaseResource):              self._services_factory.map_email(self.creds.username, user_id)          if leap_session.fresh_account: -            yield add_welcome_mail(leap_session.mail_store) +            language = parse_accept_language(request.allHeaders()) +            yield add_welcome_mail(leap_session.mail_store, language)          self._init_http_session(request, user_id) diff --git a/service/test/unit/resources/test_login_resource.py b/service/test/unit/resources/test_login_resource.py index d006e934..c2b89654 100644 --- a/service/test/unit/resources/test_login_resource.py +++ b/service/test/unit/resources/test_login_resource.py @@ -10,10 +10,32 @@ from twisted.web.resource import IResource  from twisted.web.test.requesthelper import DummyRequest  from pixelated.config.sessions import LeapSessionFactory, LeapSession -from pixelated.resources.login_resource import LoginResource +from pixelated.resources.login_resource import ( +    LoginResource, +    parse_accept_language)  from test.unit.resources import DummySite +class TestParseAcceptLanguage(unittest.TestCase): +    def test_parse_pt_br_simple(self): +        all_headers = { +            'accept-language': 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'} +        parsed_language = parse_accept_language(all_headers) +        self.assertEqual('pt-BR', parsed_language) + +    def test_parse_en_us_simple(self): +        all_headers = { +            'accept-language': 'en-US,en;q=0.8,en-US;q=0.5,en;q=0.3'} +        parsed_language = parse_accept_language(all_headers) +        self.assertEqual('en-US', parsed_language) + +    def test_parse_pt_br_as_default(self): +        all_headers = { +            'accept-language': 'de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3'} +        parsed_language = parse_accept_language(all_headers) +        self.assertEqual('pt-BR', parsed_language) + +  class TestLoginResource(unittest.TestCase):      def setUp(self):          self.services_factory = mock() diff --git a/service/test/unit/test_welcome_mail.py b/service/test/unit/test_welcome_mail.py index fe2b3005..05f05e98 100644 --- a/service/test/unit/test_welcome_mail.py +++ b/service/test/unit/test_welcome_mail.py @@ -30,7 +30,7 @@ class TestWelcomeMail(unittest.TestCase):          mail_store = mock()          input_mail = self._get_welcome_mail() -        add_welcome_mail(mail_store) +        add_welcome_mail(mail_store, 'en-US')          capture = WelcomeMailCapture()          verify(mail_store).add_mail('INBOX', capture) @@ -43,7 +43,7 @@ class TestWelcomeMail(unittest.TestCase):                                 '..',                                 'pixelated',                                 'assets', -                               'welcome.mail')) as mail_template_file: +                               'welcome.mail.en-US')) as mail_template_file:              mail_template = message_from_file(mail_template_file)          return InputMail.from_python_mail(mail_template) | 
