Skip to content

Commit

Permalink
Merge branch 'develop' into remove-start-response-provider
Browse files Browse the repository at this point in the history
  • Loading branch information
josephmancuso committed Nov 2, 2018
2 parents 4e6e407 + ce8c508 commit dbbc651
Show file tree
Hide file tree
Showing 5 changed files with 131 additions and 3 deletions.
10 changes: 8 additions & 2 deletions masonite/commands/AuthCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,12 @@ def handle(self):
f.write("Post().route('/register', 'RegisterController@store'),\n ")
f.write("Get().route('/home', 'HomeController@show'),\n ")
f.write("Get().route('/email/verify', 'ConfirmController@verify_show'),\n ")
f.write("Get().route('/email/verify/@id:signed', 'ConfirmController@confirm_email'),\n")
f.write("Get().route('/email/verify/@id:signed', 'ConfirmController@confirm_email'),\n ")
f.write("Get().route('/email/verify/@id:signed', 'ConfirmController@confirm_email'),\n ")
f.write("Get().route('/password', 'PasswordController@forget').name('forgot.password'),\n ")
f.write("Post().route('/password', 'PasswordController@send'),\n ")
f.write("Get().route('/password/@token/reset', 'PasswordController@reset'),\n ")
f.write("Post().route('/password/@token/reset', 'PasswordController@update'),\n")
f.write(']\n')

# move controllers
Expand All @@ -38,7 +43,8 @@ def handle(self):
os.getcwd() + "/app/http/controllers/HomeController.py")
shutil.copyfile(module_path + "/../snippets/auth/controllers/ConfirmController.py",
os.getcwd() + "/app/http/controllers/ConfirmController.py")

shutil.copyfile(module_path + "/../snippets/auth/controllers/PasswordController.py",
os.getcwd() + "/app/http/controllers/PasswordController.py")
# move templates
shutil.copytree(module_path + "/../snippets/auth/templates/auth",
os.getcwd() + "/resources/templates/auth")
Expand Down
2 changes: 1 addition & 1 deletion masonite/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def _load_environment(self, env, override=False):
self.env(dotenv_path=env_path, override=override)


def env(value, default=None):
def env(value, default=''):
env_var = os.getenv(value, default)
if isinstance(env_var, bool):
return env_var
Expand Down
47 changes: 47 additions & 0 deletions masonite/snippets/auth/controllers/PasswordController.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
"""A PasswordController Module."""

import uuid

from masonite import env, Mail, Session
from masonite.auth import Auth
from masonite.helpers import password as bcrypt_password
from masonite.request import Request
from masonite.view import View

from config.auth import AUTH


class PasswordController:
"""Password Controller."""

def forget(self, view: View, request: Request):
return view.render('auth/forget', {'app': request.app().make('Application'), 'Auth': Auth(request)})

def reset(self, request: Request):
token = request.param('token')
user = AUTH['model'].where('remember_token', token).first()
if user:
return view('auth/reset', {'token': token, 'app': request.app().make('Application'), 'Auth': Auth(request)})

def send(self, request: Request, session: Session, mail: Mail):
email = request.input('email')
user = AUTH['model'].where('email', email).first()

if user:
if not user.remember_token:
user.remember_token = str(uuid.uuid4())
user.save()
message = 'Please visit {}/password/{}/reset to reset your password'.format(env('SITE', 'http://localhost:8000'), user.remember_token)
mail.subject('Reset Password Instructions').to(email).send(message)
session.flash('success', 'Email sent. Follow the instruction in the email to reset your password.')
return request.redirect('/password')
else:
session.flash('error', 'Could not send reset email. Please enter correct email.')
return request.redirect('/password')

def update(self, request: Request):
user = AUTH['model'].where('remember_token', request.param('token')).first()
if user:
user.password = bcrypt_password(request.input('password'))
user.save()
return request.redirect('/login')
38 changes: 38 additions & 0 deletions masonite/snippets/auth/templates/auth/forget.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{% extends 'auth/base.html' %}

{% block content %}
<div class="row my-5">
<div class="col-md-12">
<div class="row">
<div class="col-md-6 mx-auto">
{% if session().has('error') %}
<div class="alert alert-danger" role="alert">
{{ session().get('error') }}
</div>
{% endif %}
{% if session().has('success') %}
<div class="alert alert-success" role="alert">
{{ session().get('success') }}
</div>
{% endif %}
<div class="card rounded-1">
<div class="card-header">
<h5 class="mb-0">Password Reset</h5>
</div>
<div class="card-body">
<form class="form" action="/password" method="POST">
{{ csrf_field }}
<div class="form-group">
<label for="">Email</label>
<input type="text" class="form-control form-control-md rounded-0" name="email">
</div>
<button type="submit" class="btn btn-success btn-md float-right">Send reset link</button>
<a href="{{ route('forgot.password') }}" class="btn btn-primary btn-md mx-1 float-right">Forgot Password</a>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
37 changes: 37 additions & 0 deletions masonite/snippets/auth/templates/auth/reset.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{% extends 'auth/base.html' %}

{% block content %}
<div class="row my-5">
<div class="col-md-12">
<div class="row">
<div class="col-md-6 mx-auto">
{% if session().has('error') %}
<div class="alert alert-danger" role="alert">
{{ session().get('error') }}
</div>
{% endif %}
{% if session().has('success') %}
<div class="alert alert-success" role="alert">
{{ session().get('success') }}
</div>
{% endif %}
<div class="card rounded-1">
<div class="card-header">
<h5 class="mb-0">Reset Password</h5>
</div>
<div class="card-body">
<form class="form" action="/password/{{token}}/reset" method="POST">
{{ csrf_field }}
<div class="form-group">
<label for="">New Password</label>
<input type="password" class="form-control form-control-md rounded-0" name="password">
</div>
<button type="submit" class="btn btn-success btn-md float-right">Reset</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

0 comments on commit dbbc651

Please sign in to comment.