Domain support
This commit is contained in:
@@ -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 && (
|
||||
|
||||
Reference in New Issue
Block a user