Complete ircquotes application with all features
- Added copy quote functionality with clipboard integration - Implemented bulk moderation actions for admin - Created mobile responsive design with bash.org styling - Added API rate limiting per IP address - Implemented dark mode toggle with flash prevention - Enhanced error messages throughout application - Fixed all security vulnerabilities (SQL injection, XSS, CSRF) - Added comprehensive rate limiting on all endpoints - Implemented secure session configuration - Added input validation and length limits - Created centralized configuration system with config.json - Set up production deployment with Gunicorn - Added security headers and production hardening - Added password generation and config management tools
This commit is contained in:
84
config_manager.py
Normal file
84
config_manager.py
Normal file
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Configuration management utility for ircquotes.
|
||||
Allows you to view and update configuration values easily.
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
from config_loader import config
|
||||
|
||||
def show_config():
|
||||
"""Display current configuration."""
|
||||
print("Current Configuration:")
|
||||
print("=" * 50)
|
||||
print(f"App Name: {config.app_name}")
|
||||
print(f"Host: {config.app_host}")
|
||||
print(f"Port: {config.app_port}")
|
||||
print(f"Debug Mode: {config.debug_mode}")
|
||||
print(f"Database URI: {config.database_uri}")
|
||||
print(f"CSRF Enabled: {config.csrf_enabled}")
|
||||
print(f"Rate Limiting: {config.rate_limiting_enabled}")
|
||||
print(f"Quotes per Page: {config.quotes_per_page}")
|
||||
print(f"Min Quote Length: {config.min_quote_length}")
|
||||
print(f"Max Quote Length: {config.max_quote_length}")
|
||||
print(f"Admin Username: {config.admin_username}")
|
||||
print(f"Logging Level: {config.logging_level}")
|
||||
print("=" * 50)
|
||||
|
||||
def update_config(key, value):
|
||||
"""Update a configuration value."""
|
||||
try:
|
||||
# Load current config
|
||||
with open('config.json', 'r') as f:
|
||||
data = json.load(f)
|
||||
|
||||
# Navigate to the key using dot notation
|
||||
keys = key.split('.')
|
||||
current = data
|
||||
for k in keys[:-1]:
|
||||
if k not in current:
|
||||
current[k] = {}
|
||||
current = current[k]
|
||||
|
||||
# Convert value to appropriate type
|
||||
if value.lower() == 'true':
|
||||
value = True
|
||||
elif value.lower() == 'false':
|
||||
value = False
|
||||
elif value.isdigit():
|
||||
value = int(value)
|
||||
elif value.replace('.', '').isdigit():
|
||||
value = float(value)
|
||||
|
||||
# Set the value
|
||||
current[keys[-1]] = value
|
||||
|
||||
# Save back to file
|
||||
with open('config.json', 'w') as f:
|
||||
json.dump(data, f, indent=2)
|
||||
|
||||
print(f"Updated {key} = {value}")
|
||||
print("Restart the application for changes to take effect.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error updating configuration: {e}")
|
||||
|
||||
def main():
|
||||
if len(sys.argv) == 1:
|
||||
show_config()
|
||||
elif len(sys.argv) == 3:
|
||||
key, value = sys.argv[1], sys.argv[2]
|
||||
update_config(key, value)
|
||||
else:
|
||||
print("Usage:")
|
||||
print(" python config_manager.py # Show current config")
|
||||
print(" python config_manager.py <key> <value> # Update config value")
|
||||
print()
|
||||
print("Examples:")
|
||||
print(" python config_manager.py app.port 8080")
|
||||
print(" python config_manager.py quotes.per_page 50")
|
||||
print(" python config_manager.py security.csrf_enabled false")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user