10 KiB
Website Features Documentation
This document describes the new features added to the GameServers.World website (_website folder).
Table of Contents
Password Reset System
A complete password reset workflow has been implemented to allow users to recover their accounts.
Files Created
- forgot_password.php - Request password reset
- reset_password.php - Reset password with token
How It Works
- User visits the login page and clicks "Forgot Password?"
- User enters their username or email on
forgot_password.php - System generates a secure token and stores it in
ogp_password_reset_tokenstable - Email is sent with reset link (falls back to displaying link if email fails)
- User clicks link and is taken to
reset_password.php?token=XXX - User enters new password (min 8 characters)
- Password is updated using both MD5 (panel compatibility) and modern hash (if shadow column exists)
- Token is marked as used
Database Table
The system automatically creates this table if it doesn't exist:
CREATE TABLE ogp_password_reset_tokens (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
token VARCHAR(64) NOT NULL,
expires DATETIME NOT NULL,
used TINYINT(1) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_token (token),
INDEX idx_user_id (user_id)
)
Security Features
- Tokens expire after 1 hour
- Tokens can only be used once
- Secure random token generation (64 hex characters)
- Password requirements enforced (min 8 chars)
- Passwords hashed with both MD5 (panel) and bcrypt (modern)
- User enumeration protection (doesn't reveal if account exists)
Email Configuration
The system uses PHP's mail() function. For production:
- Configure your server's mail system (sendmail, postfix, etc.)
- Or integrate with an email service (SendGrid, Mailgun, etc.)
- Update the email headers in
forgot_password.phpas needed
My Servers Dashboard
A user dashboard showing all active game servers with renewal options.
File Created
- my_servers.php - User's server management dashboard
- renew_server.php - Server renewal page
Features
- Server List: Shows all servers owned by logged-in user
- Server Details: Name, game type, location, status
- Expiration Tracking: Shows expiration date for each server
- Status Indicators: Active, Inactive, Expired
- Renewal Links: Quick access to renew each server
- Empty State: Helpful message when user has no servers
Access
- Menu link "My Servers" appears when user is logged in
- Requires authentication via
login_required.php
Database Query
Joins multiple tables:
ogp_home- Server instancesogp_remote_servers- Server locationsogp_game_configs- Game informationogp_billing_orders- Order/expiration dataogp_billing_services- Service pricing
Server Status Page
Public page showing real-time status of all game server infrastructure.
File Created
- server_status.php - Server infrastructure status
Features
- Real-time Status: Online, Offline, Maintenance, Unknown
- Resource Usage: CPU, Memory, Disk usage percentages
- Uptime Display: How long each server has been running
- Last Updated: Time since last status update
- Color-coded Badges: Visual status indicators
- Notes Support: Display maintenance or status messages
Database Table
Automatically creates table if it doesn't exist:
CREATE TABLE ogp_server_status (
status_id INT AUTO_INCREMENT PRIMARY KEY,
remote_server_id INT NOT NULL,
server_name VARCHAR(255) NOT NULL,
ip_address VARCHAR(45),
status ENUM('online', 'offline', 'maintenance') DEFAULT 'offline',
cpu_usage DECIMAL(5,2),
memory_usage DECIMAL(5,2),
disk_usage DECIMAL(5,2),
uptime VARCHAR(50),
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
notes TEXT,
INDEX idx_remote_server (remote_server_id),
UNIQUE KEY unique_server (remote_server_id)
)
Server Updates
The page displays data from ogp_server_status. Servers should update this table:
// Example server update code (run on each server periodically)
$stmt = $db->prepare("INSERT INTO ogp_server_status
(remote_server_id, server_name, ip_address, status, cpu_usage, memory_usage, disk_usage, uptime, notes)
VALUES (?, ?, ?, 'online', ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
status = VALUES(status),
cpu_usage = VALUES(cpu_usage),
memory_usage = VALUES(memory_usage),
disk_usage = VALUES(disk_usage),
uptime = VALUES(uptime),
notes = VALUES(notes),
last_updated = NOW()");
Access
- Link in footer: "Server Status"
- Public page (no login required)
UI Improvements
Server List Page
Before: "Order Server" was a plain link
After: Styled as a button with gradient background
<a href="order.php?service_id=X" class="gsw-btn"
style="display:inline-block;padding:12px 24px;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:white;text-decoration:none;border-radius:8px;font-weight:600;transition:transform 0.2s;">
Order Now
</a>
Order Page
Fixed: Game images now display correctly
- Changed from
src="<?php echo $img_url; ?>" - To
src="../<?php echo $img_url; ?>" - Assumes images are stored relative to panel root
Login Page
Added: "Forgot Password?" link next to Register link
Navigation Menu
Added: "My Servers" link for logged-in users
- Only visible when user is authenticated
- Positioned between "Game Servers" and "Cart"
Footer
Added: "Server Status" link
- Public access to infrastructure status
- Positioned in footer with other utility links
Apache Configuration
Three Apache virtual host configuration files have been created in the GSP root directory.
Files Created
- panel.conf - Panel dashboard configuration
- website.conf - Storefront website configuration
- fileserver.conf - File server configuration
- APACHE_SETUP.md - Detailed installation guide
panel.conf
Main Open Game Panel dashboard:
- Domain: panel.yourdomain.com
- Document Root: /var/www/GSP
- PHP settings optimized for panel operations
- Security headers enabled
website.conf
GameServers.World storefront:
- Domain: gameservers.world
- Document Root: /var/www/GSP/_website
- Protected includes and data directories
- Static asset caching
- Compression enabled
- Separate session handling
fileserver.conf
Game file distribution:
- Domain: files.yourdomain.com
- Document Root: /var/www/fileserver
- Directory browsing enabled
- Large file support
- Script execution disabled in uploads
- Bandwidth limiting support (optional)
Installation
See APACHE_SETUP.md for complete installation instructions including:
- Copying configuration files
- Enabling sites and modules
- SSL/HTTPS setup with Let's Encrypt
- DNS configuration
- Firewall rules
- Troubleshooting
Testing
Password Reset
- Visit
login.php - Click "Forgot Password?"
- Enter username or email
- Check email or view on-screen link (development mode)
- Click reset link
- Enter new password (min 8 chars)
- Confirm password matches
- Submit and verify redirect to login
My Servers
- Login as a user with servers
- Click "My Servers" in navigation
- Verify all servers are listed
- Check expiration dates
- Click "Renew" on a server
- Verify renewal page displays correctly
Server Status
- Visit footer link "Server Status"
- Verify all remote servers are displayed
- Check status badges (color coding)
- Verify "Last Updated" formatting
- Confirm public access (no login required)
UI Changes
- Visit
serverlist.php - Verify "Order Now" displays as styled button
- Click button to go to
order.php - Verify game images display correctly
- Check footer has "Server Status" link
- Login and verify "My Servers" appears in menu
Security Considerations
Password Reset
- ✅ Tokens expire after 1 hour
- ✅ One-time use tokens
- ✅ Secure random generation
- ✅ User enumeration protection
- ✅ Password strength requirements
- ⚠️ Email delivery depends on server mail config
My Servers
- ✅ Login required
- ✅ User can only see own servers
- ✅ SQL injection prevention with prepared statements
- ✅ XSS prevention with htmlspecialchars()
Server Status
- ✅ Read-only public page
- ✅ No sensitive information exposed
- ✅ SQL injection prevention
- ℹ️ Server updates should be authenticated (implement separately)
Apache Configs
- ✅ Security headers enabled
- ✅ Sensitive directories protected
- ✅ Directory listing disabled (except fileserver)
- ✅ HTTPS configurations ready
- ⚠️ Update domain names before deployment
- ⚠️ Configure SSL certificates for production
Future Enhancements
Password Reset
- Email template customization
- Integration with email service provider
- Rate limiting for reset requests
- SMS/2FA backup recovery
My Servers
- Server control buttons (start/stop/restart)
- Real-time server metrics
- Configuration editor
- File manager integration
- Console access
- Backup/restore functionality
Server Status
- Automated server monitoring agent
- Alert notifications
- Historical uptime graphs
- Incident history
- Scheduled maintenance display
- Status API for external monitoring
General
- User profile management
- Invoice history
- Support ticket system
- Knowledge base integration
- Multi-language support
- Dark/light theme toggle
Support
For issues or questions:
- Check the main GSP documentation
- Review Apache configuration in
APACHE_SETUP.md - Check PHP error logs
- Verify database connectivity
- Ensure proper file permissions
License
All new features follow the same license as the main Open Game Panel project.