-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsignup.py
105 lines (94 loc) · 4.71 KB
/
signup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# -*- coding: utf-8 -*-
#Logic Related to Signup
from flask import render_template, session, request, session
from functional import newrender
import httplib
import urllib
import json
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL
import configs
import random
import string
import re
import lang
def signup():
return newrender('title_signup', filename='signup.html')
def signup_submit():
params = urllib.urlencode({'secret': configs.recaptcha_secret, 'response': request.form['g-recaptcha-response']})
headers = {"Content-type": "application/x-www-form-urlencoded"}
conn = httplib.HTTPSConnection('www.google.com')
conn.request("POST", "/recaptcha/api/siteverify", params, headers)
res = conn.getresponse()
result = json.loads(res.read())
if not result['success']:
return newrender("title_signup", filename='basic_display.html', mode='signup_err_captcha')
else:
if not re.match(u'^[a-zA-Z가-힣ㄱ-ㅎㅏ-ㅣぁ-ゔァ-ヴー々〆〤0-9_\\-.]{4,20}$', request.form['username']):
return newrender("title_signup", filename='basic_display.html', mode='signup_err_username')
if not re.match('^.{6,200}$', request.form['password']):
return newrender("title_signup", filename='basic_display.html', mode='signup_err_password')
if request.form['password'] != request.form['password_re']:
return newrender("title_signup", filename='basic_display.html', mode='signup_err_pwmatch')
if not re.match(u'^[가-힣A-Za-zぁ-ゔァ-ヴー々〆〤 ]{2,30}$', request.form['name']):
return newrender("title_signup", filename='basic_display.html', mode='signup_err_name')
if re.match('^[a-zA-Z._+\\-0-9]+@[a-z0-9.\\-]+\\.[a-z]{2,5}$', request.form['email']):
return newrender("title_signup", filename='basic_display.html', mode='signup_err_email')
import dbhandler
try:
idchecker = dbhandler.col_members.find_one({"username": request.form['username']})
if idchecker['username']:
return newrender("title_signup", filename='basic_display.html', mode='signup_err_iddup')
except TypeError:
try:
emailchecker = dbhandler.col_members.find_one({"email": request.form['email']})
if emailchecker['username']:
return newrender("title_signup", filename='basic_display.html', mode='signup_err_emaildup')
except TypeError:
import bcrypt
activation_link = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(16))
locale = session['locale']
human = {"username": request.form['username'], "password": bcrypt.hashpw(request.form['password'].encode('UTF-8'), bcrypt.gensalt(configs.bcrypt_round)), "name": request.form['name'], "nickname": request.form['nickname'], "email": request.form['email'], 'activated': False, 'activation_link': activation_link, 'locale': locale}
msg = MIMEText(render_template('email.txt', link=configs.default_url + '/confirm/' + activation_link).encode('utf-8'), 'html', 'utf-8')
msg['Subject'] = Header(lang.lang[session['locale']]['signup_welcome'], 'utf-8')
msg['From'] = configs.gmail_id + '@gmail.com'
msg['To'] = request.form['email']
s = SMTP_SSL('smtp.gmail.com', 465, timeout=10)
s.set_debuglevel(1)
#try:
s.login(configs.gmail_id, configs.gmail_pw)
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.quit()
dbhandler.col_members.insert_one(human)
return newrender('title_signup', filename='basic_display.html', mode='signup_complete')
def confirm(path):
import dbhandler
try:
user = dbhandler.col_members.find_one({"activation_link": path})
if user['activated'] == False:
newuser = dict(user)
newuser['activated'] = True
del newuser['activation_link']
del newuser['_id']
dbhandler.col_members.update({'_id': user['_id']}, {"$set": newuser}, upsert=False)
return newrender('title_signup', filename='basic_display.html', mode='signup_verification_complete')
else:
return newrender("title_signup", filename='basic_display.html', mode='signup_err_link')
except TypeError:
return newrender("title_signup", filename='basic_display.html', mode='signup_err_link')
def resend():
try:
msg = MIMEText(render_template('email.txt', link=configs.default_url + '/confirm/' + session['activation_link']).encode('utf-8'), 'html', 'utf-8')
msg['Subject'] = Header(lang.lang[session['locale']]['signup_welcome'], 'utf-8')
msg['From'] = configs.gmail_id + '@gmail.com'
msg['To'] = session['activation_email']
s = SMTP_SSL('smtp.gmail.com', 465, timeout=10)
s.set_debuglevel(1)
s.login(configs.gmail_id, configs.gmail_pw)
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.quit()
return newrender('title_login', '', 'login_err.html', 'login_err_resent')
except KeyError:
return newrender('title_login', '', 'login_err.html', 'login_err_session')