add files

main
Lowlights 2024-03-20 16:19:34 +06:00
parent f928306d15
commit f0382cc7ee
11 changed files with 86854 additions and 39 deletions

Binary file not shown.

86798
debug.log

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

@ -55,20 +55,16 @@
<a class="nav-link dropdown-toggle text-white" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Пользователь
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li>
<a class="dropdown-item text-white" href="{% url 'main:profile' %}">Личный кабинет</a>
<a class="dropdown-item text-white" href="{% url 'main:admin_logout_user' %}">Выйти</a>
<a class="dropdown-item text-white" href="{% url 'keycloak_login' %}">Войти</a>
</li>
<!-- Добавляем id для динамического изменения стиля отображения -->
<a id="profileLink" class="dropdown-item text-white" href="{% url 'main:profile' %}" style="display: none;">Личный кабинет</a>
<a id="logoutLink" class="dropdown-item text-white" href="{% url 'main:admin_logout_user' %}" style="display: none;">Выйти</a>
<a id="loginLink" class="dropdown-item text-white" href="{% url 'keycloak_login' %}">Войти</a>
</li>
</ul>
</li>
</ul>
@ -117,6 +113,25 @@
<script src="{% static "/deps/js/jquery-events.js"%}"></script>
<script src="{% static "/deps/js/jquery-ajax.js"%}"></script>
<script src="{% static "/deps/js/bootstrap/bootstrap.bundle.min.js"%}"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
fetch("{%url 'main:check_user_authenticated'%}")
.then(response => response.json())
.then(data => {
if (data.isAuthenticated) {
document.getElementById('loginLink').style.display = 'none';
document.getElementById('profileLink').style.display = 'block';
document.getElementById('logoutLink').style.display = 'block';
} else {
document.getElementById('loginLink').style.display = 'block';
document.getElementById('profileLink').style.display = 'none';
document.getElementById('logoutLink').style.display = 'none';
}
})
.catch(error => console.error('Ошибка:', error));
});
</script>
</body>
</html>

View File

@ -1,11 +0,0 @@
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>LOGOUT</h1>
</body>
</html>

View File

@ -7,9 +7,9 @@ urlpatterns = [
path('admin_logout_user/',views.admin_logout_user,name = 'admin_logout_user'),
path('callback/', views.callback, name='callback'),
path('profile/',views.profile,name='profile'),
path('check-user-authenticated/', views.check_user_authenticated, name='check_user_authenticated'),
path('about/', views.about, name='about'),
path('', views.callback, name='product_list'),
path('products/', views.callback, name='product_list'),
path('<slug:category_slug>/', views.callback,
name='product_list_by_category'),

View File

@ -8,10 +8,7 @@ from cart.forms import CartAddProductForm
from jose import jwt
from django.contrib import messages
YOUR_REDIRECT_URI = 'http://127.0.0.1:8000/callback/'
def home(request):
# Ваш код для отображения главной страницы
return render(request, 'main/base.html')
@ -79,7 +76,7 @@ def callback(request,category_slug=None):
authorization_code = request.GET.get('code')
if authorization_code:
try:
access_token = exchange_code_for_token(authorization_code, YOUR_REDIRECT_URI)
access_token = exchange_code_for_token(authorization_code, settings.KEYCLOAK_CONFIG['CALLBACK_URL'])
user_info = decode_access_token(access_token)
request.session['user_info'] = user_info
@ -172,7 +169,7 @@ def get_user_id_from_session(request):
return None
def admin_logout_user(request):
def admin_logout_user(request,category_slug = None):
user_id = get_user_id_from_session(request)
@ -186,7 +183,8 @@ def admin_logout_user(request):
if sessions is None or not sessions:
logger.error("Can't find user sessions.")
messages.error(request, "No active sessions found for user.")
return render(request,'main/logout.html')
redirect_uri = settings.KEYCLOAK_CONFIG['CALLBACK_URL']
return redirect(redirect_uri)
all_sessions_logged_out = True
for session in sessions:
@ -200,5 +198,14 @@ def admin_logout_user(request):
else:
messages.warning(request, "Partial logout. Some sessions may still be active.")
request.session.flush() # Clear Django session
return render(request,'main/logout.html')
request.session.flush()
redirect_uri = settings.KEYCLOAK_CONFIG['CALLBACK_URL']
return redirect(redirect_uri)
from django.http import JsonResponse
def check_user_authenticated(request):
user_id = get_user_id_from_session(request)
is_authenticated = user_id is not None
return JsonResponse({'isAuthenticated': is_authenticated})

View File

@ -2,30 +2,36 @@ from django.shortcuts import render, redirect, get_object_or_404
from .models import OrderItem, Order
from .forms import OrderCreateForm
from cart.cart import Cart
from django.conf import settings
from decimal import Decimal
from main.views import get_user_id_from_session
from users.views import keycloak_login
from .utils import send_invoice_via_email
def order_create(request):
# Проверяем, авторизован ли пользователь
user_id = get_user_id_from_session(request)
if not user_id:
# Если пользователь не авторизован, перенаправляем на авторизацию через Keycloak
return keycloak_login(request)
cart = Cart(request)
if request.method == 'POST':
form = OrderCreateForm(request.POST)
if form.is_valid():
order = form.save(commit=False) # добавил commit=False
order = form.save(commit=False)
order.user_id = user_id
order.save()
for item in cart:
OrderItem.objects.create(order=order, product=item['product'], price=item['price'], quantity=item['quantity'])
cart.clear()
# Генерация и отправка PDF счета-фактуры
send_invoice_via_email(order.email, order) # Исправлено на order.email
send_invoice_via_email(order.email, order)
return redirect('orders:order_created', order_id=order.id)
else:
form = OrderCreateForm()
return render(request, 'orders/order/create.html', {'cart': cart, 'form': form})
def order_created(request, order_id):
order = get_object_or_404(Order, id=order_id)
return render(request, 'orders/order/created.html', {'order': order})