mirror of
https://github.com/blackboxprogramming/BlackRoad-Operating-System.git
synced 2026-03-17 03:57:13 -05:00
Merge branch origin/codex/consolidate-environment-secrets-across-platforms into main
This commit is contained in:
@@ -9,10 +9,13 @@ APP_NAME=BlackRoad Operating System
|
|||||||
APP_VERSION=1.0.0
|
APP_VERSION=1.0.0
|
||||||
DEBUG=False
|
DEBUG=False
|
||||||
ENVIRONMENT=production
|
ENVIRONMENT=production
|
||||||
|
NODE_ENV=production
|
||||||
|
PYTHON_ENV=production
|
||||||
|
|
||||||
# Database connectivity
|
# Database connectivity
|
||||||
DATABASE_URL=postgresql://YOUR_DB_USER:YOUR_DB_PASSWORD@YOUR_DB_HOST:5432/blackroad
|
DATABASE_URL=postgresql://YOUR_DB_USER:YOUR_DB_PASSWORD@YOUR_DB_HOST:5432/blackroad
|
||||||
DATABASE_ASYNC_URL=postgresql+asyncpg://YOUR_DB_USER:YOUR_DB_PASSWORD@YOUR_DB_HOST:5432/blackroad
|
DATABASE_ASYNC_URL=postgresql+asyncpg://YOUR_DB_USER:YOUR_DB_PASSWORD@YOUR_DB_HOST:5432/blackroad
|
||||||
|
POSTGRES_URL=postgresql://YOUR_DB_USER:YOUR_DB_PASSWORD@YOUR_DB_HOST:5432/blackroad
|
||||||
REDIS_URL=redis://YOUR_REDIS_HOST:6379/0
|
REDIS_URL=redis://YOUR_REDIS_HOST:6379/0
|
||||||
|
|
||||||
# Security / auth
|
# Security / auth
|
||||||
@@ -22,6 +25,9 @@ ACCESS_TOKEN_EXPIRE_MINUTES=30
|
|||||||
REFRESH_TOKEN_EXPIRE_DAYS=7
|
REFRESH_TOKEN_EXPIRE_DAYS=7
|
||||||
WALLET_MASTER_KEY=changeme-wallet-master-key
|
WALLET_MASTER_KEY=changeme-wallet-master-key
|
||||||
ALLOWED_ORIGINS=https://blackroad.systems,https://your-frontend.example
|
ALLOWED_ORIGINS=https://blackroad.systems,https://your-frontend.example
|
||||||
|
JWT_SECRET=changeme-jwt-secret
|
||||||
|
SESSION_SECRET=changeme-session-secret
|
||||||
|
NEXTAUTH_SECRET=changeme-nextauth-secret
|
||||||
|
|
||||||
# Object storage
|
# Object storage
|
||||||
AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
|
AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
|
||||||
@@ -38,6 +44,7 @@ EMAIL_FROM=blackroad@example.com
|
|||||||
|
|
||||||
# AI integrations
|
# AI integrations
|
||||||
OPENAI_API_KEY=sk-your-openai-key
|
OPENAI_API_KEY=sk-your-openai-key
|
||||||
|
ANTHROPIC_API_KEY=anthropic-key-placeholder
|
||||||
|
|
||||||
# Blockchain tuning
|
# Blockchain tuning
|
||||||
BLOCKCHAIN_DIFFICULTY=4
|
BLOCKCHAIN_DIFFICULTY=4
|
||||||
@@ -50,9 +57,10 @@ RAILWAY_ENVIRONMENT_ID=00000000-0000-0000-0000-000000000000
|
|||||||
RAILWAY_DOMAIN=your-service.up.railway.app
|
RAILWAY_DOMAIN=your-service.up.railway.app
|
||||||
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXX/YYY/ZZZ
|
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXX/YYY/ZZZ
|
||||||
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/XXX/YYY
|
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/XXX/YYY
|
||||||
|
CLOUDFLARE_API_TOKEN=cloudflare-api-token-placeholder
|
||||||
|
|
||||||
# Optional cloud/API integrations
|
# Optional cloud/API integrations
|
||||||
DIGITALOCEAN_TOKEN=your-digitalocean-token
|
DIGITAL_OCEAN_API_KEY=your-digital-ocean-api-key
|
||||||
GITHUB_TOKEN=your-github-personal-access-token
|
GITHUB_TOKEN=your-github-personal-access-token
|
||||||
HUGGINGFACE_TOKEN=your-huggingface-token
|
HUGGINGFACE_TOKEN=your-huggingface-token
|
||||||
VERCEL_TOKEN=vercel-token-placeholder
|
VERCEL_TOKEN=vercel-token-placeholder
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ async def check_huggingface_status():
|
|||||||
|
|
||||||
async def check_digitalocean_status():
|
async def check_digitalocean_status():
|
||||||
"""Check DigitalOcean API status"""
|
"""Check DigitalOcean API status"""
|
||||||
do_token = os.getenv("DIGITALOCEAN_TOKEN")
|
do_token = os.getenv("DIGITAL_OCEAN_API_KEY") or os.getenv("DIGITALOCEAN_TOKEN")
|
||||||
if not do_token:
|
if not do_token:
|
||||||
return {
|
return {
|
||||||
"connected": False,
|
"connected": False,
|
||||||
|
|||||||
@@ -42,8 +42,11 @@ async def get_dashboard_overview(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Check which services are configured
|
# Check which services are configured
|
||||||
|
digital_ocean_token = os.getenv("DIGITAL_OCEAN_API_KEY") or os.getenv(
|
||||||
|
"DIGITALOCEAN_TOKEN"
|
||||||
|
)
|
||||||
services_config = {
|
services_config = {
|
||||||
"digitalocean": bool(os.getenv("DIGITALOCEAN_TOKEN")),
|
"digitalocean": bool(digital_ocean_token),
|
||||||
"github": bool(os.getenv("GITHUB_TOKEN")),
|
"github": bool(os.getenv("GITHUB_TOKEN")),
|
||||||
"huggingface": bool(os.getenv("HUGGINGFACE_TOKEN")),
|
"huggingface": bool(os.getenv("HUGGINGFACE_TOKEN")),
|
||||||
"openai": bool(os.getenv("OPENAI_API_KEY")),
|
"openai": bool(os.getenv("OPENAI_API_KEY")),
|
||||||
@@ -282,7 +285,7 @@ async def list_all_services(
|
|||||||
"description": "Cloud infrastructure management",
|
"description": "Cloud infrastructure management",
|
||||||
"category": "infrastructure",
|
"category": "infrastructure",
|
||||||
"icon": "🌊",
|
"icon": "🌊",
|
||||||
"configured": bool(os.getenv("DIGITALOCEAN_TOKEN"))
|
"configured": bool(digital_ocean_token)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "github",
|
"id": "github",
|
||||||
|
|||||||
@@ -24,7 +24,15 @@ router = APIRouter(prefix="/api/digitalocean", tags=["digitalocean"])
|
|||||||
|
|
||||||
# DigitalOcean API configuration
|
# DigitalOcean API configuration
|
||||||
DO_API_URL = "https://api.digitalocean.com/v2"
|
DO_API_URL = "https://api.digitalocean.com/v2"
|
||||||
DO_TOKEN = os.getenv("DIGITALOCEAN_TOKEN", "")
|
|
||||||
|
|
||||||
|
def get_digital_ocean_token() -> str:
|
||||||
|
"""Return the configured DigitalOcean API key, preferring the canonical name."""
|
||||||
|
|
||||||
|
return os.getenv("DIGITAL_OCEAN_API_KEY") or os.getenv("DIGITALOCEAN_TOKEN", "")
|
||||||
|
|
||||||
|
|
||||||
|
DO_TOKEN = get_digital_ocean_token()
|
||||||
|
|
||||||
|
|
||||||
class DropletCreate(BaseModel):
|
class DropletCreate(BaseModel):
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ EXTRA_REQUIRED_KEYS: Set[str] = {
|
|||||||
"RAILWAY_DOMAIN",
|
"RAILWAY_DOMAIN",
|
||||||
"SLACK_WEBHOOK_URL",
|
"SLACK_WEBHOOK_URL",
|
||||||
"DISCORD_WEBHOOK_URL",
|
"DISCORD_WEBHOOK_URL",
|
||||||
"DIGITALOCEAN_TOKEN",
|
"DIGITAL_OCEAN_API_KEY",
|
||||||
|
"CLOUDFLARE_API_TOKEN",
|
||||||
"GITHUB_TOKEN",
|
"GITHUB_TOKEN",
|
||||||
"HUGGINGFACE_TOKEN",
|
"HUGGINGFACE_TOKEN",
|
||||||
"VERCEL_TOKEN",
|
"VERCEL_TOKEN",
|
||||||
@@ -46,6 +47,13 @@ EXTRA_REQUIRED_KEYS: Set[str] = {
|
|||||||
"MQTT_USERNAME",
|
"MQTT_USERNAME",
|
||||||
"MQTT_PASSWORD",
|
"MQTT_PASSWORD",
|
||||||
"DEVICE_HEARTBEAT_TIMEOUT_SECONDS",
|
"DEVICE_HEARTBEAT_TIMEOUT_SECONDS",
|
||||||
|
"ANTHROPIC_API_KEY",
|
||||||
|
"POSTGRES_URL",
|
||||||
|
"JWT_SECRET",
|
||||||
|
"SESSION_SECRET",
|
||||||
|
"NEXTAUTH_SECRET",
|
||||||
|
"NODE_ENV",
|
||||||
|
"PYTHON_ENV",
|
||||||
}
|
}
|
||||||
|
|
||||||
SENSITIVE_KEYS: Set[str] = {
|
SENSITIVE_KEYS: Set[str] = {
|
||||||
@@ -64,7 +72,8 @@ SENSITIVE_KEYS: Set[str] = {
|
|||||||
"RAILWAY_DOMAIN",
|
"RAILWAY_DOMAIN",
|
||||||
"SLACK_WEBHOOK_URL",
|
"SLACK_WEBHOOK_URL",
|
||||||
"DISCORD_WEBHOOK_URL",
|
"DISCORD_WEBHOOK_URL",
|
||||||
"DIGITALOCEAN_TOKEN",
|
"DIGITAL_OCEAN_API_KEY",
|
||||||
|
"CLOUDFLARE_API_TOKEN",
|
||||||
"GITHUB_TOKEN",
|
"GITHUB_TOKEN",
|
||||||
"HUGGINGFACE_TOKEN",
|
"HUGGINGFACE_TOKEN",
|
||||||
"VERCEL_TOKEN",
|
"VERCEL_TOKEN",
|
||||||
@@ -82,6 +91,11 @@ SENSITIVE_KEYS: Set[str] = {
|
|||||||
"ROADCOIN_WALLET_ADDRESS",
|
"ROADCOIN_WALLET_ADDRESS",
|
||||||
"MQTT_BROKER_URL",
|
"MQTT_BROKER_URL",
|
||||||
"MQTT_PASSWORD",
|
"MQTT_PASSWORD",
|
||||||
|
"ANTHROPIC_API_KEY",
|
||||||
|
"POSTGRES_URL",
|
||||||
|
"JWT_SECRET",
|
||||||
|
"SESSION_SECRET",
|
||||||
|
"NEXTAUTH_SECRET",
|
||||||
}
|
}
|
||||||
|
|
||||||
PLACEHOLDER_MARKERS: Tuple[str, ...] = (
|
PLACEHOLDER_MARKERS: Tuple[str, ...] = (
|
||||||
|
|||||||
Reference in New Issue
Block a user