diff --git a/src/api.py b/src/api.py index 2fe1895..613c8b1 100755 --- a/src/api.py +++ b/src/api.py @@ -61,7 +61,7 @@ from rq import Queue, use_connection from validate_email import validate_email -from flask import request +from flask import request, render_template try: from collections import OrderedDict as odict @@ -139,6 +139,11 @@ def send_mail(to_addresses, subject=None, body=None, mail_type=None, subject = 'Thanks for Joining the Jupo Waiting List' template = app.CURRENT_APP.jinja_env.get_template('email/thanks.html') body = template.render() + + elif mail_type == 'mail_verify': + subject = 'E-mail verification for the JUPO' + template = app.CURRENT_APP.jinja_env.get_template('email/verification.html') + body = template.render(domain=domain, **kwargs) elif mail_type == 'invite': if kwargs.get('group_name'): @@ -172,7 +177,9 @@ def send_mail(to_addresses, subject=None, body=None, mail_type=None, subject = '%s shared a post with you' % user.name template = app.CURRENT_APP.jinja_env.get_template('email/new_post.html') body = template.render(domain=domain, email=to_addresses, user=user, post=post) - + + + elif mail_type == 'new_comment': user = get_user_info(user_id, db_name=db_name) post = Feed(post, db_name=db_name) @@ -220,7 +227,7 @@ def send_mail(to_addresses, subject=None, body=None, mail_type=None, msg['Reply-To'] = Header(reply_to, "utf-8") MAIL = SMTP(settings.SMTP_HOST, settings.SMTP_PORT) - +# MAIL = SMTP('54.249.244.48', settings.SMTP_PORT) if settings.SMTP_USE_TLS is True: MAIL.starttls() @@ -1127,11 +1134,13 @@ def sign_in_with_twitter(): def sign_up(email, password, name, user_agent=None, remote_addr=None): db_name = get_database_name() db = DATABASE[db_name] + hostname = db_name.replace('_','.') email = email.strip().lower() name = name.strip() raw_password = password + # Validation if validate_email(email) is False: return False @@ -1188,22 +1197,16 @@ def sign_up(email, password, name, user_agent=None, remote_addr=None): None, None, db_name=db_name) + + #TODO: sua lai phan xac thuc + user_id = get_user_id(session_id) + if not user_id: + return False + random_string = settings.EMAIL_CERTIFICATE_KEY + key = hashlib.md5(str(user_id) + random_string).hexdigest() + send_mail_queue.enqueue(send_mail, email, mail_type='mail_verify', key=key, + name=name, id=user_id) - -# subject = 'E-mail verification for the 5works Public Beta' -# body = render_template('email/verification.html', -# name=name, domain='jupo.comm', token=token) -# send_mail(email, subject, body) - - # init some data -# new_reminder(session_id, 'Find some contacts') -# new_reminder(session_id, 'Upload a profile picture (hover your name at the top right corner, click "Change Profile Picture" in drop down menu)') -# new_reminder(session_id, 'Hover over me and click anywhere on this line to check me off as done') - - # add user to "Welcome to 5works" group -# db.owner.update({'_id': 340916998231818241}, -# {'$addToSet':{'members': info['_id']}}) - return session_id def sign_out(session_id, db_name=None): @@ -1256,9 +1259,17 @@ def reset_password(user_id, new_password): return True -def verify(token): - pass - +def verify(key, user_id): + string_buffer = settings.EMAIL_CERTIFICATE_KEY + key_local = hashlib.md5(str(user_id) + string_buffer).hexdigest() + if key == key_local: + db_name = get_database_name() + db = DATABASE[db_name] + db.owner.update({'_id': long(user_id)}, + {'$set': {'verified': True}}) + cache.delete('%s:info' % user_id) + return True + def new_verify_token(email): pass diff --git a/src/main.py b/src/main.py index f964389..97d9e5b 100755 --- a/src/main.py +++ b/src/main.py @@ -31,12 +31,15 @@ from lib import cache from lib.img_utils import zoom from lib.json_util import default as BSON +from validate_email import validate_email + from helpers import extensions from helpers.decorators import * from helpers.converters import * import os +import hashlib import logging import requests import traceback @@ -630,7 +633,6 @@ def jobs(): @app.route("/", methods=["GET", "OPTIONS", "POST"]) def authentication(action=None): hostname = request.headers.get('Host') - db_name = hostname.replace('.', '_') primary_domain = '.'.join(settings.PRIMARY_DOMAIN.rsplit('.', 2)[-2:]) @@ -740,8 +742,10 @@ def authentication(action=None): alerts['email'] = '"%s" is already in use.' % email if len(password) < 6: alerts['password'] = 'Your password must be at least 6 characters long.' - - + + if validate_email(email) is False: + alerts['email'] = 'Type email "%s" is not exact' % email + if alerts.keys(): resp = Response(render_template('sign_up.html', alerts=alerts, @@ -774,6 +778,7 @@ def authentication(action=None): else: return redirect('/everyone?getting_started=1') else: + return redirect('/') elif request.path.endswith('sign_out'): @@ -1038,8 +1043,30 @@ def facebook_authorized(resp): def get_facebook_token(): return session.get('facebook_access_token') - +@app.route('/verify//', methods=['GET']) +def verify(key=None, user_id=None): + if key and user_id and request.path.startswith('/verify'): + info_verify = api.verify(key, user_id) + if info_verify == True: + return redirect('/') + +@app.route('/send_mail_verify/', methods=['GET']) +@login_required +@line_profile +def send_mail_verify(user_id=None): + hostname = request.headers.get('Host') + if user_id: + owner = api.get_owner_info_from_uuid(user_id) + if owner: + name = owner.name + string_buffer = settings.EMAIL_CERTIFICATE_KEY + key = hashlib.md5(str(user_id) + string_buffer).hexdigest() + email = owner.email + api.send_mail_queue.enqueue(api.send_mail, email, mail_type='mail_verify', key=key, + name=name, id=user_id) + return redirect('/') + @app.route('/reminders', methods=['GET', 'OPTIONS', 'POST']) @app.route('/reminder/new', methods=["POST"]) @app.route('/reminder//check', methods=["POST"]) @@ -2310,9 +2337,7 @@ def news_feed(page=1): include_archived_posts=False) category = None - owner = api.get_user_info(user_id) - if request.method == "OPTIONS": if page > 1: posts = [] @@ -3215,7 +3240,7 @@ def run_app(debug=False): - server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8888), app) + server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 9000), app) try: print 'Serving HTTP on 0.0.0.0 port 8888...' server.start() @@ -3225,7 +3250,7 @@ def run_app(debug=False): if __name__ == "__main__": - run_app(debug=True) + run_app(debug=False) diff --git a/src/models.py b/src/models.py index 5a91c07..ea0cedc 100755 --- a/src/models.py +++ b/src/models.py @@ -279,6 +279,11 @@ def email(self): if email_addr and '@' in email_addr: return email_addr + @property + def verified(self): + return self.info.get('verified','') + + @property def email_name(self): if '@' in self.email: diff --git a/src/settings.example.py b/src/settings.example.py index bee1bad..0ae6cc8 100755 --- a/src/settings.example.py +++ b/src/settings.example.py @@ -4,6 +4,8 @@ # Make this unique, and don't share it with anybody. SECRET_KEY = '' +EMAIL_CERTIFICATE_KEY = 'u5o7z8o9o5r6trm1l80n' + DEBUG = False @@ -66,4 +68,7 @@ FACEBOOK_APP_SECRET = None -SENTRY_DSN = 'http://021f15179a8c48dc9a93183b9ce84f5f:7c882e6967574b69a71ecd8021f374ff@sentry.jupo.com/3' +# SENTRY_DSN = 'http://021f15179a8c48dc9a93183b9ce84f5f:7c882e6967574b69a71ecd8021f374ff@sentry.jupo.com/3' +SENTRY_DSN = 'http://9faa594b71b9432984c98a225fef555e:1fc7ec4d02d94a7ebad61d0dd22e6b42@sentry.jupo.com/4' + + diff --git a/src/templates/base.html b/src/templates/base.html index 9ad0023..b7fd46d 100755 --- a/src/templates/base.html +++ b/src/templates/base.html @@ -62,7 +62,7 @@ {% block welcome %}{% endblock %} {% block main %}
- + {% block left_sidebar %}{% endblock %} {% block body %}{% endblock %} @@ -80,7 +80,8 @@ Processing...
- + + + {% if owner.verified != True %} +
+ + JUPO send a email to your inbox. Please verify your accout then F5
+ Click here to send mail certificate again ! +
+
+ {% endif %} + +
{% if view == 'new-group' %}