init: projet complet copymail pour Raspberry Pi
Stack: Nginx + PHP 8.2 + MariaDB + Postfix + Dovecot + Samba - install.sh: script installation automatisé pour RPi OS Bookworm - Interface web: visionneuse mails + admin (comptes, domaine, dashboard) - Chaque compte mail génère automatiquement un share Samba - Processeur cron: extraction pièces jointes via zbateson/mail-mime-parser - Zéro injection SQL (PDO + prepared statements) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
96
web/admin/domain.php
Normal file
96
web/admin/domain.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../includes/db.php';
|
||||
require_once __DIR__ . '/../includes/auth.php';
|
||||
require_once __DIR__ . '/../includes/layout.php';
|
||||
|
||||
auth_check();
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$fields = ['domain', 'hostname', 'smtp_port', 'submission_port', 'imap_port', 'imaps_port', 'smb_workgroup'];
|
||||
foreach ($fields as $f) {
|
||||
$val = trim($_POST[$f] ?? '');
|
||||
if ($val !== '') cfg_set($f, $val);
|
||||
}
|
||||
// Régénère les fichiers de config et recharge les services
|
||||
$result = shell_exec('/opt/copymail/scripts/apply_config.sh 2>&1');
|
||||
flash('success', 'Configuration sauvegardée et services rechargés.');
|
||||
header('Location: /admin/domain.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$fields = ['domain', 'hostname', 'smtp_port', 'submission_port', 'imap_port', 'imaps_port', 'smb_workgroup'];
|
||||
$vals = [];
|
||||
foreach ($fields as $f) $vals[$f] = cfg($f);
|
||||
|
||||
html_head('Configuration');
|
||||
html_navbar('domain');
|
||||
?>
|
||||
<div class="container" style="max-width:700px">
|
||||
<?php flash_render(); ?>
|
||||
<h5 class="mb-4"><i class="bi bi-gear-fill me-2"></i>Configuration du serveur</h5>
|
||||
|
||||
<form method="post">
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header fw-semibold"><i class="bi bi-globe me-2"></i>Réseau & Domaine</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">Nom de domaine mail</label>
|
||||
<input type="text" name="domain" class="form-control" value="<?= htmlspecialchars($vals['domain']) ?>" placeholder="mail.mondomaine.fr" required>
|
||||
<div class="form-text">Ex: <code>mail.mondomaine.fr</code></div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">Hostname RPi</label>
|
||||
<input type="text" name="hostname" class="form-control" value="<?= htmlspecialchars($vals['hostname']) ?>" placeholder="raspberrypi">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header fw-semibold"><i class="bi bi-envelope-at me-2"></i>Ports mail</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">SMTP (réception)</label>
|
||||
<input type="number" name="smtp_port" class="form-control" value="<?= htmlspecialchars($vals['smtp_port']) ?>" min="1" max="65535">
|
||||
<div class="form-text">Défaut: 25</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">Submission</label>
|
||||
<input type="number" name="submission_port" class="form-control" value="<?= htmlspecialchars($vals['submission_port']) ?>" min="1" max="65535">
|
||||
<div class="form-text">Défaut: 587</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">IMAP</label>
|
||||
<input type="number" name="imap_port" class="form-control" value="<?= htmlspecialchars($vals['imap_port']) ?>" min="1" max="65535">
|
||||
<div class="form-text">Défaut: 143</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">IMAPS</label>
|
||||
<input type="number" name="imaps_port" class="form-control" value="<?= htmlspecialchars($vals['imaps_port']) ?>" min="1" max="65535">
|
||||
<div class="form-text">Défaut: 993</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header fw-semibold"><i class="bi bi-folder-symlink me-2"></i>Samba (SMB)</div>
|
||||
<div class="card-body">
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">Workgroup</label>
|
||||
<input type="text" name="smb_workgroup" class="form-control" value="<?= htmlspecialchars($vals['smb_workgroup']) ?>" placeholder="WORKGROUP">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-floppy-fill me-1"></i>Sauvegarder & Appliquer
|
||||
</button>
|
||||
<a href="/admin/index.php" class="btn btn-outline-secondary">Annuler</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php html_foot(); ?>
|
||||
Reference in New Issue
Block a user