Kagivault
Kagivault is an encrypted vault for the WordPress 7.0 AI Connectors API. Out of the box, WordPress stores the API keys you configure on Settings → Connectors (OpenAI, Anthropic, Google, OpenRouter, and any other AI provider registered with the AI Client) as plaintext rows in the wp_options table. Anyone with database access — backups, leaked dumps, host migration files — can read them. Kagivault wraps each AI Connectors key with XChaCha20-Poly1305 (authenticated encryption) and protects the data-encryption key with a vault password derived through Argon2id. The vault password is never persisted, and the vault automatically re-locks after a short, configurable idle timeout. Unlock from the admin UI, and the WordPress AI client transparently sees the decrypted keys — no other plugin changes required. Highlights Drop-in encryption for every AI Connectors provider (connectors_ai_*_api_key rows) Vault password unlock with idle-timeout auto-lock Recovery key as a parallel unlock path Optional: link a WordPress login password so signing in automatically unlocks the vault Easy-mode initialization — no separate vault password to remember if you just want one-click setup Transparent for the core WP AI client and the Connectors admin page Versioned blob format for future cipher upgrades Requirements WordPress 7.0 or newer (uses the Connectors API introduced in 7.0) PHP 8.3 or newer PHP sodium extension with XChaCha20-Poly1305 AEAD (sodium_crypto_aead_xchacha20poly1305_ietf_encrypt) PHP sodium extension with Argon2id (SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13, requires libsodium 1.0.13+) The bundled sodium extension shipped with PHP 8.3+ on most platforms (Debian/Ubuntu php-sodium, RHEL php-sodium, Alpine php-sodium, Windows official builds) includes both capabilities. The plugin refuses to activate and surfaces a clear admin notice if either is unavailable. Privacy Policy Kagivault does NOT: Send any data to external servers Track users Use cookies for tracking Share data with third parties Kagivault DOES: Process and store encrypted API keys locally on your server (wp_options) Keep the data-encryption key only in a short-lived transient that expires after the configured idle timeout Support For support, bug reports, or feature requests: Website: https://github.com/benridane/kagivault Development Development happens on GitHub. Pull requests welcome! Follow WordPress coding standards All code must pass wp plugin check kagivault
Top keywords
- ai8×2.19%
- connectors7×1.92%
- vault7×1.92%
- kagivault6×1.64%
- wordpress6×1.64%
- api5×1.37%
- key5×1.37%
- password5×1.37%
- sodium5×1.37%
- php4×1.10%
- vault password4×1.10%
- wp4×1.10%
Team Messenger
Team Messenger is a WordPress plugin that adds secure, real-time messaging for logged-in users. It includes one-to-one chats, group rooms, optional end-to-end encryption for private threads, media uploads with administrator-controlled policies, presence, notification badges, pinned messages, and dedicated interfaces on both the public site and in wp-admin. Technical details and changelog notes may be published on the plugin support page or in the documentation as they are updated. English — Numbered feature list Real-time direct messaging between logged-in WordPress users over the REST API (team_messenger/v1), including pagination for message history. Optional end-to-end encryption (E2E) for direct messages: clients can exchange messages flagged as encrypted, and public keys are stored per user through dedicated REST endpoints (/keys). Group chats remain readable on the server (plaintext on the server side). Full group-chat lifecycle: create, read, update, and delete groups; set a name, description, and group avatar; list members; add or remove members; and promote or demote roles with a PATCH request on members. Rich media in chats: image, video, and audio attachments, plus optional voice messages recorded in the browser (MediaRecorder, typically WebM/WebA) with server-side MIME handling for reliable uploads. Two upload contexts on /media/upload: chat for conversation attachments and avatar for group profile images. Each context has independent size and format rules, which the server enforces. Administrator-configurable media policy: separate maximum file sizes for chat (0.1–100 MB) and group avatars (0.1–50 MB); toggles for allowed chat categories (image / video / audio) and allowed avatar formats (for example JPEG, PNG, GIF, WebP). Limits are sent to the client as hints; the server performs the final validation. Flexible storage for uploaded files: attachments can live in the WordPress Media Library or in a plugin-protected directory (.htaccess where applicable). Private-path files are downloaded through an authenticated /media/download/{file} request. “Saved messages” (self-chat): a personal notebook thread in which the current user is both sides, for notes and files. Recent conversations: when no search query is sent, the user list prioritizes people you have messaged recently and does not expose the entire user directory. Privacy-conscious user search: at least three characters are required, and the number of results is capped. Presence (online / last seen): clients send a throttled heartbeat to POST /presence. The last_seen and is_online fields appear in user lists only when the viewer has shared direct-message history with that user or shares a group (privacy-preserving). Notifications: GET /notifications/counts returns separate counts and text previews for new personal and group activity since the last acknowledgment. POST /notifications/ack accepts a scope of all, personal, or group. WordPress admin bar integration: when the toolbar is visible, separate nodes show personal and group chat badges. Dropdowns load preview snippets (periodic polling) and allow clearing notifications by scope. Non-administrators link to the site home; users with manage_options can open the full messenger screen. Dashboard widgets (administrators): two WordPress Dashboard widgets—personal (1:1) and group—provide inline chat with the same REST capabilities as the main messenger (including pins and upload limits). They are visible only to users with manage_options who have not disabled admin chat. Pinned messages: one pin per direct thread (stored in team_messenger_direct_pins) and one per group (pinned_message_id). You can pin or unpin from the floating widget, [team_messenger_web_chat], the admin messenger, and the dashboard widgets. A pinned strip shows a snippet and scrolls to the message. Pins are cleared if the underlying message is deleted. Read state: opening a direct thread marks incoming messages from the partner as read (is_read). For groups, per-user last-read timestamps sync when the thread is opened. Your own outgoing group messages can show read receipts (“sent” vs “read”) when all other members have caught up. Message lifecycle: edit or soft-delete your own messages in direct and group threads (the API supports edit and delete on owned messages). Data retention: a daily scheduled event permanently removes soft-deleted direct and group messages whose deleted_at is older than 30 days (GDPR-oriented housekeeping). Multiple surfaces: a floating chat widget on the front end; a full-page [team_messenger_web_chat] shortcode with configurable HTML fallback for guests; a dedicated admin “Messenger” screen; an optional floating FAB on all wp-admin screens (toggle in settings, respects the per-user “hide admin chat” setting); admin bar badges; and two dashboard widgets for administrators. Customization in settings: primary accent color, widget corner placement, welcome text, shortcode guest content (visual/HTML editor), and a site-wide “show messenger on all wp-admin screens” option. Per-user preferences on the user profile: optionally hide front-end chat (widget and shortcode UI) and/or all wp-admin chat (floating messenger, full messenger page, admin bar nodes, and dashboard widgets). Shortcode pages show a short notice if frontend chat is disabled for that user. Abuse protection: rate limiting on sending messages and on creating groups, to reduce spam and overload. Internationalization: text domain team-messenger. Persian (fa_IR) and other translations can ship in the languages folder. English is the source language. فارسی — فهرست شمارهدار امکانات ۱. پیامرسانی مستقیم (یکبهیک) بین کاربران واردشدهٔ وردپرس از طریق REST API با فضای نام team_messenger/v1 و صفحهبندی تاریخچهٔ پیام. ۲. رمزنگاری سرتاسری اختیاری برای گفتگوی خصوصی: میتوان پیام را با پرچم رمزشده ذخیره کرد؛ کلیدهای عمومی از طریق endpointهای /keys ذخیره و بازیابی میشوند. در گفتگوی گروهی، متن روی سرور بهصورت متن عادی قابل پردازش است. ۳. چرخهٔ کامل مدیریت چت گروهی: ایجاد، ویرایش و حذف گروه؛ تنظیم نام، توضیحات و آواتار گروه؛ فهرست اعضا؛ افزودن یا حذف عضو؛ و تغییر نقش با PATCH روی عضو. ۴. رسانهٔ غنی در گفتگو: تصویر، ویدیو و صوت؛ پیام صوتی با ضبط در مرورگر (معمولاً WebM/WebA) و نرمالسازی MIME در سمت سرور. ۵. دو زمینهٔ آپلود در /media/upload: chat برای پیوست گفتگو و avatar برای تصویر پروفایل گروه؛ هر کدام سقف حجم و فرمت مستقل دارند و اعتبارسنجی نهایی در سرور انجام میشود. ۶. سیاست رسانه از پنل مدیر: حداکثر حجم جداگانه برای چت (۰٫۱ تا ۱۰۰ مگابایت) و آواتار گروه (۰٫۱ تا ۵۰ مگابایت)؛ امکان روشن یا خاموش کردن دستههای مجاز چت و فرمتهای مجاز آواتار. اعداد بهصورت راهنما به کلاینت ارسال میشوند و تصمیم نهایی با سرور است. ۷. ذخیرهسازی انعطافپذیر: فایلها میتوانند در کتابخانهٔ رسانهٔ وردپرس یا در پوشهٔ محافظتشدهٔ افزونه (با .htaccess در صورت امکان) قرار بگیرند. برای مسیر اختصاصی، دانلود فقط از طریق /media/download/{file} و برای کاربر احراز هویتشده انجام میشود. ۸. «پیامهای ذخیرهشده» (چت با خود): فضای شخصی برای یادداشت و فایل که کاربر فعلی هر دو طرف گفتگو است. ۹. گفتگوهای اخیر: وقتی جستجویی ارسال نشده باشد، فهرست کاربران کسانی را در اولویت قرار میدهد که اخیراً با آنها پیام رد و بدل کردهاید و کل دایرکتوری کاربران را نمایش نمیدهد. ۱۰. جستجوی کاربر با رعایت حریم خصوصی: حداقل سه کاراکتر لازم است و تعداد نتایج محدود است. ۱۱. حضور (آنلاین / آخرین فعالیت): کلاینت ضربان کنترلشده (throttled) به POST /presence میفرستد. فیلدهای last_seen و is_online فقط وقتی در فهرست کاربران دیده میشوند که بیننده سابقهٔ پیام خصوصی مشترک یا عضویت در یک گروه مشترک با آن کاربر داشته باشد. ۱۲. اعلانها: GET /notifications/counts شمارنده و پیشنمایش متن فعالیت شخصی و گروهی را از زمان آخرین تأیید برمیگرداند. POST /notifications/ack محدودهٔ all، personal یا group را میپذیرد. ۱۳. یکپارچگی با نوار ابزار وردپرس: وقتی نوار ابزار نمایان است، دو گره جدا شمارندهٔ چت شخصی و گروهی را نشان میدهند. منوهای کشویی پیشنمایش را با polling دورهای بارگذاری میکنند و امکان پاکسازی اعلانها بر اساس محدوده را دارند. کاربران غیرمدیر به صفحهٔ خانه لینک میشوند؛ کاربران دارای manage_options میتوانند به صفحهٔ کامل پیامرسان بروند. ۱۴. ویجتهای پیشخوان (مدیران): دو ویجت جداگانه در پیشخوان وردپرس—گفتگوی شخصی (یکبهیک) و گروهی—همان قابلیتهای REST پیامرسان اصلی را دارند (از جمله پین و محدودیت آپلود). فقط برای کاربران دارای manage_options که چت مدیریت را غیرفعال نکردهاند نمایش داده میشوند. ۱۵. پیام پینشده: یک پین برای هر گفتگوی دونفره و یک پین برای هر گروه. پین و برداشتن پین از ویجت شناور، شورتکد [team_messenger_web_chat]، پیامرسان مدیریت و ویجتهای پیشخوان امکانپذیر است. نوار پین تکهای از متن را نشان میدهد و به پیام اسکرول میکند. اگر پیام اصلی حذف شود، پین نیز برداشته میشود. ۱۶. وضعیت خواندهشدن: با باز کردن گفتگوی خصوصی، پیامهای ورودی طرف مقابل بهصورت is_read علامت میخورند. در گروه، مهر زمانی آخرین بازدید هر کاربر همگام میشود. برای پیامهای خروجی خودتان میتوان رسید «همه خواندند» را وقتی سایر اعضا همگام شدهاند نشان داد. ۱۷. چرخهٔ پیام: ویرایش یا حذف نرم پیامهای خودتان در گفتگوی خصوصی و گروهی از طریق API. ۱۸. نگهداری داده: یک رویداد زمانبندیشدهٔ روزانه پیامهای حذفشدهٔ نرم مستقیم و گروهی را که deleted_at آنها قدیمیتر از ۳۰ روز است برای همیشه پاک میکند (خانهتکانی با رویکرد GDPR). ۱۹. چندین رابط: ویجت شناور در سایت؛ شورتکد تمامصفحهٔ [team_messenger_web_chat] با محتوای HTML قابل تنظیم برای مهمان؛ صفحهٔ اختصاصی «پیامرسان» در مدیریت؛ دکمهٔ شناور اختیاری در تمام صفحات wp-admin (تنظیم سراسری و احترام به خاموش بودن چت مدیریت برای هر کاربر)؛ نشانهای نوار ابزار؛ و دو ویجت پیشخوان برای مدیران. ۲۰. شخصیسازی در تنظیمات: رنگ اصلی تأکید، محل گوشهٔ ویجت، متن خوشآمدگویی، محتوای مهمان شورتکد (ویرایشگر دیداری/HTML)، و گزینهٔ سراسری «نمایش پیامرسان در تمام صفحات wp-admin». ۲۱. ترجیحات هر کاربر در پروفایل: امکان پنهان کردن چت سایت (ویجت و رابط شورتکد) و/یا همهٔ چت wp-admin (پیامرسان شناور، صفحهٔ کامل پیامرسان، گرههای نوار ابزار و ویجتهای پیشخوان). اگر چت فرانتاند برای آن کاربر خاموش باشد، صفحهٔ شورتکد یک اعلان کوتاه نشان میدهد. ۲۲. محافظت در برابر سوءاستفاده: محدودیت نرخ ارسال پیام و ایجاد گروه برای کاهش هرزنامه و بار اضافی. ۲۳. چندزبانه: دامنهٔ متن team-messenger؛ ترجمههای فارسی (fa_IR) و سایر زبانها میتوانند از پوشهٔ languages عرضه شوند؛ زبان مبدأ متنها انگلیسی است.