Guest User

Untitled

a guest
Dec 6th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.93 KB | None | 0 0
  1. from flask import Flask, render_template, redirect, url_for, session
  2. from flask_bootstrap import Bootstrap
  3. from flask_wtf import FlaskForm
  4. from wtforms import StringField, PasswordField, BooleanField
  5. from wtforms.validators import InputRequired, Email, Length
  6. from flask_sqlalchemy import SQLAlchemy
  7. from werkzeug.security import generate_password_hash, check_password_hash
  8.  
  9. from passlib.hash import sha256_crypt as crypt
  10.  
  11.  
  12. from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
  13. import smtplib
  14. from flask_mail import Mail, Message
  15. app = Flask(__name__)
  16. app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:root@localhost/login_flask"
  17. db = SQLAlchemy(app)
  18. Bootstrap(app)
  19.  
  20.  
  21. configure = app.config.update(
  22. DEBUG=True,
  23. MAIL_SERVER="smtp.gmail.com",
  24. MAIL_PORT=465,
  25. MAIL_USE_SSL=True,
  26. MAIL_USERNAME="mendezlinaresi@gmail.com",
  27. MAIL_PASSWORD="asesycorazonessonnuestraspalabras"
  28. )
  29. mail=Mail(app)
  30. login_manager = LoginManager()
  31. login_manager.init_app(app)
  32. login_manager.login_view = 'login'
  33.  
  34.  
  35. # ======================= #
  36. # Here is The
  37. # Model
  38. # ======================= #
  39. class User(UserMixin,db.Model):
  40. __tablename__ ="user"
  41. id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  42. username = db.Column(db.String(15), unique=True)
  43. password = db.Column(db.String(80))
  44. email = db.Column(db.String(50), unique=True)
  45. token = db.Column(db.String(1))
  46. # def __init__(self, id, username, password, email, token):
  47. # self.id = id
  48. # self.username = username
  49. # self.password = password
  50. # self.email = email
  51. # self.token = token
  52.  
  53. # def is_active(self):
  54. # return True
  55. # def get_id(self):
  56. # return (self.id)
  57. # def is_anonymous(self):
  58. # return False
  59. # def is_authenticated(self):
  60. # return True
  61.  
  62.  
  63. ###########################
  64. # python
  65. # from __init__ import db
  66. # db.create_all()
  67. # exit()
  68. ###########################
  69.  
  70. @login_manager.user_loader
  71. def load_user(user_id):
  72. return User.query.get(int(user_id))
  73. # ======================= #
  74. # Here is The
  75. # Form
  76. # ======================= #
  77.  
  78. class LoginForm(FlaskForm):
  79. username = StringField('Usuario', validators=[InputRequired(), Length(min=4, max=15)])
  80. password = PasswordField('Contraseña', validators=[InputRequired(), Length(min=8, max=80)])
  81. remember = BooleanField('Recordar')
  82.  
  83.  
  84. class RegisterForm(FlaskForm):
  85. email = StringField('Email', validators=[InputRequired(), Email(message="Invalid Email"), Length(max=50) ])
  86. username = StringField('Usuario', validators=[InputRequired(), Length(min=4, max=15)])
  87. password = PasswordField('Contraseña', validators=[InputRequired(), Length(min=8, max=80)])
  88. password_replicate = PasswordField('Repite Contraseña', validators=[InputRequired(), Length(min=8, max=80)])
  89.  
  90. # ======================= #
  91. # Here is The
  92. # Code
  93. # ======================= #
  94.  
  95.  
  96. @app.route("/")
  97. def index():
  98. return render_template("index.html")
  99.  
  100. @app.route("/login/", methods=['GET', 'POST'])
  101. def login():
  102. form = LoginForm()
  103. if form.validate_on_submit():
  104. user = User.query.filter_by(username=form.username.data).first()
  105. passw = form.password.data
  106. passw = crypt.encrypt((form.password.data))
  107. print("pass1: "+passw)
  108. print("pass2: "+user.password)
  109. if user:
  110. if passw == user.password:
  111. login_user(user, remember=form.remember.data)
  112. session["logged_in"] = True
  113. return redirect(url_for('dashboard'))
  114. # if user and user.token==1:
  115. # if check_password_hash(user.password, passw):
  116. # login_user(user, remember=form.remember.data)
  117. # return redirect(url_for('dashboard'))
  118. return ("<h1>Invalida Username or Password!</h1>")
  119. return render_template("login.html", form=form)
  120.  
  121. @app.route("/dashboard/")
  122. def dashboard():
  123. return render_template("dashboard.html")
  124.  
  125. @app.route("/logout/")
  126. def logout():
  127. return render_template("logout.html")
  128.  
  129. @app.route("/register/", methods=['POST', 'GET'])
  130. def register():
  131. form = RegisterForm()
  132. try:
  133. if form.validate_on_submit():
  134. username = form.username.data
  135. email = form.email.data
  136. if form.password.data == form.password_replicate.data:
  137. hashed_password=crypt.encrypt((form.password.data))
  138. verification_email = User.query.filter_by(email=email).first()
  139. username_verification = User.query.filter_by(username=username).first()
  140. print("hash: " + hashed_password)
  141. try:
  142. new_user = User(username=username, email=email, password=hashed_password, token=0)
  143. db.session.add(new_user)
  144. db.session.commit()
  145. activation_email(email, username, hashed_password)
  146. return render_template("email_sender.html")
  147. except Exception as e:
  148. return("Email or Username is used")
  149. return render_template("register.html", form=form)
  150. except Exception as e:
  151. return (str(e))
  152.  
  153.  
  154. def activation_email(email, username, hashed_password):
  155. session['logged_in'] = True
  156. session['username'] = username
  157. msg=Message("Send Email for example %s" %username, sender="mendezlinaresi@gmail.com", recipients=[email])
  158. msg.body=str("Active your accountt http://localhost:5000/activate_email/%s/%s/%s" %(email, username, hashed_password))
  159. return mail.send(msg)
  160.  
  161.  
  162. @app.route("/activate_email/<string:email>/<string:username>/<string:hashed_password>")
  163. def activate_email(email, username, hashed_password):
  164. token=User.query.filter_by(email=email).first()
  165. token.token=1
  166. db.session.commit()
  167. return render_template("activate_email.html", name = username, email=email)
  168.  
  169. if __name__=='__main__':
  170. app.secret_key = "aa42724c5b253a8775a7fcf187a88d82af259c3f88867b3640187783"
  171. app.config['SESSION_TYPE'] = "filesystem"
  172. app.run(debug=True)
Add Comment
Please, Sign In to add comment