ویجت وضعیت پشتیبانگیری در سایت شما
وضعیت منابع و نسخههای اخیر را در پنل سایت خودتان نشان دهید؛ با iframe امن، بارگذار سبک و توکن کوتاهعمری که سرور شما میسازد.
در این صفحه
چطور کار میکند
ویجت یک صفحه کوچک روی لبه نمایک است که در iframe سایت شما بار میشود. سرور شما با کلید محرمانه یک توکن کوتاهعمر و فقطخواندنی میسازد و مرورگر آن را با postMessage به ویجت میدهد. ویجت فقط اینها را نشان میدهد:
- نام، موتور و وضعیت سلامت هر منبع؛ آخرین نسخه موفق و اجرای بعدی.
- نسخههای اخیر: زمان، حجم (اگر روشن باشد)، تایید شده، سنجاق و قفل تغییرناپذیر.
- خطاهای اخیر (اگر روشن باشد): فقط نوع و زمان؛ هرگز متن خطا، نشانی سرور، شناسه کار یا عامل.
ساخت ویجت
در پنل «سیاستها › ویجت سایت» ویجت بسازید: نام، دامنههای مجاز (دقیقا مبدا، مثلا https://www.example.com)، منابع، نمایش حجم و خطاها، پوسته و زبان. پیشنمایش همان ویجت واقعی است.
ساخت توکن در سرور شما
فقط پس از ورود کاربر در سیستم خودتان توکن بسازید و آن را از یک مسیر بکاند به صفحه بدهید. کلید محرمانه هرگز به مرورگر نمیرسد.
| پارامتر | نوع | لزوم | پیشفرض | توضیح |
|---|---|---|---|---|
origin | string | لازم | — | دامنه صفحهای که ویجت را نشان میدهد؛ باید در دامنههای مجاز ویجت باشد. |
ttlSeconds | 60..3600 | اختیاری | 900 | عمر توکن؛ سقف از تنظیمات سامانه. |
sourceIds | uuid[] | اختیاری | — | زیرمجموعهای از منابع ویجت برای همین بیننده. |
subject | string ≤ 64 | اختیاری | — | شناسه دلخواه بیننده در سیستم شما (برای گزارش). |
curl -sS -X POST "https://api.namayek.com/v1/backup/widgets/bw_YOUR_WIDGET_ID/embed-tokens" \ -H "Authorization: Bearer $NAMAYEK_SECRET_KEY" \ -H "Content-Type: application/json" \ -d '{"origin":"https://www.example.com","ttlSeconds":900}'// Node.js 18+ — your backend route, e.g. GET /api/namayek-widget-token (after your own login check)// keep the token until 60 s before it expires: one mint per ttlSeconds, not one per page viewlet cached = null; // { token, expiresAt } export async function mintWidgetToken() { if (cached && Date.parse(cached.expiresAt) - Date.now() > 60_000) return cached.token; const res = await fetch("https://api.namayek.com/v1/backup/widgets/bw_YOUR_WIDGET_ID/embed-tokens", { method: "POST", headers: { Authorization: `Bearer ${process.env.NAMAYEK_SECRET_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ origin: "https://www.example.com", ttlSeconds: 900 }), }); if (!res.ok) throw new Error(`namayek: ${res.status}`); const { data } = await res.json(); // { token, expiresAt } cached = data; return data.token;}<?php// your backend endpoint (after your own login check)$ch = curl_init("https://api.namayek.com/v1/backup/widgets/bw_YOUR_WIDGET_ID/embed-tokens");curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "Authorization: Bearer " . getenv("NAMAYEK_SECRET_KEY"), "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode(["origin" => "https://www.example.com", "ttlSeconds" => 900]),]);$body = json_decode(curl_exec($ch), true);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);curl_close($ch);if ($status !== 200 && $status !== 201) { http_response_code(502); exit; }header("Content-Type: application/json");header("Cache-Control: no-store");echo json_encode(["token" => $body["data"]["token"]]);# your backend view (after your own login check)import os, requests def mint_widget_token() -> str: res = requests.post( "https://api.namayek.com/v1/backup/widgets/bw_YOUR_WIDGET_ID/embed-tokens", headers={"Authorization": f"Bearer {os.environ['NAMAYEK_SECRET_KEY']}"}, json={"origin": "https://www.example.com", "ttlSeconds": 900}, timeout=10, ) res.raise_for_status() return res.json()["data"]["token"]بارگذار جاوااسکریپت
بارگذار کمتر از ۲ کیلوبایت است، iframe را با sandbox و بیارجاع میسازد، توکن را فقط به مبدا لبه میفرستد و ارتفاع را خودکار تنظیم میکند.
<div id="backup-status"></div><script src="https://vault.namayek.com/widget/v1/embed.js" defer></script><script> window.addEventListener("load", function () { NamayekBackupWidget.mount(document.getElementById("backup-status"), { widget: "bw_YOUR_WIDGET_ID", // your own backend endpoint that mints the embed token (see "token" above) getToken: function () { return fetch("/api/namayek-widget-token", { credentials: "same-origin" }) .then(function (r) { return r.json(); }) .then(function (j) { return j.token; }); }, theme: "auto", height: 420 }); });</script>| پارامتر | نوع | لزوم | پیشفرض | توضیح |
|---|---|---|---|---|
widget | string (bw_…) | لازم | — | شناسه عمومی ویجت از پنل. |
getToken | () => Promise<string> | لازم | — | از سرور خودتان توکن تازه بگیرید؛ هنگام انقضا دوباره صدا زده میشود (حداکثر هر ۳۰ ثانیه). |
theme | light | dark | auto | اختیاری | تنظیم ویجت | پوسته. |
height | number (px) | اختیاری | 360 | ارتفاع اولیه؛ بعد خودکار بین ۱۲۰ تا ۲۰۰۰ پیکسل. |
title | string | اختیاری | — | عنوان دسترسپذیر iframe. |
| type | نوع / مقدار | توضیح |
|---|---|---|
nmk-bw:ready | iframe ← بارگذار | ویجت آماده دریافت توکن است. |
nmk-bw:token | بارگذار ← iframe | توکن، فقط به مبدا لبه پشتیبانگیری فرستاده میشود. |
nmk-bw:token-expired | iframe ← بارگذار | توکن منقضی شد؛ getToken دوباره صدا زده میشود. |
nmk-bw:size | iframe ← بارگذار | ارتفاع محتوا برای تغییر اندازه iframe. |
iframe ساده
اگر نمیخواهید اسکریپت بارگذار را بیاورید، توکن را در بخش #t= نشانی iframe بگذارید؛ این بخش هرگز به سروری فرستاده نمیشود و ویجت فورا آن را از نشانی پاک میکند. پس از انقضا باید صفحه دوباره ساخته شود.
<!-- TOKEN = minted by your server for this page view; the #fragment is never sent to any server --><iframe src="https://vault.namayek.com/widget/v1/w/bw_YOUR_WIDGET_ID#t=TOKEN" sandbox="allow-scripts allow-same-origin" referrerpolicy="no-referrer" loading="lazy" title="Backup status" width="100%" height="420" frameborder="0"></iframe>CSP سایت شما
اگر سایت شما CSP دارد، لبه نمایک را فقط برای iframe و اسکریپت بارگذار مجاز کنید:
Content-Security-Policy: frame-src https://vault.namayek.com; script-src 'self' https://vault.namayek.comامنیت
- ویجت روی دامنه لبه نمایک اجرا میشود با CSP سختگیر و frame-ancestors فقط دامنههای مجاز شما.
- توکن با postMessage و بررسی مبدا در هر دو طرف منتقل میشود؛ در حالت iframe ساده در بخش # نشانی که هرگز به سرور نمیرود و فورا پاک میشود.
- توکن فقطخواندنی، حداکثر یک ساعته و محدود به یک ویجت، یک دامنه و منابع مشخص است.
- همه داده با textContent نمایش داده میشود؛ هیچ HTML از داده ساخته نمیشود.
- ویجت هیچ درخواستی به میزبان دیگری نمیزند؛ پیشنمایش پنل هم از همین ویجت واقعی با توکن مخصوص پیشنمایش است.
آخرین بهروزرسانی: