diff options
Diffstat (limited to 'service')
-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) |