Reference základních pluginů
CatCMS obsahuje několik základních pluginů, které poskytují klíčové funkce pro váš CMS. Tyto pluginy se automaticky instalují a konfigurují při nastavení CatCMS.[object Object]
Přehled
Základní pluginy rozšiřují CatCMS o klíčové funkce, jako je autentizace, správa médií, cachování a administrace databáze. Dodržují stejnou architekturu jako vlastní pluginy, což z nich činí vynikající příklady pro vývoj pluginů.
Dostupné základní pluginy
Authentication
JWT-based authentication with session management and token refresh
Transactional email sending via Resend with pre-built templates
Magic Link Auth
Passwordless authentication using secure email magic links
Media
Media file management with R2 storage and image processing
Cache
Three-tier caching system with memory, KV, and database layers
Database Tools
Database administration, migrations, and query tools
Seed Data
Sample data generation for development and testing
Plugin pro autentizaci
Plugin pro autentizaci poskytuje komplexní funkce pro ověřování uživatelů a správu relací.
Funkce
- Autentizace pomocí JWT tokenů - Bezpečná autentizace založená na tokenech
- Správa relací - Sledování a správa aktivních uživatelských relací
- Obnovení tokenu - Automatické obnovení tokenu bez nutnosti opětovné autentizace
- Omezení počtu požadavků - Ochrana autentizačních koncových bodů před zneužitím
- Uživatelský kontext - Vkládání dat ověřeného uživatele do kontextu požadavku
Konfigurace
{
name: 'core-auth',
version: '1.0.0-beta.1',
settings: {
tokenExpiration: 3600, // Token TTL in seconds (1 hour)
refreshExpiration: 604800, // Refresh token TTL (7 days)
sessionTracking: true, // Enable session tracking
rateLimitWindow: 900, // Rate limit window (15 minutes)
rateLimitMaxAttempts: 5 // Max login attempts per window
}
}Plugin Configuration
Koncové body API
POST /api/auth/loginOvěří uživatele a získá JWT tokeny
curl -X POST http://localhost:8787/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "password123"
}'const response = await fetch('http://localhost:8787/api/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'user@example.com',
password: 'password123',
}),
})
const { token, refreshToken, user } = await response.json()Login Request
POST /api/auth/logoutZneplatní aktuální relaci
GET /api/auth/meZíská informace o aktuálně ověřeném uživateli
POST /api/auth/refreshObnoví vypršený přístupový token
Služby
// Available auth service methods
const authService = {
// Validate JWT token
validateToken(token: string): { valid: boolean; userId: number }
// Generate new JWT token
generateToken(userId: number): string
// Hash password for storage
hashPassword(password: string): string
// Verify password against hash
verifyPassword(password: string, hash: string): boolean
}
Auth Service
Hooky
auth:login- Spustí se, když se uživatel pokusí přihlásitauth:logout- Spustí se, když se uživatel odhlásírequest:start- Vkládá stav autentizace do požadavků
Administrační stránky
- /admin/auth/sessions - Zobrazení a správa aktivních relací
- /admin/auth/tokens - Správa API tokenů a přístupových klíčů
Plugin pro e-maily
Plugin pro e-maily poskytuje funkci transakčních e-mailů pomocí služby Resend, s předpřipravenými šablonami pro běžné scénáře autentizace a oznámení.
Funkce
- Integrace Resend - Odesílání e-mailů přes Resend API
- E-mailové šablony - Předpřipravené šablony pro registraci, ověření, obnovení hesla a jednorázové kódy
- Přizpůsobení šablon - Šablony založené na kódu, které lze přizpůsobit
- Podpora loga - Přidání loga vaší společnosti do e-mailových šablon
- Správa nastavení - Administrační rozhraní pro konfiguraci nastavení e-mailu
- Testovací e-mail - Odeslání testovacích e-mailů pro ověření konfigurace
Konfigurace
{
name: 'email',
version: '1.0.0-beta.1',
settings: {
apiKey: 're_...', // Resend API key
fromEmail: 'noreply@yourdomain.com', // From email address
fromName: 'Your App Name', // From name
replyTo: 'support@yourdomain.com', // Reply-to address (optional)
logoUrl: 'https://yourdomain.com/logo.png' // Logo URL (optional)
}
}Plugin Configuration
Nastavení
- Zaregistrujte se na Resend a získejte svůj API klíč
- Přejděte na
/admin/plugins/email/settingsve vaší administraci CatCMS - Nakonfigurujte svůj Resend API klíč a nastavení e-mailu
- Odešlete testovací e-mail pro ověření konfigurace
Zahrnuté e-mailové šablony
Potvrzení registraceOdesláno, když si nový uživatel zaregistruje účet
Ověření e-mailuOdesláno pro ověření e-mailových adres uživatelů
Obnovení heslaOdesláno, když uživatelé požádají o obnovení hesla
Jednorázový kód (2FA)Odesláno pro kódy dvoufaktorové autentizace
Použití API
// Get email plugin instance
const emailPlugin = context.plugins.get('email')
// Send a custom email
await emailPlugin.sendEmail({
to: 'user@example.com',
subject: 'Welcome to CatCMS',
html: '<h1>Welcome!</h1><p>Thanks for signing up.</p>'
})
// Send using built-in templates
await emailPlugin.sendVerificationEmail({
to: 'user@example.com',
verificationUrl: 'https://yoursite.com/verify?token=...'
})
await emailPlugin.sendPasswordResetEmail({
to: 'user@example.com',
resetUrl: 'https://yoursite.com/reset?token=...'
})
await emailPlugin.sendOneTimeCodeEmail({
to: 'user@example.com',
code: '123456',
expiryMinutes: 10
})
Sending Emails
Administrační stránky
- /admin/plugins/email/settings - Konfigurace Resend API a nastavení e-mailu
Plugin pro e-maily vyžaduje API klíč pro Resend. Před odesíláním e-mailů musíte svou doménu v Resend ověřit.
Autentizace magickým odkazem
Plugin pro autentizaci magickým odkazem poskytuje bezheslové ověření prostřednictvím zabezpečených, jednorázových e-mailových odkazů. Uživatelé se mohou přihlásit bez nutnosti pamatovat si hesla.
Funkce
- Bezheslová autentizace - Nevyžaduje hesla
- Zabezpečené jednorázové odkazy - Odkazy vyprší po 15 minutách a lze je použít pouze jednou
- Omezení počtu požadavků - Zabraňuje zneužití pomocí konfigurovatelných limitů počtu požadavků
- Integrace e-mailu - Spolupracuje s pluginem pro e-maily pro odesílání magických odkazů
- Automatické vytváření uživatelů - Volitelně vytváří nové uživatele, když požádají o magický odkaz
- Bezpečnostní sledování - Zaznamenává IP adresy a user agenty pro bezpečnostní audit
Jak to funguje
- Uživatel zadá svou e-mailovou adresu
- Systém vygeneruje bezpečný, náhodný token
- Je odeslán e-mail s magickým odkazem obsahujícím token
- Uživatel klikne na odkaz pro ověření
- Token je ověřen a označen jako použitý
- Uživatel je přihlášen pomocí JWT relace
Konfigurace
{
name: 'magic-link-auth',
version: '1.0.0',
dependencies: ['email'],
settings: {
linkExpiryMinutes: 15, // Magic link expiry time
rateLimitPerHour: 5, // Max requests per hour per email
allowNewUsers: false, // Auto-create users who don't exist
requireEmailVerification: true // Require verified emails
}
}Plugin Configuration
Koncové body API
POST /auth/magic-link/requestPožádá o zaslání magického odkazu e-mailem
curl -X POST http://localhost:8787/auth/magic-link/request \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com"
}'const response = await fetch('http://localhost:8787/auth/magic-link/request', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'user@example.com',
}),
})
const result = await response.json()
// result: { message: 'If an account exists...' }{
"message": "If an account exists for this email, you will receive a magic link shortly."
}Request Magic Link
GET /auth/magic-link/verify?token=…Ověří token magického odkazu a přihlásí uživatele
Schéma databáze
NULL UNIQUE, expires_at INTEGER NOT NULL, used INTEGER DEFAULT 0, used_at INTEGER, created_at
INTEGER NOT NULL, ip_address TEXT, user_agent TEXT ) ```
</CodeGroup>
### Bezpečnostní funkce
**Generování tokenů**Tokeny jsou generovány dvojitým použitím crypto.randomUUID() a zřetězením pro maximální entropii
**Omezení počtu požadavků**Omezuje uživatele na 5 žádostí o magický odkaz za hodinu, aby se předešlo zneužití
**Vypršení platnosti**Odkazy automaticky vyprší po 15 minutách
**Jednorázové použití**Každý odkaz lze použít pouze jednou - je označen jako použitý ihned po ověření
**Sledování IP adres**IP adresy a user agenty jsou zaznamenávány pro bezpečnostní audit
### Příklad použití
<CodeGroup title="Adding Magic Link to Login Page">
```html
<form id="magicLinkForm">
<label>Email Address</label>
<input type="email" name="email" required />
<button type="submit">Send Magic Link</button>
</form>
<script>
document
.getElementById('magicLinkForm')
.addEventListener('submit', async (e) => {
e.preventDefault()
const email = new FormData(e.target).get('email')
const response = await fetch('/auth/magic-link/request', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email }),
})
if (response.ok) {
alert('Check your email for a magic link!')
}
})
</script>
Magic Links Table
E-mailová šablona
E-mail s magickým odkazem obsahuje:
- Výrazné tlačítko “Přihlásit se” s magickým odkazem
- Upozornění na dobu platnosti
- Bezpečnostní upozornění, pokud si jej uživatel nevyžádal
- Moderní, responzivní design
Plugin pro autentizaci magickým odkazem vyžaduje, aby byl plugin pro e-maily nainstalován a nakonfigurován. Než povolíte autentizaci magickým odkazem, ujistěte se, že máte nastavený Resend.
Plugin pro média
Plugin pro média poskytuje komplexní správu mediálních souborů s integrací cloudového úložiště.
Funkce
- Nahrávání souborů - Nahrávání obrázků, videí a dokumentů do úložiště R2
- Knihovna médií - Procházení a vyhledávání nahraných mediálních souborů
- Zpracování obrázků - Změna velikosti, komprese a transformace obrázků
- Organizace do složek - Uspořádání souborů do složek
- Extrakce metadat - Automatická extrakce metadat souborů
- Generování náhledů - Automatické generování náhledů pro obrázky
- Hromadné operace - Přesun, mazání a zpracování více souborů najednou
Konfigurace
{
name: 'core-media',
version: '1.0.0-beta.1',
settings: {
maxFileSize: 10485760, // Max file size (10MB)
allowedTypes: [ // Allowed MIME types
'image/jpeg',
'image/png',
'image/gif',
'image/webp',
'video/mp4',
'application/pdf'
],
thumbnailSize: { width: 300, height: 300 },
storageProvider: 'r2', // Storage backend
autoGenerateThumbnails: true
}
}Plugin Configuration
Koncové body API
GET /api/mediaVypíše mediální soubory se stránkováním a filtrováním
curl "http://localhost:8787/api/media?page=1&limit=20&type=image"const response = await fetch('http://localhost:8787/api/media?page=1&limit=20&type=image')
const { data, pagination } = await response.json()List Media
POST /api/media/uploadNahraje nový mediální soubor
const formData = new FormData()
formData.append('file', fileInput.files[0])
formData.append('folder', 'images')
const response = await fetch('http://localhost:8787/api/media/upload', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
},
body: formData,
})
const { data } = await response.json()
// data: { id, filename, url, size, type }
Upload File
GET /api/media/:idZíská informace a metadata mediálního souboru
DELETE /api/media/:idSmaže mediální soubor
POST /api/media/processZpracuje média (změna velikosti, komprese, transformace)
POST /api/media/create-folderVytvoří novou složku pro organizaci
POST /api/media/bulk-movePřesune více souborů do složky
Služby
const mediaService = {
// Upload file to storage
uploadFile(file: File, options?: UploadOptions): Promise<MediaFile>
// Delete file from storage
deleteFile(id: string): Promise<boolean>
// Process image with operations
processImage(id: string, operations: Operation[]): Promise<Job>
// Extract file metadata
getMetadata(id: string): Promise<Metadata>
}Media Service
Schéma databáze
TEXT NOT NULL, mime_type TEXT NOT NULL, size INTEGER NOT NULL, url TEXT NOT NULL, thumbnail_url
TEXT, metadata TEXT, uploaded_by INTEGER, tags TEXT, created_at INTEGER NOT NULL, updated_at
INTEGER ) ```
</CodeGroup>
### Hooky
- `media:upload` - Spustí se při nahrání souboru (automaticky generuje náhledy)
- `media:delete` - Spustí se při smazání souboru (vyčistí související soubory)
- `content:save` - Sleduje reference na média v obsahu
### Administrační stránky
- **/admin/media** - Prohlížeč knihovny médií
- **/admin/media/upload** - Rozhraní pro nahrávání souborů
- **/admin/media/settings** - Konfigurace zpracování médií
---
## Plugin pro cache
Plugin pro cache implementuje propracovaný tříúrovňový systém cachování pro optimální výkon.
### Funkce
- **Tříúrovňové cachování** - Paměť, Cloudflare KV a databáze D1
- **Automatická invalidace** - Invalidace cache založená na událostech
- **Jmenné prostory cache** - Oddělené cache pro různé typy dat
- **Metriky výkonu** - Míra úspěšnosti (hit rate), latence a statistiky použití
- **Zahřívání cache** - Předvyplnění cache často přistupovanými daty
- **Invalidace podle vzoru** - Invalidace pomocí zástupných znaků (wildcard)
- **Správa TTL** - Konfigurovatelná doba platnosti (time-to-live) pro každý jmenný prostor
### Architektura
Request ↓ Memory Cache? ──Yes──→ Return (< 1ms) ↓ No KV Cache? ──Yes──→ Populate Memory → Return (10-50ms) ↓ No Database ──→ Populate KV → Populate Memory → Return (100-200ms)
### Konfigurace
<CodeGroup title="Cache Configuration">
```typescript
{
name: 'cache',
version: '1.0.0-alpha.1',
settings: {
memoryEnabled: true, // Enable in-memory cache
kvEnabled: false, // Enable KV cache
defaultTTL: 3600, // Default TTL (1 hour)
maxMemorySize: 50, // Max memory cache size (MB)
namespaces: {
content: { ttl: 3600 }, // Content cache (1 hour)
user: { ttl: 900 }, // User cache (15 minutes)
api: { ttl: 300 } // API response cache (5 minutes)
}
}
}Media Files Table
Koncové body API
GET /admin/cache/statsZíská podrobné statistiky cache pro všechny jmenné prostory
curl http://localhost:8787/admin/cache/stats{
"success": true,
"data": {
"global": {
"totalRequests": 15234,
"memoryHits": 12450,
"kvHits": 1892,
"dbHits": 892,
"hitRate": 94.1
},
"byNamespace": {
"content": {
"memoryHits": 8234,
"kvHits": 892,
"hitRate": 96.2
},
"user": {
"memoryHits": 2891,
"kvHits": 567,
"hitRate": 92.8
}
}
}
}Cache Stats
POST /admin/cache/clearVymaže všechny položky cache ve všech úrovních
POST /admin/cache/invalidateZneplatní položky cache odpovídající vzoru
curl -X POST http://localhost:8787/admin/cache/invalidate \
-H "Content-Type: application/json" \
-d '{
"pattern": "content:*",
"namespace": "content"
}'Invalidate Cache
GET /admin/cache/browserProcházení a inspekce jednotlivých položek cache
POST /admin/cache/warmPředvyplní cache často přistupovanými daty
Použití v kódu
import { getCacheService } from 'catcms-core'
// Get cache service for your namespace
const cache = getCacheService({
namespace: 'my-plugin',
ttl: 600,
memoryEnabled: true,
kvEnabled: false,
invalidateOn: ['my-plugin:update'],
version: 'v1'
})
// Get value from cache
const data = await cache.get('key')
// Set value in cache
await cache.set('key', data)
// Get or set pattern
const result = await cache.getOrSet('key', async () => {
return await fetchExpensiveData()
})
// Invalidate by pattern
await cache.invalidate('user:\*')
// Get statistics
const stats = cache.getStats()
Using Cache Service
Jmenné prostory cache
content - Obsah a stránky (TTL: 1 hodina) user - Uživatelská data a profily (TTL: 15 minut) api - Data odpovědí API (TTL: 5 minut) media - Metadata mediálních souborů (TTL: 1 hodina) auth - Autentizační tokeny (TTL: 5 minut)
Hooky
content:update- Zneplatní cache obsahucontent:delete- Zneplatní cache obsahuuser:update- Zneplatní cache uživatelůauth:login- Zneplatní cache uživatelů
Nástroje pro databázi
Plugin nástrojů pro databázi poskytuje administrativní nástroje pro správu a vývoj databáze.
Funkce
- Spouštěč migrací - Spouštění databázových migrací
- Prohlížeč schématu - Zobrazení tabulek, sloupců a indexů
- Konzole pro dotazy - Přímé spouštění SQL dotazů
- Inspektor tabulek - Zobrazení dat a statistik tabulek
- Zálohování a obnova - Nástroje pro zálohování databáze
- Metriky výkonu - Analýza výkonu dotazů
Konfigurace
{
name: 'database-tools-plugin',
version: '1.0.0',
settings: {
enableQueryConsole: true, // Enable SQL query console
maxQueryRows: 1000, // Max rows returned
enableBackups: true, // Enable backup functionality
autoMigration: true // Auto-run migrations on startup
}
}Plugin Configuration
Koncové body API
GET /admin/database/tablesVypíše všechny databázové tabulky
GET /admin/database/tables/:nameZobrazí schéma a data tabulky
POST /admin/database/querySpustí SQL dotaz
curl -X POST http://localhost:8787/admin/database/query \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${token}" \
-d '{
"query": "SELECT * FROM content LIMIT 10"
}'Execute Query
POST /admin/database/migrations/runSpustí čekající migrace
GET /admin/database/migrations/statusZkontroluje stav migrací
Služby
const databaseService = {
// List all tables
getTables(): Promise<Table[]>
// Get table schema
getTableSchema(tableName: string): Promise<Schema>
// Execute query
executeQuery(sql: string, params?: any[]): Promise<Result>
// Run migrations
runMigrations(): Promise<MigrationResult[]>
// Create backup
createBackup(): Promise<Backup>
}
Database Service
Administrační stránky
- /admin/database - Nástěnka databáze
- /admin/database/tables - Prohlížeč tabulek
- /admin/database/query - Konzole pro dotazy
- /admin/database/migrations - Správce migrací
Plugin nástrojů pro databázi je z bezpečnostních důvodů omezen pouze na administrátory. Nikdy nezpřístupňujte možnost spouštět databázové dotazy nedůvěryhodným uživatelům.
Plugin pro testovací data
Plugin pro testovací data generuje vzorová data pro účely vývoje a testování.
Funkce
- Vzorový obsah - Generování blogových příspěvků, stránek a článků
- Testovací uživatelé - Vytváření uživatelských účtů s různými rolemi
- Mediální soubory - Generování zástupných obrázků a souborů
- Kolekce - Naplnění vlastních kolekcí daty
- Vztahy - Vytváření souvisejících dat (uživatelé, příspěvky, komentáře)
- Přizpůsobitelné - Konfigurace parametrů pro generování dat
Konfigurace
{
name: 'seed-data-plugin',
version: '1.0.0',
settings: {
enabled: false, // Disable in production
autoSeed: false, // Auto-seed on first run
contentCount: 50, // Number of content items
userCount: 10, // Number of test users
mediaCount: 20 // Number of media files
}
}Plugin Configuration
Koncové body API
POST /admin/seed-data/generateVygeneruje testovací data
curl -X POST http://localhost:8787/admin/seed-data/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${token}" \
-d '{
"contentCount": 50,
"userCount": 10,
"mediaCount": 20,
"clearExisting": false
}'Generate Seed Data
POST /admin/seed-data/clearSmaže všechna testovací data
GET /admin/seed-data/statusZkontroluje stav testovacích dat
Použití
import { generateSeedData } from 'catcms-core'
// Generate seed data programmatically
await generateSeedData({
content: {
count: 50,
collections: ['blog_posts', 'pages']
},
users: {
count: 10,
roles: ['admin', 'editor', 'author']
},
media: {
count: 20,
types: ['image', 'video', 'document']
}
})
Seed Data Generation
Administrační stránky
- /admin/seed-data - Rozhraní pro generování testovacích dat
Plugin pro testovací data by měl být v produkčním prostředí zakázán. Je určen pouze pro vývoj a testování.
Další kroky