# Database Quick Reference ## Build ```bash cd build cmake .. make ``` Creates: - `chat_server` - Chat server with database support - `dbmanager` - User management tool ## Quick Start ### 1. Create Admin User ```bash ./dbmanager register admin AdminPassword123 admin@example.com admin ``` ### 2. Create Regular Users ```bash ./dbmanager register user1 UserPassword456 user1@example.com user ./dbmanager register user2 UserPassword789 user2@example.com user ``` ### 3. Verify Users ```bash ./dbmanager list ``` ### 4. Test Authentication ```bash ./dbmanager authenticate user1 UserPassword456 ``` ## Common Tasks | Task | Command | |------|---------| | Register user | `dbmanager register [email] [role]` | | List all | `dbmanager list` | | List by role | `dbmanager list-role admin` | | Change role | `dbmanager setrole admin` | | Disable user | `dbmanager deactivate ` | | Enable user | `dbmanager activate ` | | Test login | `dbmanager authenticate ` | ## Database Location ```bash ./scar_chat.db # Created in current working directory ``` ## Roles - `user` - Regular chat user - `admin` - Full administrative access - `moderator` - Moderation capabilities ## Password Requirements - Minimum 8 characters - No special format required - Unique per user ## Security - SHA256 hashing with per-user salt - Passwords never stored in plain text - Database file should have restricted permissions ```bash chmod 600 scar_chat.db ``` ## C++ Integration ```cpp #include "database.h" Database db("scar_chat.db"); db.initialize(); // Register db.register_user("alice", "secret123", "alice@example.com", "user"); // Authenticate if (db.authenticate_user("alice", "secret123")) { // Success } // Get user User user = db.get_user("alice"); std::cout << "Role: " << user.role << std::endl; ``` ## Database Schema ``` Users Table: - id (INTEGER PRIMARY KEY) - username (TEXT UNIQUE) - password_hash (TEXT) - salt (TEXT) - email (TEXT) - role (TEXT) - 'user', 'admin', 'moderator' - is_active (BOOLEAN) - created_at (TIMESTAMP) - updated_at (TIMESTAMP) ```