@mostajs/cpanel
v0.1.0
Published
Primitives génériques d'un espace d'administration (cPanel) souverain node:http : auth magic-link + mot de passe, parsing multipart/urlencodé, upload d'images (compose @mostajs/image) + service statique, coquille CSS et helpers de formulaire. Extrait d'AM
Maintainers
Readme
@mostajs/cpanel
Auteur : Dr Hamid MADANI [email protected] · Licence : AGPL-3.0-or-later
Primitives génériques d'un espace d'administration (cPanel) souverain node:http, ESM sans build. Extrait
d'AMIA, réutilisable. L'app garde ses routes MÉTIER et compose ces primitives (le routeur reste côté app).
- Auth :
createAuth({secret,adminEmail,cookieName?,sessionLabel?,ttlMs?})→authed(req),setCookie(),clearCookie(),makeMagicToken(email?),verifyMagicToken(token)(magic-link email à usage unique + repli mot de passe côté app). - Requête :
parseFields(req)(multipart_files+ urlencodé),parseMultipart(buf,boundary),readBody(req). - Upload :
createUploads({uploadsDir})→processImage(file)(media + miniature webp, compose@mostajs/image),saveUpload(file),serve(req,res,urlPath)(GET /uploads/*, garde isFile). - UI :
esc,sel,row,CPANEL_CSS,loginForm(opts),uploadForm(opts).
import { createAuth, createUploads, parseFields, esc, row, CPANEL_CSS, loginForm } from '@mostajs/cpanel';
const auth = createAuth({ secret, adminEmail, cookieName: 'amia_admin', sessionLabel: 'amia-admin-session-v1' });
const uploads = createUploads({ uploadsDir });
// dans votre routeur : if (!auth.authed(req)) sendPage(loginForm()); ... const f = await parseFields(req); ...