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

  1. Krok 1: Login s temporary password

    • Používateľ dostane username a dočasné heslo
    • Prihlásenie vytvorí JWT tokens a session
  2. 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)
  3. 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é credentials
  • JMAP_* - 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!"
}
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

  1. HTTPS Only - V produkcii vždy používajte HTTPS
  2. Strong Secrets - Zmeňte všetky secret keys v .env
  3. Regular Updates - Aktualizujte dependencies
  4. Monitor Logs - Sledujte audit logs
  5. 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:

  1. Zmeniť všetky secret keys v .env
  2. Nastaviť HTTPS
  3. Konfigurovať firewall
  4. Nastaviť monitoring a alerting
  5. Pravidelné security audity
Description
No description provided
Readme 5.5 MiB
Languages
JavaScript 92%
HTML 7.9%
Dockerfile 0.1%