da01d586fc9eb464a078bee5d5cf74c3c3834322
CRM Server - Autentifikačný Systém
Backend API server pre CRM systém s pokročilým autentifikačným systémom, role-based access control a kompletnou bezpečnostnou vrstvou.
Technológie
- Node.js + Express.js - Backend framework
- PostgreSQL - Databáza
- Drizzle ORM - Type-safe ORM
- JWT - JSON Web Tokens pre autentifikáciu
- Bcrypt - Password hashing
- Zod - Validácia vstupov
- Helmet.js - HTTP security headers
- Express Rate Limit - Rate limiting
- JMAP - Email posielanie (Truemail.sk)
Funkcionality
3-Krokový Autentifikačný Flow
-
Krok 1: Login s temporary password
- Používateľ dostane username a dočasné heslo
- Prihlásenie vytvorí JWT tokens a session
-
Krok 2: Nastavenie nového hesla
- Po prvom prihlásení musí užívateľ zmeniť heslo
- Strong password policy (8+ znakov, uppercase, lowercase, čísla, špeciálne znaky)
-
Krok 3: Email setup (voliteľný)
- Pripojenie emailu s verifikačným linkom
- Možnosť preskočiť tento krok
Role-Based Access Control (RBAC)
- Admin - Plný prístup, môže vytvárať používateľov, meniť role
- Member - Základný prístup (zatiaľ len vlastný profil)
Bezpečnostné Vrstvy
- ✅ Helmet.js - HTTP headers security (CSP, HSTS)
- ✅ CORS - Whitelist configuration
- ✅ Rate limiting - Login (5/15min), API (100/15min)
- ✅ Input validation - Zod schemas
- ✅ SQL injection protection - Drizzle ORM parametrized queries
- ✅ XSS protection - Helmet + input sanitization
- ✅ Password security - Bcrypt (12 rounds)
- ✅ JWT security - HttpOnly cookies, short expiration
- ✅ Audit logging - Všetky dôležité akcie logované
- ✅ Environment variables - Citlivé dáta v .env
Inštalácia
1. Klonovanie a Dependencies
npm install
2. Konfigurácia Environment Variables
Skopírujte .env.example do .env a upravte hodnoty:
cp .env.example .env
Dôležité premenné:
JWT_SECRET- Zmeňte v produkcii!JWT_REFRESH_SECRET- Zmeňte v produkcii!BETTER_AUTH_SECRET- Zmeňte v produkcii!DB_*- Databázové credentialsJMAP_*- Email server credentials
3. Databáza Setup
Spustite PostgreSQL (Docker):
docker compose up -d postgres
Vygenerujte a aplikujte migrácie:
npm run db:generate
npm run db:migrate
4. Seed Admin Account
Vytvorte prvý admin účet:
npm run db:seed
DÔLEŽITÉ: Uložte si vygenerované temporary password!
5. Spustenie Servera
Development mode:
npm run dev
Production mode:
npm start
Server beží na http://localhost:5000
API Endpointy
Public Endpoints
Login
POST /api/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "temporary-password"
}
Response:
{
"success": true,
"data": {
"user": { ... },
"tokens": {
"accessToken": "...",
"refreshToken": "..."
},
"needsPasswordChange": true,
"needsEmailSetup": true
}
}
Protected Endpoints (vyžadujú JWT token)
Set New Password (Krok 2)
POST /api/auth/set-password
Authorization: Bearer <token>
Content-Type: application/json
{
"newPassword": "NewSecurePass123!",
"confirmPassword": "NewSecurePass123!"
}
Link Email (Krok 3)
POST /api/auth/link-email
Authorization: Bearer <token>
Content-Type: application/json
{
"email": "user@example.com"
}
Skip Email Setup
POST /api/auth/skip-email
Authorization: Bearer <token>
Get Current User
GET /api/auth/me
Authorization: Bearer <token>
Logout
POST /api/auth/logout
Authorization: Bearer <token>
Admin Endpoints (vyžadujú admin rolu)
Create User
POST /api/admin/users
Authorization: Bearer <admin-token>
Content-Type: application/json
{
"username": "newuser",
"tempPassword": "TempPass123!",
"role": "member",
"firstName": "John",
"lastName": "Doe"
}
Get All Users
GET /api/admin/users
Authorization: Bearer <admin-token>
Get User by ID
GET /api/admin/users/:userId
Authorization: Bearer <admin-token>
Change User Role
PATCH /api/admin/users/:userId/role
Authorization: Bearer <admin-token>
Content-Type: application/json
{
"role": "admin"
}
Delete User
DELETE /api/admin/users/:userId
Authorization: Bearer <admin-token>
Databázová Schéma
Users Table
- id (UUID)
- username (unique)
- email (unique, nullable)
- email_verified (boolean)
- first_name
- last_name
- password (bcrypt hash)
- temp_password (bcrypt hash)
- changed_password (boolean)
- role (enum: admin, member)
- last_login
- created_at
- updated_at
Sessions Table
- id (text)
- user_id (UUID, FK)
- expires_at
- ip_address
- user_agent
- created_at
Audit Logs Table
- id (UUID)
- user_id (UUID, FK, nullable)
- action
- resource
- resource_id
- old_value (JSON)
- new_value (JSON)
- ip_address
- user_agent
- success (boolean)
- error_message
- created_at
Validačné Pravidlá
Password Policy
- Minimálne 8 znakov
- Aspoň 1 veľké písmeno
- Aspoň 1 malé písmeno
- Aspoň 1 číslo
- Aspoň 1 špeciálny znak
Username Policy
- 3-50 znakov
- Iba písmená, čísla, pomlčky a podčiarkovníky
Rate Limiting
- Login endpoint: 5 pokusov / 15 minút
- API endpoints: 100 requestov / 15 minút
- Citlivé operácie: 3 pokusy / 15 minút
Audit Logging
Všetky dôležité akcie sú automaticky logované:
- Login attempts (úspešné aj neúspešné)
- Password changes
- Email linking & verification
- Role changes
- User creation
- A ďalšie...
Security Best Practices
- HTTPS Only - V produkcii vždy používajte HTTPS
- Strong Secrets - Zmeňte všetky secret keys v
.env - Regular Updates - Aktualizujte dependencies
- Monitor Logs - Sledujte audit logs
- Backup Database - Pravidelné zálohy PostgreSQL
Database Commands
# Generovanie migrácií
npm run db:generate
# Aplikovanie migrácií
npm run db:migrate
# Push schema (alternative to migrations)
npm run db:push
# Drizzle Studio (GUI)
npm run db:studio
# Seed admin account
npm run db:seed
Testing
Spustenie testov:
npm test
Štruktúra Projektu
src/
├── config/ # Database & auth config
├── db/
│ ├── schema.js # Drizzle schema
│ ├── migrations/ # Auto-generated migrations
│ └── seeds/ # Seed scripts
├── controllers/ # Request handlers
├── services/ # Business logic
├── middlewares/
│ ├── auth/ # Auth & role middleware
│ ├── security/ # Rate limiting, validation
│ └── global/ # Error handling
├── routes/ # API routes
├── validators/ # Zod schemas
├── utils/ # Helper functions
├── app.js # Express app
└── index.js # Server entry point
Licencia
MIT
Autor
Richard Tekula
POZNÁMKA: Tento projekt je v aktívnom vývoji. Pre production nasadenie nezabudnite:
- Zmeniť všetky secret keys v
.env - Nastaviť HTTPS
- Konfigurovať firewall
- Nastaviť monitoring a alerting
- Pravidelné security audity
Description
Languages
JavaScript
92%
HTML
7.9%
Dockerfile
0.1%