Merge remote-tracking branch 'origin/main'
This commit is contained in:
2
AuthApp/funcs.py
Normal file
2
AuthApp/funcs.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
|
||||||
58
AuthApp/middleware.py
Normal file
58
AuthApp/middleware.py
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
import json
|
||||||
|
import datetime
|
||||||
|
from django.http import HttpResponse
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
def set_cookie(response, key, value, days_expire=7):
|
||||||
|
if days_expire is None:
|
||||||
|
max_age = 365 * 24 * 60 * 60 # one year
|
||||||
|
else:
|
||||||
|
max_age = days_expire * 24 * 60 * 60
|
||||||
|
expires = datetime.datetime.strftime(
|
||||||
|
datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age),
|
||||||
|
"%a, %d-%b-%Y %H:%M:%S GMT",
|
||||||
|
)
|
||||||
|
response.set_cookie(
|
||||||
|
key,
|
||||||
|
value,
|
||||||
|
max_age=max_age,
|
||||||
|
expires=expires,
|
||||||
|
domain=settings.SESSION_COOKIE_DOMAIN,
|
||||||
|
secure=settings.SESSION_COOKIE_SECURE or None,
|
||||||
|
)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
class ResponseInterceptionMiddleware:
|
||||||
|
# def __init__(self, get_response):
|
||||||
|
# self.get_response = get_response
|
||||||
|
#
|
||||||
|
# def __call__(self, request):
|
||||||
|
# return self.get_response(request)
|
||||||
|
# def process_request(self, request):
|
||||||
|
def __init__(self, get_response):
|
||||||
|
self.get_response = get_response
|
||||||
|
# One-time configuration and initialization.
|
||||||
|
|
||||||
|
def __call__(self, request):
|
||||||
|
# Code to be executed for each request before
|
||||||
|
# the view (and later middleware) are called.
|
||||||
|
|
||||||
|
# if request.user.is_authenticated:
|
||||||
|
# request = request.user.user_profile.save_user_alerts_to_session(request)
|
||||||
|
|
||||||
|
response = self.get_response(request)
|
||||||
|
if request.user.is_authenticated:
|
||||||
|
for_save_to_session = request.user.user_profile.get_node_by_name('for_save_to_session')
|
||||||
|
if for_save_to_session:
|
||||||
|
for key, val in for_save_to_session.items():
|
||||||
|
# request.session[key] = json.dumps(val)
|
||||||
|
# response.set_cookie(key, json.dumps(val))
|
||||||
|
set_cookie(response, key, val, 30)
|
||||||
|
|
||||||
|
# Code to be executed for each request/response after
|
||||||
|
# the view is called.
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
@@ -48,6 +51,13 @@ class UserProfile(BaseModel):
|
|||||||
on_delete=models.SET_NULL
|
on_delete=models.SET_NULL
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def save_user_alerts_to_session(self, request):
|
||||||
|
for_save_to_session = self.get_node_by_name('for_save_to_session')
|
||||||
|
if for_save_to_session:
|
||||||
|
for key, val in for_save_to_session.items():
|
||||||
|
request.session[key] = json.dumps(val)
|
||||||
|
return request
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.user:
|
if self.user:
|
||||||
|
|||||||
@@ -55,8 +55,13 @@ def user_profile_View(request):
|
|||||||
|
|
||||||
Dict = {}
|
Dict = {}
|
||||||
|
|
||||||
|
user_online = request.session.get('online', False)
|
||||||
|
# request.COOKIES['user_id'] = request.user.id
|
||||||
|
|
||||||
t = loader.get_template('pages/profile/p_user_profile.html')
|
t = loader.get_template('pages/profile/p_user_profile.html')
|
||||||
return HttpResponse(t.render(Dict, request))
|
response = HttpResponse(t.render(Dict, request))
|
||||||
|
response.set_cookie('user_id', request.user.id)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
def login_View(request):
|
def login_View(request):
|
||||||
|
|||||||
@@ -34,6 +34,17 @@ class BaseModel(models.Model):
|
|||||||
else:
|
else:
|
||||||
return str(self.id)
|
return str(self.id)
|
||||||
|
|
||||||
|
def pop_node_by_name(self, node_name):
|
||||||
|
if not self.json_data or not node_name in self.json_data:
|
||||||
|
return None
|
||||||
|
|
||||||
|
res = self.json_data[node_name]
|
||||||
|
del self.json_data[node_name]
|
||||||
|
self.save(update_fields=['json_data'])
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
def get_node_by_name(self, node_name):
|
def get_node_by_name(self, node_name):
|
||||||
if not self.json_data or not node_name in self.json_data:
|
if not self.json_data or not node_name in self.json_data:
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -102,9 +102,12 @@ def update_chat_ajax(request):
|
|||||||
})
|
})
|
||||||
|
|
||||||
html = render_to_string(tpl_name, res_Dict, request=request)
|
html = render_to_string(tpl_name, res_Dict, request=request)
|
||||||
|
res_Dict.update({'receivers': get_chat_receivers_for_user(request.user)})
|
||||||
|
users_list_html = render_to_string('blocks/profile/b_list_of_users_messenger.html', res_Dict, request=request)
|
||||||
|
|
||||||
Dict.update({
|
Dict.update({
|
||||||
'html': html,
|
'html': html,
|
||||||
|
'users_list_html': users_list_html,
|
||||||
'required_beep': True,
|
'required_beep': True,
|
||||||
})
|
})
|
||||||
return JsonResponse(Dict, status=200)
|
return JsonResponse(Dict, status=200)
|
||||||
@@ -185,6 +188,16 @@ def send_msg_ajax(request):
|
|||||||
'text': data['text']
|
'text': data['text']
|
||||||
})
|
})
|
||||||
|
|
||||||
|
session_data = {
|
||||||
|
'for_save_to_session':{
|
||||||
|
'user_alerts':{
|
||||||
|
'new_message': True
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
receiver.user_profile.add_node_to_json_data(session_data, save=True)
|
||||||
|
|
||||||
msg = Message.objects.create(**msg_create_kwargs)
|
msg = Message.objects.create(**msg_create_kwargs)
|
||||||
|
|
||||||
if ticket:
|
if ticket:
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ MIDDLEWARE = [
|
|||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
'AuthApp.middleware.ResponseInterceptionMiddleware',
|
||||||
]
|
]
|
||||||
|
|
||||||
ROOT_URLCONF = 'TWB.urls'
|
ROOT_URLCONF = 'TWB.urls'
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ function check_new_messages_timeout(){
|
|||||||
|
|
||||||
}
|
}
|
||||||
check_msg = setInterval(function () {
|
check_msg = setInterval(function () {
|
||||||
|
// let new_message = getNewMessageSession()
|
||||||
|
let user_online = userOnline('set')
|
||||||
window = document.querySelector(".container-messages")
|
window = document.querySelector(".container-messages")
|
||||||
if (window === null){
|
if (window === null){
|
||||||
//
|
//
|
||||||
@@ -29,7 +30,7 @@ function check_new_messages_timeout(){
|
|||||||
check_new_messages(window,it)
|
check_new_messages(window,it)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
1000)
|
10000)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -58,6 +59,7 @@ function check_new_messages (window,it){
|
|||||||
data_new_messages.last_message_modifiedDT = last_message_time.dataset['modifieddt']
|
data_new_messages.last_message_modifiedDT = last_message_time.dataset['modifieddt']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
headers: { "X-CSRFToken": $('input[name=csrfmiddlewaretoken]').val() },
|
headers: { "X-CSRFToken": $('input[name=csrfmiddlewaretoken]').val() },
|
||||||
url: '/ru/messages/update_chat/',
|
url: '/ru/messages/update_chat/',
|
||||||
@@ -69,6 +71,7 @@ function check_new_messages (window,it){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: JSON.stringify(data_new_messages),
|
data: JSON.stringify(data_new_messages),
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
success_check_new_messages(data)
|
success_check_new_messages(data)
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -110,3 +113,16 @@ function success_check_new_messages (data) {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function userOnline (set=null,check=null) {
|
||||||
|
let user_online = null
|
||||||
|
if (set !== null){
|
||||||
|
user_online = navigator.userActivation.isActive || navigator.userActivation.hasBeenActive === true;
|
||||||
|
sessionStorage.setItem('online',user_online)
|
||||||
|
|
||||||
|
} else if (check !== null){
|
||||||
|
user_online = navigator.userActivation.isActive || navigator.userActivation.hasBeenActive === true;
|
||||||
|
sessionStorage.getItem('online')
|
||||||
|
}
|
||||||
|
return user_online
|
||||||
|
}
|
||||||
11
static/js/global_js.js
Normal file
11
static/js/global_js.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
$(document).ready(function (){
|
||||||
|
getNewMessageSession()
|
||||||
|
})
|
||||||
|
|
||||||
|
function getNewMessageSession (){
|
||||||
|
let new_message = JSON.parse(
|
||||||
|
sessionStorage.getItem('user_alerts')
|
||||||
|
)
|
||||||
|
return new_message
|
||||||
|
}
|
||||||
|
|
||||||
@@ -10,6 +10,7 @@ function createTicketShow () {
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
// data: formData,
|
// data: formData,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
|
|
||||||
document.querySelector(".insert-tech-place").innerHTML = data.html;
|
document.querySelector(".insert-tech-place").innerHTML = data.html;
|
||||||
|
|
||||||
@@ -80,6 +81,7 @@ function attachFileCreateTicket () {
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: data,
|
data: data,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
|
|
||||||
document.querySelector(".insert-tech-place").innerHTML = data.html;
|
document.querySelector(".insert-tech-place").innerHTML = data.html;
|
||||||
|
|
||||||
@@ -107,6 +109,7 @@ function attachFilemeassge () {
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: data,
|
data: data,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
|
|
||||||
document.querySelector(".insert-tech-place").innerHTML = data.html;
|
document.querySelector(".insert-tech-place").innerHTML = data.html;
|
||||||
|
|
||||||
@@ -130,6 +133,7 @@ function createTicket (el) {
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: formData,
|
data: formData,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
|
|
||||||
document.querySelector(".insert-tech-place").innerHTML = data.html;
|
document.querySelector(".insert-tech-place").innerHTML = data.html;
|
||||||
|
|
||||||
@@ -169,6 +173,7 @@ function selectedUserMessenger (ticket_id=null,user_id=null){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: JSON.stringify(data),
|
data: JSON.stringify(data),
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
|
|
||||||
document.querySelector(".info_profile").innerHTML = data.html;
|
document.querySelector(".info_profile").innerHTML = data.html;
|
||||||
|
|
||||||
@@ -219,6 +224,7 @@ function sendMessage(id_ticket=null,sender,receiver){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: JSON.stringify(data),
|
data: JSON.stringify(data),
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
|
|
||||||
document.querySelector(".container-messages").innerHTML = data.html;
|
document.querySelector(".container-messages").innerHTML = data.html;
|
||||||
document.querySelector(".enter-message-inp").value = null
|
document.querySelector(".enter-message-inp").value = null
|
||||||
@@ -251,6 +257,7 @@ function openTicket (ticket_id){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: JSON.stringify(data),
|
data: JSON.stringify(data),
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
|
|
||||||
document.querySelector(".info_profile").innerHTML = data.html;
|
document.querySelector(".info_profile").innerHTML = data.html;
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ function writeMessage(){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
// data: formData,
|
// data: formData,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
// location.href = '/profile'
|
// location.href = '/profile'
|
||||||
document.querySelector(".info_profile").innerHTML = data.html;
|
document.querySelector(".info_profile").innerHTML = data.html;
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ function technicalSupport(){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
// data: formData,
|
// data: formData,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
console.log('data received')
|
console.log('data received')
|
||||||
// location.href = '/profile'
|
// location.href = '/profile'
|
||||||
document.querySelector(".info_profile").innerHTML = data.html;
|
document.querySelector(".info_profile").innerHTML = data.html;
|
||||||
@@ -59,6 +61,7 @@ function mySubscription(){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
// data: formData,
|
// data: formData,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
console.log('data received')
|
console.log('data received')
|
||||||
// location.href = '/profile'
|
// location.href = '/profile'
|
||||||
document.querySelector(".info_profile").innerHTML = data.html;
|
document.querySelector(".info_profile").innerHTML = data.html;
|
||||||
@@ -83,6 +86,7 @@ function myProfile(){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
// data: formData,
|
// data: formData,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
console.log('data received')
|
console.log('data received')
|
||||||
// location.href = '/profile'
|
// location.href = '/profile'
|
||||||
document.querySelector(".info_profile").innerHTML = data.html;
|
document.querySelector(".info_profile").innerHTML = data.html;
|
||||||
@@ -161,6 +165,7 @@ function searchTown(el){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: JSON.stringify(get_address_point),
|
data: JSON.stringify(get_address_point),
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
return insertSearchList(data, el.name + '_list')
|
return insertSearchList(data, el.name + '_list')
|
||||||
},
|
},
|
||||||
error: function (data){
|
error: function (data){
|
||||||
@@ -313,6 +318,7 @@ function sendRoute(el, routeID = null){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
data: formData,
|
data: formData,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
console.log('data received')
|
console.log('data received')
|
||||||
// location.href = '/profile'
|
// location.href = '/profile'
|
||||||
document.querySelector(".info_profile").innerHTML = data.html
|
document.querySelector(".info_profile").innerHTML = data.html
|
||||||
@@ -383,6 +389,7 @@ function createRoute(){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
// data: {},
|
// data: {},
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
// console.log('data received')
|
// console.log('data received')
|
||||||
// location.href = '/profile'
|
// location.href = '/profile'
|
||||||
document.querySelector(".info_profile").innerHTML = data.html
|
document.querySelector(".info_profile").innerHTML = data.html
|
||||||
@@ -418,6 +425,7 @@ function getRoute(){
|
|||||||
// enctype: 'json',
|
// enctype: 'json',
|
||||||
// data: formData,
|
// data: formData,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
getNewMessageSession()
|
||||||
console.log('data received')
|
console.log('data received')
|
||||||
// location.href = '/profile'
|
// location.href = '/profile'
|
||||||
document.querySelector(".info_profile").innerHTML = data.html;
|
document.querySelector(".info_profile").innerHTML = data.html;
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
<span class="title-list-of-users">Чаты:</span>
|
<span class="title-list-of-users">Чаты:</span>
|
||||||
<div class="insert_users">
|
<div class="insert_users">
|
||||||
{% for item in receivers %}
|
{% for item in receivers %}
|
||||||
{% include "widgets/w_chat_right_panel_users.html" %}
|
{% include "widgets/w_chat_right_panel_user.html" %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
<link rel="stylesheet" href="{% static 'css/styles(boris).css' %}" >
|
<link rel="stylesheet" href="{% static 'css/styles(boris).css' %}" >
|
||||||
|
|
||||||
|
<script src="{% static "js/global_js.js" %}"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% block meta %}
|
{% block meta %}
|
||||||
|
|||||||
Reference in New Issue
Block a user