scar-chat/DATABASE_QUICK_REF.md

117 lines
2.1 KiB
Markdown
Raw Normal View History

# 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 <user> <pass> [email] [role]` |
| List all | `dbmanager list` |
| List by role | `dbmanager list-role admin` |
| Change role | `dbmanager setrole <user> admin` |
| Disable user | `dbmanager deactivate <user>` |
| Enable user | `dbmanager activate <user>` |
| Test login | `dbmanager authenticate <user> <pass>` |
## 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)
```