diff --git a/.gitignore b/.gitignore index 49e9a7348ec8c18b74f45535dcd608d4805f8532..5dd8186bf4d40871466f66a2e106cf0c7ca9d363 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ venv -.secretsenv +.env __pycache__ diff --git a/app/auth/views.py b/app/auth/views.py index 0e117b332fd0a75aab9908658f47c30900e8a43f..69193d5663f321f75d954f545ab34a850394ab16 100644 --- a/app/auth/views.py +++ b/app/auth/views.py @@ -1,5 +1,9 @@ from flask import flash, redirect, render_template, request, url_for +<<<<<<< HEAD from flask_login import login_required, login_user, logout_user, current_user +======= +from flask_login import current_user, login_required, login_user, logout_user +>>>>>>> 1a973bfbc68dfea26a8b5360074480641cb34f31 from . import auth from .. import db from .forms import LoginForm, PasswordResetRequestForm, RegistrationForm @@ -47,6 +51,8 @@ def register(): @auth.route('/reset', methods=['GET', 'POST']) def password_reset_request(): + if not current_user.is_anonymous: + return redirect(url_for('main.index')) form = PasswordResetRequestForm() if form.validate_on_submit(): user = User.query.filter_by(email=form.email.data.lower()).first() @@ -58,4 +64,10 @@ def password_reset_request(): flash('An email with instructions to reset your password has been ' 'sent to you.') return redirect(url_for('auth.login')) - return render_template('auth/reset_password.html.j2', form=form, title='Password Reset') + return render_template('auth/reset_password.html.j2', form=form, + title='Password Reset') + + +@auth.route('/reset/<token>') +def password_reset(token): + return 'test' diff --git a/app/models.py b/app/models.py index d6bccb0251f9667814e5a878cea238f559572ab0..d7d33b853f8078707899253fe68ce4c2979603dd 100644 --- a/app/models.py +++ b/app/models.py @@ -1,4 +1,6 @@ +from flask import current_app from flask_login import UserMixin +from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from werkzeug.security import generate_password_hash, check_password_hash from . import db from . import login_manager @@ -26,6 +28,10 @@ class User(UserMixin, db.Model): password_hash = db.Column(db.String(128)) + def generate_reset_token(self, expiration=3600): + s = Serializer(current_app.config['SECRET_KEY'], expiration) + return s.dumps({'reset': self.id}).decode('utf-8') + @property def password(self): raise AttributeError('password is not a readable attribute') diff --git a/app/templates/auth/reset_password.html.j2 b/app/templates/auth/reset_password.html.j2 index 782a1f775706d6982870c7884d35bd4ffd9ed1d4..bb9cfe74f1aa8cc673cf9683428a6924e277d5b1 100644 --- a/app/templates/auth/reset_password.html.j2 +++ b/app/templates/auth/reset_password.html.j2 @@ -1,14 +1,20 @@ {% extends "base.html.j2" %} {% block page_content %} -<div class="col s12 m6 offset-m3"> - <div class="card medium"> +<div class="col s12 m8 offset-m2"> + <div class="card small"> <div class="card-content"> - <p>Sign in into an exisiting account or register a new one!</p> - <br> - <div class="card-action"> - <a class="btn" href="{{url_for('auth.register')}}">Register</a> - </div> + <span class="card-title">Reset Your Password</span> + <form method="POST"> + {{ form.hidden_tag() }} + <div class="input-field"> + {{ form.email(class='validate', type='email') }} + {{ form.email.label }} + </div> + <div class="card-action"> + {{ form.submit(class='btn right') }} + </div> + </form> </div> </div> </div> diff --git a/config.py b/config.py index fdc2318daa51eee7004901e98f1d42e5c0047d3f..5aee1326e46163ea808ff0ec1292eae4770fd6ec 100644 --- a/config.py +++ b/config.py @@ -5,14 +5,14 @@ basedir = os.path.abspath(os.path.dirname(__file__)) class Config: - MAIL_SERVER = os.environ.get('MAIL_SERVER', 'smtp.uni-bielefeld.de') + MAIL_SERVER = os.environ.get('MAIL_SERVER', 'smtp.gmail.com') MAIL_PORT = int(os.environ.get('MAIL_PORT', '587')) MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS', 'true').lower() in \ ['true', 'on', '1'] MAIL_USERNAME = os.environ.get('MAIL_USERNAME') MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') OPAQUE_MAIL_SUBJECT_PREFIX = '[Opaque]' - OPAQUE_MAIL_SENDER = 'Opaque Admin <inf_sfb1288@uni-bielefeld.de>' + OPAQUE_MAIL_SENDER = 'Opaque Development <dev.opaque@gmail.com>' SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string' SQLALCHEMY_TRACK_MODIFICATIONS = False