Restore to commit 74e578279624c6045ca440a3459ebfa1f8d54191

This commit is contained in:
southseact-3d
2026-02-07 20:32:41 +00:00
commit ed67b7741b
252 changed files with 99814 additions and 0 deletions

View File

@@ -0,0 +1,201 @@
# Authentication System Fix Summary
## Issues Fixed
The original authentication system had several critical security and functionality issues:
### 1. **Client-side Only Authentication**
- **Problem**: No server-side user database or password verification
- **Solution**: Implemented complete server-side user authentication with persistent storage
### 2. **Device-based Storage**
- **Problem**: Apps were linked to localStorage user IDs rather than actual accounts
- **Solution**: Server-side user database with proper session management
### 3. **No Password Persistence**
- **Problem**: Passwords were never stored or validated server-side
- **Solution**: bcrypt password hashing with persistent storage
### 4. **Account ID Computation**
- **Problem**: Used email hash but didn't verify credentials
- **Solution**: Server assigns and returns authenticated user IDs
## Implementation Details
### 1. **Server-Side Dependencies Added**
```json
{
"dependencies": {
"bcrypt": "^5.1.1",
"jsonwebtoken": "^9.0.2"
}
}
```
### 2. **User Database Structure**
- **File**: `.data/.opencode-chat/users.json`
- **Format**: Array of user objects with hashed passwords
- **User Schema**:
```javascript
{
id: "uuid",
email: "normalized-lowercase-email",
password: "bcrypt-hashed-password",
createdAt: "ISO-timestamp",
lastLoginAt: "ISO-timestamp"
}
```
### 3. **New API Endpoints**
#### User Registration
- **Endpoint**: `POST /api/register`
- **Payload**: `{ email, password }`
- **Response**: `{ ok: true, user: { id, email }, token, expiresAt }`
- **Validates**: Email format, password strength (6+ chars), unique email
#### User Login
- **Endpoint**: `POST /api/login`
- **Payload**: `{ email, password }`
- **Response**: `{ ok: true, user: { id, email }, token, expiresAt }`
- **Validates**: Password against stored bcrypt hash
#### User Session Management
- **Endpoint**: `GET /api/me` - Get current user info
- **Endpoint**: `POST /api/logout` - End user session
#### Secure Account Migration
- **Endpoint**: `POST /api/account/claim`
- **Requires**: Valid user authentication
- **Migrates**: Device apps to authenticated user account
### 4. **Session Token System**
- **Storage**: HTTP-only cookies + JWT tokens
- **Expiration**: 30 days (configurable)
- **Security**: bcrypt password hashing (12 rounds)
- **Validation**: Server-side token verification
### 5. **Client-Side Updates**
#### Enhanced Login Flow
- Tries server authentication first
- Stores session tokens in localStorage
- Falls back to old system for backwards compatibility
- Proper error handling and user feedback
#### Enhanced Registration Flow
- Server-side validation
- Immediate account creation and login
- Device app migration
- Password strength validation
#### API Request Enhancement
- Automatically includes session tokens
- Handles 401 responses by redirecting to login
- Maintains backwards compatibility with device-based auth
### 6. **Environment Configuration**
#### Required Environment Variables
```bash
# User authentication (recommended)
USER_SESSION_SECRET=your-secure-random-secret
USER_SESSION_TTL_MS=2592000000 # 30 days in milliseconds
# Optional overrides
PASSWORD_SALT_ROUNDS=12 # bcrypt rounds (default: 12)
```
#### Security Notes
- Default session secret is provided but should be overridden in production
- All passwords are hashed with bcrypt (12 rounds by default)
- Session tokens expire after 30 days
- Secure cookies in production (set COOKIE_SECURE=1)
### 7. **Backwards Compatibility**
- Old device-based authentication still works
- Gradual migration from client-side to server-side auth
- Account claiming works for both old and new accounts
- Existing apps continue to function
## Security Improvements
### 1. **Password Security**
- bcrypt hashing with 12 salt rounds
- Never store plaintext passwords
- Password strength validation
### 2. **Session Security**
- HTTP-only cookies prevent XSS attacks
- SameSite cookie protection
- Session token expiration
- Server-side token validation
### 3. **API Security**
- Authentication required for sensitive operations
- Proper error handling without information leakage
- Secure account migration process
## Testing
### 1. **Dependencies Test**
```bash
cd /home/engine/project/chat
node -e "const bcrypt = require('bcrypt'); console.log('bcrypt works:', bcrypt.hashSync('test', 12).length)"
```
### 2. **Server Startup**
```bash
cd /home/engine/project/chat
node server.js
# Should create users.json file in .data/.opencode-chat/
```
### 3. **API Testing**
```bash
# Register user
curl -X POST http://localhost:4000/api/register \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"password123"}'
# Login user
curl -X POST http://localhost:4000/api/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"password123"}'
```
## Migration Guide
### For Existing Users
1. **Automatic**: Old accounts continue to work with device-based auth
2. **Upgrade**: Users can register/login with the same email to upgrade
3. **Migration**: Apps automatically migrate to new authenticated account
### For Developers
1. **Update Environment**: Set `USER_SESSION_SECRET` for production
2. **Test Authentication**: Verify login/registration flows work
3. **Monitor Logs**: Watch for authentication events in logs
## Files Modified
### Server Changes
- `chat/server.js`: Complete authentication system implementation
- `chat/package.json`: Added bcrypt and jsonwebtoken dependencies
### Client Changes
- `chat/public/login.html`: Enhanced with server authentication
- `chat/public/signup.html`: Enhanced with server registration
- `chat/public/app.js`: Enhanced API calls with session tokens
## Summary
The authentication system has been completely overhauled from a client-side only system to a secure, server-side authentication system with:
- ✅ Persistent user database
- ✅ Secure password hashing
- ✅ Session token management
- ✅ Backwards compatibility
- ✅ Enhanced security
- ✅ Proper error handling
The system now properly supports user accounts that work across devices and browsers, with secure authentication and session management.