summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Costa <deniscostadsc@gmail.com>2016-09-23 12:36:36 -0300
committerDenis Costa <deniscostadsc@gmail.com>2016-09-23 12:39:27 -0300
commit563bee8fc23a0858f8e6e9711b00c80df8f816ab (patch)
tree5e8167eec5b07872b69f1c228949bd9d5b3c5ab1
parente9426843d8d772317f364347002bddb4f3ddc10d (diff)
Adds translation to welcome mail.
-rw-r--r--service/pixelated/adapter/model/mail.py9
-rw-r--r--service/pixelated/adapter/welcome_mail.py6
-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-BR80
-rw-r--r--service/pixelated/resources/login_resource.py12
-rw-r--r--service/test/unit/resources/test_login_resource.py24
-rw-r--r--service/test/unit/test_welcome_mail.py4
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)