allauth working and integrated

This commit is contained in:
vabene1111
2021-01-28 13:40:07 +01:00
parent 53c715b6f6
commit 63cfa14a21
12 changed files with 162 additions and 87 deletions

View File

@@ -9,7 +9,11 @@ class AllAuthCustomAdapter(DefaultAccountAdapter):
"""
Whether to allow sign ups.
"""
allow_signups = super(
AllAuthCustomAdapter, self).is_open_for_signup(request)
# Override with setting, otherwise default to super.
return getattr(settings, 'ACCOUNT_ALLOW_SIGNUPS', allow_signups)
if request.resolver_match.view_name == 'account_signup':
return False
else:
return super(AllAuthCustomAdapter, self).is_open_for_signup(request)
# disable password reset for now
def send_mail(self, template_prefix, email, context):
pass

View File

@@ -119,7 +119,7 @@ def group_required(*groups_required):
def in_groups(u):
return has_group_permission(u, groups_required)
return user_passes_test(in_groups)
return user_passes_test(in_groups, login_url='view_no_group')
class GroupRequiredMixin(object):
@@ -138,8 +138,7 @@ class GroupRequiredMixin(object):
)
return HttpResponseRedirect(reverse_lazy('index'))
return super(GroupRequiredMixin, self) \
.dispatch(request, *args, **kwargs)
return super(GroupRequiredMixin, self).dispatch(request, *args, **kwargs)
class OwnerRequiredMixin(object):

View File

@@ -0,0 +1,56 @@
{% extends "base.html" %}
{% load crispy_forms_filters %}
{% load i18n %}
{% load account socialaccount %}
{% block title %}{% trans 'Login' %}{% endblock %}
{% block content %}
<div class="row">
<div class="col-12" style="text-align: center">
<h3>{% trans "Sign In" %}</h3>
</div>
</div>
<div class="row">
<div class="col-6 offset-3">
<form class="login" method="POST" action="{% url 'account_login' %}">
{% csrf_token %}
{{ form | crispy }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/>
{% endif %}
<button class="btn btn-primary" type="submit">{% trans "Sign In" %}</button>
</form>
</div>
</div>
{% get_providers as socialaccount_providers %}
{% if socialaccount_providers %}
<div class="row" style="margin-top: 2vh">
<div class="col-6 offset-3">
<h5>{% trans "Social Login" %}</h5>
<span>{% trans 'You can use any of the following providers to sign in.' %}</span>
<br/>
<br/>
<ul class="socialaccount_providers">
{% include "socialaccount/snippets/provider_list.html" with process="login" %}
</ul>
{% include "socialaccount/snippets/login_extra.html" %}
</div>
</div>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,22 @@
{% extends "base.html" %}
{% load crispy_forms_filters %}
{% load i18n %}
{% block title %}{% trans 'Sign Out' %}{% endblock %}
{% block content %}
<h1>{% trans "Sign Out" %}</h1>
<p>{% trans 'Are you sure you want to sign out?' %}</p>
<form method="post" action="{% url 'account_logout' %}">
{% csrf_token %}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/>
{% endif %}
<button class="btn btn-warning" type="submit">{% trans 'Sign Out' %}</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,11 @@
{% extends "base.html" %}
{% load crispy_forms_filters %}
{% load i18n %}
{% block title %}{% trans 'Password Reset' %}{% endblock %}
{% block content %}
<span>{% trans 'Password reset is not implemented for the time being!' %}</span>
{% endblock %}

View File

@@ -0,0 +1,11 @@
{% extends "base.html" %}
{% load crispy_forms_filters %}
{% load i18n %}
{% block title %}{% trans 'Password Reset' %}{% endblock %}
{% block content %}
<span>{% trans 'Password reset is not implemented for the time being!' %}</span>
{% endblock %}

View File

@@ -0,0 +1,20 @@
{% extends "base.html" %}
{% load static %}
{% load i18n %}
{% block title %}{% trans "Offline" %}{% endblock %}
{% block content %}
<div style="text-align: center">
<h1 class="">{% trans 'No Permissions' %}</h1>
<br/>
<span>{% trans 'You do not have any groups and therefor cannot use this application. Please contact your administrator.' %}</span> <br/>
</div>
{% endblock %}

View File

@@ -1,52 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% block title %}{% trans 'Login' %}{% endblock %}
{% block content %}
{% if form.errors %}
<div class="alert alert-danger" role="alert">
{% trans "Your username and password didn't match. Please try again." %}
</div>
{% endif %}
<form role="form" class="form-horizontal" method="post" action="{% url 'account_login' %}">
{% csrf_token %}
<div class="form-group">
<div class="form-group row">
<label for='{{ form.username.label_tag }}' class="col-sm-2 col-form-label">{{ form.username.label }}</label>
<div class="col-sm-10">
<input class="form-control" id="{{ form.username.id_for_label }}"
name="{{ form.username.html_name }}"/>
</div>
{% if form.username.errors %}
<div class="alert alert-danger" role="alert">
{{ form.username.errors }}
</div>
{% endif %}
</div>
<div class="form-group row">
<label for='{{ form.password.label_tag }}' class="col-sm-2 col-form-label">{{ form.password.label }}</label>
<div class="col-sm-10">
<input class="form-control" id="{{ form.password.id_for_label }}"
name="{{ form.password.html_name }}" type="password"/>
</div>
{% if form.password.errors %}
<div class="alert alert-danger" role="alert">
{{ form.password.errors }}
</div>
{% endif %}
</div>
<input type="submit" class="btn btn-primary" value="{% trans 'Login' %}"/>
<input type="hidden" name="next" value="{{ next }}"/>
</div>
</form>
{% endblock %}

View File

@@ -39,6 +39,7 @@ router.register(r'supermarket', api.SupermarketViewSet)
urlpatterns = [
path('', views.index, name='index'),
path('setup/', views.setup, name='view_setup'),
path('no-group', views.no_groups, name='view_no_group'),
path('signup/<slug:token>', views.signup, name='view_signup'),
path('system/', views.system, name='view_system'),
path('search/', views.search, name='view_search'),

View File

@@ -23,7 +23,7 @@ from cookbook.filters import RecipeFilter
from cookbook.forms import (CommentForm, Recipe, RecipeBookEntryForm, User,
UserCreateForm, UserNameForm, UserPreference,
UserPreferenceForm)
from cookbook.helper.permission_helper import group_required, share_link_valid
from cookbook.helper.permission_helper import group_required, share_link_valid, has_group_permission
from cookbook.models import (Comment, CookLog, InviteLink, MealPlan,
RecipeBook, RecipeBookEntry, ViewLog)
from cookbook.tables import (CookLogTable, RecipeTable, RecipeTableSmall,
@@ -34,8 +34,7 @@ from recipes.version import BUILD_REF, VERSION_NUMBER
def index(request):
if not request.user.is_authenticated:
if (User.objects.count() < 1
and 'django.contrib.auth.backends.RemoteUserBackend' not in settings.AUTHENTICATION_BACKENDS): # noqa: E501
if User.objects.count() < 1 and 'django.contrib.auth.backends.RemoteUserBackend' not in settings.AUTHENTICATION_BACKENDS:
return HttpResponseRedirect(reverse_lazy('view_setup'))
return HttpResponseRedirect(reverse_lazy('view_search'))
try:
@@ -45,15 +44,13 @@ def index(request):
UserPreference.BOOKS: reverse_lazy('view_books'),
}
return HttpResponseRedirect(
page_map.get(request.user.userpreference.default_page)
)
return HttpResponseRedirect(page_map.get(request.user.userpreference.default_page))
except UserPreference.DoesNotExist:
return HttpResponseRedirect(reverse('account_login') + '?next=' + request.path)
return HttpResponseRedirect(reverse('view_no_group') + '?next=' + request.path)
def search(request):
if request.user.is_authenticated:
if has_group_permission(request.user, ('guest',)):
f = RecipeFilter(
request.GET,
queryset=Recipe.objects.all().order_by('name')
@@ -88,19 +85,27 @@ def search(request):
{'recipes': table, 'filter': f, 'last_viewed': last_viewed}
)
else:
return HttpResponseRedirect(reverse('account_login') + '?next=' + request.path)
return HttpResponseRedirect(reverse('view_no_group') + '?next=' + request.path)
def no_groups(request):
if not request.user.is_authenticated:
return HttpResponseRedirect(reverse('account_login') + '?next=' + request.GET['next'])
if request.user.is_authenticated and request.user.groups.count() > 0:
return HttpResponseRedirect(reverse('index'))
return render(request, 'no_groups_info.html')
def recipe_view(request, pk, share=None):
recipe = get_object_or_404(Recipe, pk=pk)
if not request.user.is_authenticated and not share_link_valid(recipe, share):
if not has_group_permission(request.user, ('guest',)) and not share_link_valid(recipe, share):
messages.add_message(
request,
messages.ERROR,
_('You do not have the required permissions to view this page!')
)
return HttpResponseRedirect(reverse('account_login') + '?next=' + request.path)
return HttpResponseRedirect(reverse('view_no_group') + '?next=' + request.path)
comments = Comment.objects.filter(recipe=recipe)
@@ -197,22 +202,6 @@ def books(request):
return render(request, 'books.html', {'book_list': book_list})
def get_start_end_from_week(p_year, p_week):
first_day_of_week = datetime.strptime(
f'{p_year}-W{int(p_week) - 1}-1', "%Y-W%W-%w"
).date()
last_day_of_week = first_day_of_week + timedelta(days=6.9)
return first_day_of_week, last_day_of_week
def get_days_from_week(start, end):
delta = end - start
days = []
for i in range(delta.days + 1):
days.append(start + timedelta(days=i))
return days
@group_required('user')
def meal_plan(request):
return render(request, 'meal_plan.html', {})
@@ -466,7 +455,7 @@ def signup(request, token):
form.fields['name'].initial = link.username
form.fields['name'].disabled = True
return render(
request, 'registration/signup.html', {'form': form, 'link': link}
request, 'account/signup.html', {'form': form, 'link': link}
)
messages.add_message(