From 5d275d310a1911e705d63ba6658f2adc22e9a4df Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 7 Feb 2026 18:05:13 +0000 Subject: [PATCH] v3 --- core/__pycache__/urls.cpython-311.pyc | Bin 621 -> 713 bytes core/__pycache__/views.cpython-311.pyc | Bin 2226 -> 3851 bytes core/urls.py | 3 ++- core/views.py | 31 +++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 5ef2e2fd625e814d47bae5164f3d4104d5e59d25..16bfba7561e947aff87dbd1c99d1cb1270900188 100644 GIT binary patch delta 194 zcmaFMa*|bjIWI340}vF~wr55&GB7*_abSQG%J_V3qWap28(1}YQ<<|kV6rKEYuJ`C zGcc?MVhBiQjp9t<4`$F5n0U`wS}-NCI3p=Pu_#5qJT)mJKR^2xJCre5fl-f7fK6rT0|d9$|HiJiva)ZHiq6iN-@uT4Tz3NZmyO)7$r@Fh5&vE#7zrn4Io zTnAGrRihTEgry>_ddP{Y0#%e=dZ;R-qMp~5C8Cug< zzIpRz-pqs6&trja{r(m}+Q$o@=6>@o2O`YR%X@a00c15HFD69>Kma+-o0pQ3tMgh* zvIPoI)a1M`>C5|*{(K-A$SX;O*u9G&8ALpk7Qr3DdY4kWE!j%YmY2{rg32$Up-v=1 z-%D^9^5dY_zx-fG?PVM}ZQ#rVnn(E=lXQKjO>^cfGG_FGfkuDWe4XLLWM=P=s^wLS7sypcrKBMV#29CPJ(|W-~^QOU*o=O`I(Sb@s z_=#dHS^w}mtX0ln+O4?oiS-p9IYp^@IZP+Tom9L^1xry6em0rmAwZqf@nuqlnN$`{ zXgR~g-NX{L{^F0iq+g#@sVlb?^8XXk5lw^=UC9<(53#A1EFOKcooH!>h(@DJqjCLd zl3;Fw5}0mS0Aw!F00I8KWc}jl3PH~u;(7O(_X1PL*=@MT#ScJk8_t#($k#c~lstIE z6rN26ra9|hPpqxvxhFKcS?{pB%7#$#K(X$tm~;o~t+Z|SaqyxQdZBc$0x&H#bdnRQ#w=&x~Znh8adm9|4Yj6cZ9ra z!+S_l9X5;1=auIOnVe=K>YNr zMf3`8sX83ZmczR#awIoBWj8+@OqnT%K?Xg>^m=I2vN(q(r*!=iK1K|*_>55!=ryn* z1{SZbv{%KLEygyKSFV5bMftPxO0lBsttoq#xV2!%E%~-`Q?b>9mEfUT@X!*!7LML} z@AlZuvDL9k_;4+JcuCrj%gT+xsvNWB*y<4?o(Le=alQOl>8UC`_m9|0PetjkDgBR? z<5lH&MLAJZPHY0kzyBe!$1YY+U9?YKT<_>!JyYq3*E-^MF#fv|wLANM>b8}kiZWDF zhHUT9h7`OWTRB>lx@@UylM|%V%zCKf*1$^ko3i#e)>n=7-QQD*4b)--mC#@Hha4tG-t%=PUDoRV^ybI( zdD(gl=yi?hM!P%y9l-RSbsvkry~px;E1cEP5I#vjat?se%2*p>|GvXEX!_T{F1z_( r1M)TZTeG^nJFWd*$r|)#d%eKp-}LNY1~vf^f3T#x7<~@7s2jq6F9+@| delta 586 zcmZvYxlY4C5Qe>R)==z54pD?691=9q*0dl* z2amx6fZQV?DjFIpW*iP77|FlJ|IU0nvu8uMIdNrK83khxPBztaL*&_UV`AJ@owTR< zx~=<$ZTO~b`WZXJ6o=OpyT#>>R#z^u>xNpBuv^j9|F{;q#vfNW=896tG@fVg7T6Ty z?TFxaJE=ETGcb+yptR+dqcB#Bo(CpcKtskx0FDc5rTv(fgK8xL72N`dHmb-|1z-1q z-4J>y*ULdAa`&Q;hTl`{yc!f03K+s3h zPmJ=52-%jNnOLE@{&V@JO0^*W3_#2u)V{A4(O!peC)< zB#zR diff --git a/core/urls.py b/core/urls.py index 28de9ee..71c48db 100644 --- a/core/urls.py +++ b/core/urls.py @@ -4,6 +4,7 @@ from . import views urlpatterns = [ path('', views.home, name='home'), path('dashboard/', views.dashboard, name='dashboard'), + path('dashboard/webhook', views.webhook, name='webhook'), path('fanpages/', views.fanpage_list, name='fanpage_list'), path('flows/', views.flow_list, name='flow_list'), -] \ No newline at end of file +] diff --git a/core/views.py b/core/views.py index 65ea9e7..206641c 100644 --- a/core/views.py +++ b/core/views.py @@ -1,5 +1,8 @@ from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.decorators import login_required +from django.views.decorators.csrf import csrf_exempt +from django.http import HttpResponse +import json from .models import Fanpage, Flow, MessageLog, ChatSession def home(request): @@ -30,3 +33,31 @@ def fanpage_list(request): def flow_list(request): flows = Flow.objects.all() return render(request, 'core/flow_list.html', {'flows': flows}) + +@csrf_exempt +def webhook(request): + if request.method == 'GET': + # Facebook Webhook verification + mode = request.GET.get('hub.mode') + token = request.GET.get('hub.verify_token') + challenge = request.GET.get('hub.challenge') + + if mode == 'subscribe' and token: + # Check if this token matches any Fanpage verify_token + # or the one specifically mentioned by the user + if Fanpage.objects.filter(verify_token=token).exists() or token == 'pages_messaging': + return HttpResponse(challenge) + + return HttpResponse('Verification failed', status=403) + + elif request.method == 'POST': + # Handle incoming messages + try: + data = json.loads(request.body.decode('utf-8')) + # Process the webhook payload here in the future + # For now, just return 200 OK + return HttpResponse('EVENT_RECEIVED') + except Exception as e: + return HttpResponse('Error processing request', status=400) + + return HttpResponse('Method not allowed', status=405) \ No newline at end of file