Merge branch 'master' into prod

This commit is contained in:
Christopher Neugebauer 2017-08-18 10:51:33 -07:00
commit 3334d6976e
6 changed files with 119 additions and 7 deletions

View file

@ -349,8 +349,8 @@
"fields": { "fields": {
"title": "Log In", "title": "Log In",
"hint": "", "hint": "",
"url": "/account/login/", "url": "nbpy_login",
"urlaspattern": false, "urlaspattern": true,
"tree": 1, "tree": 1,
"hidden": false, "hidden": false,
"alias": null, "alias": null,

25
pinaxcon/account_hooks.py Normal file
View file

@ -0,0 +1,25 @@
from account import hooks
from django.contrib.auth.models import User
class BetterAccountHookSet(hooks.AccountDefaultHookSet):
def get_user_credentials(self, form, identifier_field):
username = form.cleaned_data[identifier_field]
# Find an actual username so we can authenticate
print username,
if identifier_field == "email":
username = self.get_username_by_email(username)
print username,
return {
"username": username,
"password": form.cleaned_data["password"],
}
def get_username_by_email(self, email):
try:
return User.objects.get(email=email).username
except User.DoesNotExist:
return None

View file

@ -15,7 +15,7 @@ DATABASES = {
} }
} }
UNPREPEND_WWW = bool(os.environ.get("DJANGO_UNPREPEND_WWW", False)) UNPREPEND_WWW = bool(int(os.environ.get("DJANGO_UNPREPEND_WWW", "0")))
# HEROKU: Update database configuration with $DATABASE_URL. # HEROKU: Update database configuration with $DATABASE_URL.
import dj_database_url import dj_database_url
@ -258,17 +258,21 @@ EMAIL_HOST = os.environ.get("DJANGO_EMAIL_HOST", "")
EMAIL_PORT = int(os.environ.get("DJANGO_EMAIL_PORT", 25)) EMAIL_PORT = int(os.environ.get("DJANGO_EMAIL_PORT", 25))
EMAIL_HOST_USER = os.environ.get("DJANGO_EMAIL_HOST_USER", "") EMAIL_HOST_USER = os.environ.get("DJANGO_EMAIL_HOST_USER", "")
EMAIL_HOST_PASSWORD = os.environ.get("DJANGO_EMAIL_HOST_PASSWORD", "") EMAIL_HOST_PASSWORD = os.environ.get("DJANGO_EMAIL_HOST_PASSWORD", "")
EMAIL_USE_TLS = bool(os.environ.get("DJANGO_EMAIL_USE_TLS", False)) EMAIL_USE_TLS = bool(int(os.environ.get("DJANGO_EMAIL_USE_TLS", "0")))
EMAIL_USE_SSL = bool(os.environ.get("DJANGO_EMAIL_USE_SSL", False)) EMAIL_USE_SSL = bool(int(os.environ.get("DJANGO_EMAIL_USE_SSL", "0")))
ACCOUNT_LOGIN_URL = "nbpy_login"
LOGIN_URL = "nbpy_login"
# We need to explicitly switch on signups. # We need to explicitly switch on signups.
ACCOUNT_OPEN_SIGNUP = bool(os.environ.get("DJANGO_ACCOUNT_OPEN_SIGNUP", False)) ACCOUNT_OPEN_SIGNUP = bool(int(os.environ.get("DJANGO_ACCOUNT_OPEN_SIGNUP", "0")))
ACCOUNT_EMAIL_UNIQUE = True ACCOUNT_EMAIL_UNIQUE = True
ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = False if DEBUG else True ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = False if DEBUG else True
ACCOUNT_LOGIN_REDIRECT_URL = "home" ACCOUNT_LOGIN_REDIRECT_URL = "dashboard"
ACCOUNT_LOGOUT_REDIRECT_URL = "home" ACCOUNT_LOGOUT_REDIRECT_URL = "home"
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2 ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
ACCOUNT_USE_AUTH_AUTHENTICATE = True ACCOUNT_USE_AUTH_AUTHENTICATE = True
ACCOUNT_HOOKSET = "pinaxcon.account_hooks.BetterAccountHookSet"
AUTHENTICATION_BACKENDS = [ AUTHENTICATION_BACKENDS = [
"symposion.teams.backends.TeamPermissionsBackend", "symposion.teams.backends.TeamPermissionsBackend",

View file

@ -0,0 +1,59 @@
{% extends "page_with_title_and_lede.html" %}
{% load bootstrap %}
{% load i18n %}
{% block head_title %}Log In{% endblock %}
{% block heading %}Log In or Sign Up{% endblock %}
{% block body_class %}login{% endblock %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-4">
<form action="{% url 'account_login' %}" method="POST">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">
Log into an existing account
</h3>
</div>
<div class="panel-body">
{% csrf_token %}
{{ login_form|bootstrap }}
</div>
<div class="panel-footer">
<button role="submit" class="btn btn-primary">Log In</button>
</div>
</div>
</form>
</div>
{% if signup_open %}
<div class="col-md-4">
<form action="{% url 'account_signup' %}" method="POST">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
Sign up for a new account
</h3>
</div>
<div class="panel-body">
{% csrf_token %}
{{ signup_form|bootstrap }}
</div>
<div class="panel-footer">
<button role="submit" class="btn btn-primary">Sign Up</button>
</div>
</div>
</form>
</div>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -52,6 +52,9 @@ urlpatterns = [
url(r"^admin/", include(admin.site.urls)), url(r"^admin/", include(admin.site.urls)),
url(r"^login$", views.account_login, name="nbpy_login"),
# Override the default account_login view with one that takes email addys
url(r"^account/login/$", views.EmailLoginView.as_view(), name="account_login"),
url(r"^account/", include("account.urls")), url(r"^account/", include("account.urls")),
url(r"^dashboard/", symposion.views.dashboard, name="dashboard"), url(r"^dashboard/", symposion.views.dashboard, name="dashboard"),

View file

@ -1,9 +1,30 @@
from django.conf import settings
from django.http import HttpResponseServerError from django.http import HttpResponseServerError
from django.shortcuts import render
from django.template import RequestContext from django.template import RequestContext
from django.template import Template from django.template import Template
from django.template.loader import get_template from django.template.loader import get_template
from django.views import defaults from django.views import defaults
from account.forms import LoginEmailForm, LoginUsernameForm, SignupForm
from account.views import LoginView
def server_error(request, template_name=defaults.ERROR_500_TEMPLATE_NAME): def server_error(request, template_name=defaults.ERROR_500_TEMPLATE_NAME):
t = Template("{%% include '%s' %%}" % template_name) t = Template("{%% include '%s' %%}" % template_name)
return HttpResponseServerError(t.render(RequestContext(request))) return HttpResponseServerError(t.render(RequestContext(request)))
def account_login(request):
d = {
"login_form": LoginEmailForm(),
"signup_form": SignupForm(),
"signup_open": getattr(settings, "ACCOUNT_OPEN_SIGNUP", True),
}
print d["signup_open"], settings.ACCOUNT_OPEN_SIGNUP
return render(request, "account_login.html", d)
class EmailLoginView(LoginView):
form_class = LoginEmailForm