- Cookie-based auth: bcrypt password hash, SQLite sessions - Multipage routing: /, /dashboard, /bots/:id with server-side auth check - bot_logs table + SSE log streaming per bot - Bot detail page: Binance chart (LW Charts), position markers/price lines, live log terminal - Chart always uses live Binance data regardless of bot mode - Position buy markers on correct candle via timeframe offset - Open positions: green target price line; closed: buy/sell arrow markers Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
26 lines
1.1 KiB
Rust
26 lines
1.1 KiB
Rust
use std::env;
|
|
|
|
#[derive(Clone)]
|
|
pub struct AppConfig {
|
|
pub live_api_key: String,
|
|
pub live_api_secret: String,
|
|
pub testnet_api_key: String,
|
|
pub testnet_api_secret: String,
|
|
pub password_hash: String,
|
|
pub db_path: String,
|
|
pub listen_addr: String,
|
|
}
|
|
|
|
impl AppConfig {
|
|
pub fn from_env() -> Self {
|
|
Self {
|
|
live_api_key: env::var("BINANCE_API_KEY").expect("BINANCE_API_KEY gerekli"),
|
|
live_api_secret: env::var("BINANCE_API_SECRET").expect("BINANCE_API_SECRET gerekli"),
|
|
testnet_api_key: env::var("BINANCE_TESTNET_API_KEY").expect("BINANCE_TESTNET_API_KEY gerekli"),
|
|
testnet_api_secret: env::var("BINANCE_TESTNET_API_SECRET").expect("BINANCE_TESTNET_API_SECRET gerekli"),
|
|
password_hash: env::var("ADMIN_PASSWORD_HASH").expect("ADMIN_PASSWORD_HASH gerekli"),
|
|
db_path: env::var("DB_PATH").unwrap_or_else(|_| "data/bots.db".to_string()),
|
|
listen_addr: env::var("LISTEN_ADDR").unwrap_or_else(|_| "127.0.0.1:4646".to_string()),
|
|
}
|
|
}
|
|
}
|