Skip to content

feat(freshdesk): osobne widgety wsparcia dla zalogowanych i anonimów + JWT - #868

Merged
mpasternak merged 5 commits into
devfrom
feat/freshdesk-widget-jwt
Oct 21, 2026
Merged

mpasternak merged 5 commits into
devfrom
feat/freshdesk-widget-jwt

Conversation

@mpasternak

@mpasternak mpasternak commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Co

  • Zalogowani — widget DJANGO_BPP_FRESHDESK_WIDGET_ID (domyślnie dotychczasowe 205000000433). Gdy ustawiony DJANGO_BPP_FRESHDESK_WIDGET_JWT_SECRET, użytkownik jest uwierzytelniany w widgecie (FreshworksWidget('authenticate', {token, callback})) tokenem JWT z nowego endpointu /freshdesk/widget-token/ (HS256, name/email/exp = +1h, odnawiany callbackiem). Bez sekretu — jak dotąd identify.
  • Anonimowi — osobny widget DJANGO_BPP_FRESHDESK_WIDGET_ID_ANON (captcha konfigurowana w Freshdesku). Pusty = brak przycisku (domyślnie).
  • Zrebase'owane na feat(support): zakładka „Pomoc" w prawym dolnym rogu, okno wyskakuje z zakładki #856 (zakładka „Pomoc”): wspólny szablon freshdesk_widget.html (ID widgetu z konfiguracji zamiast literału), logika JWT dopisana do bpp/js/support-tab.js. open czeka, aż authenticate trafi do kolejki widgetu.
  • Dokumentacja zmiennych: docs/administrator/widget-wsparcia-freshdesk.md (+ nav w mkdocs, .env.example).

Uwagi

  • Endpoint tokenu: anonim → 403 JSON (nie 302), brak sekretu / brak e-maila → 404; never_cache. Sekret nigdy nie trafia do HTML.
  • Usunięto no-opowe disable pola cf_page_url z frontendu (prefill idzie do cf_adres_url).
  • Anonimowy widget (gdy skonfigurowany) pokaże się też na stronie logowania admina.

Testy

  • src/django_bpp/tests/test_freshdesk_widget.py — context processor, szablon (anon/zalogowany, brak ID, brak sekretu w HTML), payload JWT, endpoint 403/404/200.
  • Playwright (test_admin_freshworks_lazy.py): JWT w adminie (hide → prefill → authenticate → open, token weryfikowany sekretem) oraz osobny widget anonima na stronie publicznej (hide → prefill → open, bez identify).

🤖 Generated with Claude Code

https://claude.ai/code/session_01Rb8Fst46CA2yvPhao1AriX

mpasternak and others added 2 commits October 20, 2026 14:55
…+ JWT

- zalogowani: widget DJANGO_BPP_FRESHDESK_WIDGET_ID; gdy ustawiony
  DJANGO_BPP_FRESHDESK_WIDGET_JWT_SECRET, uwierzytelnienie
  FreshworksWidget('authenticate') tokenem z /freshdesk/widget-token/
  (HS256, exp 1h, odnawiany callbackiem widgetu)
- anonimowi: osobny widget DJANGO_BPP_FRESHDESK_WIDGET_ID_ANON (captcha
  po stronie Freshdesku); pusty ID = brak przycisku
- jeden wspólny szablon + bpp/js/freshdesk-widget.js dla frontendu
  i admina (leniwe ładowanie także na frontendzie)
- dokumentacja zmiennych: docs/administrator/widget-wsparcia-freshdesk.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rb8Fst46CA2yvPhao1AriX
…b.js)

Po rebase na #856 (zakładka „Pomoc") logika JWT trafia do wspólnego
support-tab.js zamiast osobnego freshdesk-widget.js:

- przy data-token-url: "authenticate" z tokenem z serwera i callbackiem
  odnawiającym; "open" czeka, aż uwierzytelnienie trafi do kolejki,
- bez JWT: "identify" jak dotąd; anonim (brak data-user-*): bez identify,
- testy Playwright: JWT w adminie (kolejność hide → prefill →
  authenticate → open, poprawny token) i osobny widget anonima na
  stronie publicznej.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rb8Fst46CA2yvPhao1AriX
@mpasternak
mpasternak force-pushed the feat/freshdesk-widget-jwt branch from 3f8e914 to dd87ed9 Compare October 20, 2026 12:58
mpasternak and others added 2 commits October 21, 2026 20:14
…mail w opisie widgetu

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…upport.iplweb.pl

Skrypt Freshworks ładuje się dopiero po otrzymaniu tokenu; brak tokenu
(konto bez e-maila, błąd sieci) = stan błędu zakładki zamiast cichego
identify z niepodpisanymi danymi.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gdy tokenu nie da się uzyskać (konto bez e-maila, błąd sieci), a ustawiono
DJANGO_BPP_FRESHDESK_WIDGET_ID_ANON, ładuje się widget anonimowy (z captchą)
zamiast odsyłania do support.iplweb.pl.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mpasternak
mpasternak merged commit e97f827 into dev Oct 21, 2026
24 checks passed
@mpasternak
mpasternak deleted the feat/freshdesk-widget-jwt branch October 21, 2026 18:52
mpasternak added a commit to iplweb/bpp-deploy that referenced this pull request Oct 21, 2026
Jeden rejestr (scripts/config-registry.tsv) zmiennych .env, o ktorych
decyduje tylko operator: e-mail admina, SSL, Slack, Rollbar, Google,
backupy, widgety Freshdesk (iplweb/bpp#868: WIDGET_ID, WIDGET_ID_ANON,
WIDGET_JWT_SECRET). Korzystaja z niego:

- init-configs (--init) - zamiast wlasnych pytan i ensure_env_var,
- make up / up-quick / refresh (ask-missing-config) - pyta RAZ o brakujace;
  pusta odpowiedz zapisuje VAR= = decyzja "nie mamy", nie pyta ponownie;
  bez TTY / pod BPP_SKIP_HEALTH_GATE / BPP_NO_CONFIG_PROMPT nie pyta,
  timeout/EOF nic nie zapisuje,
- make configure - menu grup, zapis na koncu,
- make config-check + make doctor (pozycja 7) - walidacja wartosci,
- make docs-config-table - tabela w docs/konfiguracja/zmienne.md
  (test pilnuje aktualnosci).

Swiezy .env z init-configs ma ten sam zbior zmiennych co wczesniej
(+ 3 Freshdesk); migracja DJANGO_BPP_BACKUP_DIR dziala jak dotad.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant