diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 259b267e..22275b54 100644 Binary files a/osinaweb/db.sqlite3 and b/osinaweb/db.sqlite3 differ diff --git a/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc b/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc index d9f9096c..77783d42 100644 Binary files a/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc and b/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc differ diff --git a/osinaweb/osichat/consumers.py b/osinaweb/osichat/consumers.py index 7766ff5c..5906a68c 100644 --- a/osinaweb/osichat/consumers.py +++ b/osinaweb/osichat/consumers.py @@ -8,6 +8,9 @@ import requests from django.forms.models import model_to_dict from django.core.serializers.json import DjangoJSONEncoder from django.db.models import Case, When, F, Max, DateTimeField + + + class OsitcomVisitor(WebsocketConsumer): def connect(self): async_to_sync(self.channel_layer.group_add)( @@ -26,6 +29,13 @@ class OsitcomVisitor(WebsocketConsumer): def receive(self, text_data): text_data_json = json.loads(text_data) event_type = text_data_json.get('event_type') + + + if event_type == 'set_client_type': + self.client_type = text_data_json.get('client_type') + self.user_id = text_data_json.get('user_id') + self.get_vistors_handler() + if event_type == 'visitor_ping': session_id = text_data_json.get('session_id') if Visitor.objects.filter(session_id=session_id).last(): @@ -44,6 +54,22 @@ class OsitcomVisitor(WebsocketConsumer): visit_date = datetime.now() ) + def get_vistors_handler(self): + visitors = Visitor.objects.all().order_by('-id') + context = { + 'visitors': visitors, + } + if self.client_type == 'mobile_admin': + visitor_data = [] + for visitor in visitors: + visitor_data = model_to_dict(visitor) + + self.send(text_data=json.dumps({ + 'event_type': 'get_visitors', + 'visitor_data': visitor_data, + }, cls=DjangoJSONEncoder)) + + @@ -151,6 +177,9 @@ class OsitcomChatRoom(WebsocketConsumer): self.domain = 'https://osina.ositcom.com' self.session_id = self.scope['url_route']['kwargs']['session_id'] self.visitor = Visitor.objects.filter(session_id=self.session_id).last() + if not self.visitor: + self.close() + return if self.scope['url_route']['kwargs'].get('chat_id'): #Case where admin is accessing a specific conversation between the conversations of this visior self.chat_room = get_object_or_404(ChatRoom, id=self.scope['url_route']['kwargs'].get('chat_id')) diff --git a/osinaweb/osichat/templates/chat-widget.html b/osinaweb/osichat/templates/chat-widget.html index e9ad768e..27b6312f 100644 --- a/osinaweb/osichat/templates/chat-widget.html +++ b/osinaweb/osichat/templates/chat-widget.html @@ -87,7 +87,7 @@ -
+
{% if chat_room %} {% if not chat_room.date_terminated %} {% include 'chat-room.html' %} diff --git a/osinaweb/static/images/uploaded_chat_files/1669023419225 (1).jpeg b/osinaweb/static/images/uploaded_chat_files/1669023419225 (1).jpeg new file mode 100644 index 00000000..cae3b9f9 Binary files /dev/null and b/osinaweb/static/images/uploaded_chat_files/1669023419225 (1).jpeg differ diff --git a/osinaweb/static/js/osichat/conversation.js b/osinaweb/static/js/osichat/conversation.js index 9d1396eb..02ba396b 100644 --- a/osinaweb/static/js/osichat/conversation.js +++ b/osinaweb/static/js/osichat/conversation.js @@ -1,6 +1,4 @@ -const chat_ws_scheme = window.location.protocol === "https:" ? "wss" : "ws"; -const protocol = window.location.protocol === "https:" ? "https" : "http"; -const domain = "osina.ositcom.com"; + let osichatSocket; let isOpen = false; let chatLoaded = false; @@ -88,7 +86,7 @@ async function fetchSessionID() { let session_id = 'Unknown'; while (session_id === 'Unknown') { try { - const response = await fetch('https://ositcom.com/get-client-session/'); + const response = await fetch(`${protocol}://${ositcomDomain}/get-client-session/`); const data = await response.json(); if (data.session_id) { session_id = data.session_id; @@ -164,10 +162,10 @@ function handleLoadChatEvent(data, osichatSocket) { } - if (!document.querySelector(`script[src="${protocol}://${domain}/static/js/osichat/chat-toggle.js"]`)) { + if (!document.querySelector(`script[src="${protocol}://${osinaDomain}/static/js/osichat/chat-toggle.js"]`)) { const script = document.createElement('script'); script.type = 'text/javascript'; - script.src = `${protocol}://${domain}/static/js/osichat/chat-toggle.js`; + script.src = `${protocol}://${osinaDomain}/static/js/osichat/chat-toggle.js`; chatDiv.appendChild(script); } @@ -178,17 +176,17 @@ function handleLoadChatEvent(data, osichatSocket) { const sendMessageContainer = document.getElementById('sendMessage'); //Case where returned is chat-room.html if (sendMessageContainer) { - appendTextAreaScript(domain, chatDiv); + appendTextAreaScript(osinaDomain, chatDiv); handleFormSubmission(sendMessageContainer, 'send_message', osichatSocket); const uploadScript = document.createElement('script'); uploadScript.type = 'text/javascript'; - uploadScript.src = `${protocol}://${domain}/static/js/osichat/upload-file.js`; + uploadScript.src = `${protocol}://${osinaDomain}/static/js/osichat/upload-file.js`; chatDiv.appendChild(uploadScript); const endChatScript = document.createElement('script'); endChatScript.type = 'text/javascript'; - endChatScript.src = `${protocol}://${domain}/static/js/osichat/end-chat.js`; + endChatScript.src = `${protocol}://${osinaDomain}/static/js/osichat/end-chat.js`; chatDiv.appendChild(endChatScript); const endChatButton = document.getElementById('endChat'); @@ -199,7 +197,7 @@ function handleLoadChatEvent(data, osichatSocket) { if (sendReviewContainer) { const sendReviewScript = document.createElement('script'); sendReviewScript.type = 'text/javascript'; - sendReviewScript.src = `${protocol}://${domain}/static/js/osichat/send-review.js`; + sendReviewScript.src = `${protocol}://${osinaDomain}/static/js/osichat/send-review.js`; chatDiv.appendChild(sendReviewScript); } } @@ -208,7 +206,7 @@ function handleLoadChatEvent(data, osichatSocket) { // FUNCTION TO INITIALIZE WEB SOCKET CONNECTION async function initializeChatWebSocket() { const session_id = await fetchSessionID(); - let osichatSocketUrl = `${chat_ws_scheme}://${domain}/ws/osichat/${session_id}/`; + let osichatSocketUrl = `${wsScheme}://${osinaDomain}/ws/osichat/${session_id}/`; osichatSocket = new WebSocket(osichatSocketUrl); osichatSocket.onopen = () => { @@ -289,7 +287,7 @@ async function initializeChatWebSocket() { unreadMessages.classList.remove('hidden'); unreadMessages.innerHTML = data.html; const script = document.createElement('script'); - script.src = `${protocol}://${domain}/static/js/osichat/chat-toggle.js`; + script.src = `${protocol}://${osinaDomain}/static/js/osichat/chat-toggle.js`; document.body.appendChild(script); } else { unreadMessages.classList.add('hidden'); @@ -305,7 +303,7 @@ async function initializeChatWebSocket() { document.getElementById(`endChat`).classList.add('hidden'); const sendReviewScript = document.createElement('script'); sendReviewScript.type = 'text/javascript'; - sendReviewScript.src = `${protocol}://${domain}/static/js/osichat/send-review.js`; + sendReviewScript.src = `${protocol}://${osinaDomain}/static/js/osichat/send-review.js`; currentChat.appendChild(sendReviewScript); break; case 'submit_review': @@ -315,7 +313,7 @@ async function initializeChatWebSocket() { } const reviewScript = document.createElement('script'); reviewScript.type = 'text/javascript'; - reviewScript.src = `${protocol}://${domain}/static/js/osichat/send-review.js`; + reviewScript.src = `${protocol}://${osinaDomain}/static/js/osichat/send-review.js`; submitReview.appendChild(reviewScript); break; default: diff --git a/osinaweb/static/js/osichat/upload-file.js b/osinaweb/static/js/osichat/upload-file.js index be54afb0..1dad1c90 100644 --- a/osinaweb/static/js/osichat/upload-file.js +++ b/osinaweb/static/js/osichat/upload-file.js @@ -20,14 +20,14 @@ } // Perform the upload - fetch(`${protocol}://${domain}/chat-file-uploader/`, { + fetch(`${protocol}://${osinaDomain}/chat-file-uploader/`, { method: 'POST', body: formData, }) .then(response => response.json()) .then(data => { if (data.data === 'Uploaded Successfully') { - const fullPath = `${protocol}://${domain}/${data.existingPath}`; + const fullPath = `${protocol}://${osinaDomain}/${data.existingPath}`; updateSelectTag(fullPath, file.name); if (file.type.startsWith('image/')) { osichatSocket.send(JSON.stringify({ 'event_type': 'uploaded_file', 'path': data.existingPath, 'file_type': 'image', 'file_name': file.name })); diff --git a/osinaweb/static/js/osichat/visitors.js b/osinaweb/static/js/osichat/visitors.js index 50a278c7..c5f36492 100644 --- a/osinaweb/static/js/osichat/visitors.js +++ b/osinaweb/static/js/osichat/visitors.js @@ -1,11 +1,13 @@ -const visitors_ws_scheme = window.location.protocol === "https:" ? "wss" : "ws"; -const my_domain = "osina.ositcom.com"; +const wsScheme = window.location.protocol === "https:" ? "wss" : "ws"; +const protocol = window.location.protocol === "https:" ? "https" : "http"; +const osinaDomain = "osina.ositcom.com"; +const ositcomDomain = "ositcom.com"; async function fetchClientData() { let clientData = { client_ip: 'Unknown', client_country: 'Unknown' }; while (clientData.client_ip === 'Unknown') { try { - const response = await fetch('https://osina.ositcom.com/get-client-ip/'); + const response = await fetch(`${protocol}://${osinaDomain}/get-client-ip/`); const data = await response.json(); if (data.ip) { clientData = { @@ -25,7 +27,7 @@ async function fetchVisitorsSession() { let session_id = 'Unknown'; while (session_id === 'Unknown') { try { - const response = await fetch('https://ositcom.com/get-client-session/'); + const response = await fetch(`${protocol}://${ositcomDomain}/get-client-session/`); const data = await response.json(); if (data.session_id) { session_id = data.session_id; @@ -42,7 +44,7 @@ async function initializeVisitorsWebSocket() { const referrer = document.referrer; const clientData = await fetchClientData(); const session_id = await fetchVisitorsSession(); - const visitorsSocketUrl = `${visitors_ws_scheme}://${my_domain}/ws/osichat/visitors/`; + const visitorsSocketUrl = `${wsScheme}://${osinaDomain}/ws/osichat/visitors/`; const visitorsSocket = new WebSocket(visitorsSocketUrl); visitorsSocket.onopen = () => {