summaryrefslogtreecommitdiff
path: root/service/pixelated
diff options
context:
space:
mode:
authorthaissiqueira <thais.siqueira@thoughtworks.com>2017-03-31 18:00:43 -0300
committerGitHub <noreply@github.com>2017-03-31 18:00:43 -0300
commitf40808a147d1135e8bbee6d78306a598cf5ca647 (patch)
tree58d15414134ef5554e947348179e92e248df433b /service/pixelated
parentdadf39c1574d53612410371b8b639a159841eaf5 (diff)
parent304215fe36666c8401bd9fa01a50cab61ddc10ca (diff)
Merge pull request #1040 from pixelated/email-recovery-code
[#927] Implements sending recovery code by email.
Diffstat (limited to 'service/pixelated')
-rw-r--r--service/pixelated/account_recovery.py35
-rw-r--r--service/pixelated/resources/backup_account_resource.py9
2 files changed, 40 insertions, 4 deletions
diff --git a/service/pixelated/account_recovery.py b/service/pixelated/account_recovery.py
index 234bb1fe..c0a18792 100644
--- a/service/pixelated/account_recovery.py
+++ b/service/pixelated/account_recovery.py
@@ -13,23 +13,52 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+
from twisted.internet.defer import inlineCallbacks, returnValue
from twisted.logger import Logger
+from twisted.mail import smtp
+
+from email.mime.text import MIMEText
+
log = Logger()
class AccountRecovery(object):
- def __init__(self, session, soledad):
+ def __init__(self, session, soledad, smtp_config, backup_email):
self._bonafide_session = session
self._soledad = soledad
+ self._smtp_config = smtp_config
+ self._backup_email = backup_email
@inlineCallbacks
def update_recovery_code(self):
try:
code = self._soledad.create_recovery_code()
response = yield self._bonafide_session.update_recovery_code(code)
+ yield self._send_mail(code, self._backup_email)
+
returnValue(response)
+
+ except Exception as e:
+ log.error('Something went wrong when trying to save the recovery code')
+ log.error(e)
+ raise e
+
+ @inlineCallbacks
+ def _send_mail(self, code, backup_email):
+ msg = MIMEText('Your code %s' % code)
+ msg['Subject'] = 'Recovery Code'
+ msg['From'] = 'team@pixelated-project.org'
+ msg['To'] = backup_email
+
+ try:
+ send_mail_result = yield smtp.sendmail(
+ str(self._smtp_config.remote_smtp_host),
+ 'team@pixelated-project.org',
+ [backup_email],
+ msg.as_string())
+ returnValue(send_mail_result)
except Exception as e:
- log.warn('Something went wrong when trying to save the recovery code')
- raise
+ log.error('Failed trying to send the email with the recovery code')
+ raise e
diff --git a/service/pixelated/resources/backup_account_resource.py b/service/pixelated/resources/backup_account_resource.py
index b752b4c7..f51ac2ec 100644
--- a/service/pixelated/resources/backup_account_resource.py
+++ b/service/pixelated/resources/backup_account_resource.py
@@ -15,6 +15,8 @@
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
import os
+import json
+
from xml.sax import SAXParseException
from pixelated.resources import BaseResource
@@ -51,7 +53,9 @@ class BackupAccountResource(BaseResource):
def render_POST(self, request):
account_recovery = AccountRecovery(
self._authenticator.bonafide_session,
- self.soledad(request))
+ self.soledad(request),
+ self._service(request, '_leap_session').smtp_config,
+ self._get_backup_email(request))
def update_response(response):
request.setResponseCode(NO_CONTENT)
@@ -64,3 +68,6 @@ class BackupAccountResource(BaseResource):
d = account_recovery.update_recovery_code()
d.addCallbacks(update_response, error_response)
return NOT_DONE_YET
+
+ def _get_backup_email(self, request):
+ return json.loads(request.content.getvalue()).get('backupEmail')