Domain support

This commit is contained in:
salvacybersec
2025-11-10 20:01:41 +03:00
parent dea1b874b5
commit f86cda2978
24 changed files with 3703 additions and 34 deletions

View File

@@ -11,14 +11,19 @@ import {
Divider,
} from '@mui/material';
import { Save, Send } from '@mui/icons-material';
import { FormControlLabel, Checkbox } from '@mui/material';
import axios from 'axios';
const API_URL = import.meta.env.VITE_API_URL;
function Settings() {
const [settings, setSettings] = useState({
base_url: '',
frontend_url: '',
cors_enabled: false,
gmail_user: '',
gmail_app_password: '',
gmail_from_name: '',
telegram_bot_token: '',
telegram_chat_id: '',
});
@@ -36,11 +41,24 @@ function Settings() {
withCredentials: true,
});
const data = response.data.data || {};
// Convert array to object
const settingsObj = {};
if (Array.isArray(data)) {
data.forEach(item => {
settingsObj[item.key] = item.value === '********' ? '' : item.value;
});
}
setSettings({
gmail_user: data.gmail_user || '',
gmail_app_password: data.gmail_app_password || '',
telegram_bot_token: data.telegram_bot_token || '',
telegram_chat_id: data.telegram_chat_id || '',
base_url: settingsObj.base_url || '',
frontend_url: settingsObj.frontend_url || '',
cors_enabled: settingsObj.cors_enabled === 'true',
gmail_user: settingsObj.gmail_user || '',
gmail_app_password: settingsObj.gmail_password || '',
gmail_from_name: settingsObj.gmail_from_name || '',
telegram_bot_token: settingsObj.telegram_bot_token || '',
telegram_chat_id: settingsObj.telegram_chat_id || '',
});
} catch (error) {
console.error('Failed to load settings:', error);
@@ -52,9 +70,15 @@ function Settings() {
const handleSave = async () => {
try {
await Promise.all([
axios.put(`${API_URL}/api/settings/system`, {
base_url: settings.base_url,
frontend_url: settings.frontend_url,
cors_enabled: settings.cors_enabled,
}, { withCredentials: true }),
axios.put(`${API_URL}/api/settings/gmail`, {
gmail_user: settings.gmail_user,
gmail_app_password: settings.gmail_app_password,
gmail_from_name: settings.gmail_from_name,
}, { withCredentials: true }),
axios.put(`${API_URL}/api/settings/telegram`, {
telegram_bot_token: settings.telegram_bot_token,
@@ -64,7 +88,7 @@ function Settings() {
alert('Ayarlar kaydedildi!');
} catch (error) {
console.error('Failed to save settings:', error);
alert('Ayarlar kaydedilemedi');
alert('Ayarlar kaydedilemedi: ' + (error.response?.data?.error || error.message));
}
};
@@ -124,10 +148,72 @@ function Settings() {
</Typography>
<Grid container spacing={3}>
{/* System Settings */}
<Grid item xs={12}>
<Paper sx={{ p: 3 }}>
<Typography variant="h6" gutterBottom>
🌐 Genel Ayarlar
</Typography>
<Typography variant="body2" color="text.secondary" gutterBottom>
Domain ve genel sistem ayarları
</Typography>
<Typography variant="body2" color="text.secondary" sx={{ mb: 2 }}>
<strong>Tek Domain (Önerilen):</strong> Frontend ve backend aynı domainde, path ile ayrılır<br/>
<strong>İki Domain:</strong> Frontend ve backend farklı domainlerde (CORS gerekir)
</Typography>
<FormControlLabel
control={
<Checkbox
checked={settings.cors_enabled}
onChange={(e) =>
setSettings({ ...settings, cors_enabled: e.target.checked })
}
/>
}
label="İki Ayrı Domain Kullan (CORS Aktif Et)"
/>
<TextField
fullWidth
margin="normal"
label={settings.cors_enabled ? "Backend Domain (Base URL)" : "Domain (Base URL)"}
type="url"
placeholder="https://yourdomain.com"
value={settings.base_url}
onChange={(e) =>
setSettings({ ...settings, base_url: e.target.value })
}
helperText={
settings.cors_enabled
? "Backend API domain'i. Örnek: https://api.yourdomain.com"
: "Hem frontend hem backend için kullanılacak domain. Örnek: https://yourdomain.com"
}
/>
{settings.cors_enabled && (
<TextField
fullWidth
margin="normal"
label="Frontend Domain"
type="url"
placeholder="https://panel.yourdomain.com"
value={settings.frontend_url}
onChange={(e) =>
setSettings({ ...settings, frontend_url: e.target.value })
}
helperText="Frontend panel domain'i. CORS için gerekli."
/>
)}
</Paper>
</Grid>
{/* Gmail Settings */}
<Grid item xs={12} md={6}>
<Paper sx={{ p: 3 }}>
<Typography variant="h6" gutterBottom>
Gmail Ayarları
📧 Gmail Ayarları
</Typography>
<Typography variant="body2" color="text.secondary" gutterBottom>
Gmail App Password kullanın (2FA aktif olmalı)
@@ -152,6 +238,18 @@ function Settings() {
onChange={(e) =>
setSettings({ ...settings, gmail_app_password: e.target.value })
}
helperText="Google Hesap → Güvenlik → 2FA → Uygulama Şifreleri"
/>
<TextField
fullWidth
margin="normal"
label="Gönderen Adı (Varsayılan)"
value={settings.gmail_from_name}
onChange={(e) =>
setSettings({ ...settings, gmail_from_name: e.target.value })
}
placeholder="Güvenlik Ekibi"
helperText="Mail gönderirken görünecek varsayılan isim"
/>
{alerts.mail && (