e59-website/html/login/register.php
2024-08-13 23:54:15 +00:00

181 lines
8.9 KiB
PHP
Executable File

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Inclure les fichiers de l'autoloader de Composer
require 'vendor/autoload.php';
require("../../include/variables.php");
require("../../include/init.php");
if (isset($_SESSION['userID'])) {
header("Location: index.php");
die("Vous êtes déjà connecté");
}
require("../../include/main-functions.php");
require("../../include/inputs.php");
require("../../include/panels.php");
$pdo = sqlConnect($sqlDatabaseHost, $sqlDatabaseName, $sqlDatabaseUser, $sqlDatabasePass);
$redirectPage = isset($_GET['p']) ? $_GET['p'] : "home.php";
if(isset($_POST['username'])) {
if(isset($_POST['g-recaptcha-response'])) {
$recaptchaResponse = $_POST['g-recaptcha-response'];
$recaptchaUrl = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($recaptchaSecretKey) . '&response=' . urlencode($recaptchaResponse);
$recaptcha = json_decode(file_get_contents($recaptchaUrl));
if (!$recaptcha->success) {
$status = "Veuillez cocher la case reCAPTCHA.";
} else {
if (isset($_POST['password1']) && isset($_POST['password2'])) {
if(empty($_POST['username']) == false && empty($_POST['password1']) === false && empty($_POST['password2']) === false) {
if(preg_match('!\S!u', $_POST['username']) && preg_match('!\S!u', $_POST['password1']) && preg_match('!\S!u', $_POST['password2'])) {
if($_POST['password1'] == $_POST['password2']) {
if (preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $_POST['email']) == false && preg_match('!\S!u', $_POST['username']) == false) {
$status = "Caractères illégaux";
} else {
$userEmail = isset($_POST['email']) ? strtolower($_POST['email']) : NULL;
$userDisplayName = htmlspecialchars(substr($_POST['username'], 0, 20));
$userName = str_replace(" ", "_", strtolower(htmlspecialchars(substr($_POST['username'], 0, 20))));
$sqlRequest = "SELECT ID FROM users WHERE username = :username";
$request = $pdo->prepare($sqlRequest);
$request->bindParam(":username", $userName);
$request->execute();
$result = $request->fetchAll(PDO::FETCH_ASSOC);
if($result) {
$status = "Le nom d'utilisateur existe déjà";
} else {
$request = $pdo->prepare("INSERT INTO users (username, password, email, display_name, role, accreditation) VALUES (:username, :password, :email, :display_name, 1, 1)");
$request->bindParam(':username', $userName);
$request->bindParam(':password', md5($_POST['password1']));
$request->bindParam(':email', $userEmail);
$request->bindParam(':display_name', $userDisplayName);
if ($request->execute()) {
$mail = new PHPMailer(true);
try {
// Paramètres du serveur SMTP
$mail->isSMTP(); // Utiliser SMTP
$mail->Host = 'outlook.office365.com'; // Serveur SMTP Exchange
$mail->SMTPAuth = true; // Activer l'authentification SMTP
$mail->Username = 'smtp@e59.fr'; // Nom d'utilisateur SMTP
$mail->Password = 'WTFdoto5678TFWT'; // Mot de passe SMTP
$mail->SMTPSecure = 'tls'; // Activer le cryptage TLS
$mail->Port = 587; // Port TCP pour TLS
// Destinataires
$mail->setFrom('service-adhesions@e59.fr', 'Adhesions');
$mail->addAddress('communication@e59.fr', 'E59-UVSQ'); // Port TCP à se connecter (tls = 587, ssl = 465)
// Vous pouvez ajouter d'autres destinataires en utilisant $mail->addAddress()
// $mail->addAddress('autre-destinataire@example.com');
// Vous pouvez aussi ajouter des destinataires en copie (CC) ou en copie cachée (BCC)
// $mail->addCC('cc@example.com');
// $mail->addBCC('bcc@example.com');
// Pièces jointes (si nécessaire)
// $mail->addAttachment('/path/to/file.pdf'); // Ajouter un fichier joint
// Contenu de l'email
$mail->isHTML(true); // Activer le format HTML pour l'email
$mail->Subject = 'Nouvel Utilisateur';
$mail->Body = $userDisplayName . ' a cree un compte sur e59.fr';
$mail->AltBody = $userDisplayName . ' a cree un compte sur e59.fr';
// Envoyer l'email
$mail->send();
} catch (Exception $e) {
error_log("Erreur de Mailer: {$mail->ErrorInfo}");
}
header("Location: index.php?p=" . $redirectPage);
exit();
} else {
$status = "Erreur SQL";
}
}
}
} else {
$status = "Les mots de passe ne correspondent pas";
}
} else {
$status = "Caractères illégaux";
}
} else {
$status = "Les champs ne doivent pas être vides";
}
}
}
} else {
$status = "Erreur, captcha vide";
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<?php fillHead($rootPageURL, "Créer un compte - " . $pageName, $darkTheme, $lightTheme);?>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<style>
#register-text {
font-size: 0.8em;
margin: 2em 0 2em 0;
color: #a0a0a0;
}
#register-text a {
color: var(--text);
}
</style>
</head>
<body class="body">
<header>
<div class="panel-content">
<?php fillHeader($rootPageURL, $headerTitle, $headerSubtitle, $social);?>
</div>
</header>
<nav>
<div class="panel-content">
<?php fillNav($rootPageURL);?>
</div>
</nav>
<main>
<div class="content">
<form action="#" method="post">
<div class="form">
<div class="form-title">Créer un compte</div>
<div class="status"><?=$status?></div>
<?php
textInput("text", "", "username", "Login", "");
textInput("email", "", "email", "Email (facultatif)", "");
textInput("password", "", "password1", "Mot de Passe", "");
textInput("password", "", "password2", "Confirmation du Mot de passe", "");
?>
<div class="g-recaptcha" data-sitekey="<?=$recaptchaSiteKey?>" data-theme="dark" data-size="normal"></div>
<button type="submit">Créer un compte</button>
<div><div id="register-text">Vous avez déjà un compte ? <a href="/login?p=<?=$redirectPage?>">Connexion</a></div></div>
</div>
</form>
</div>
</main>
<footer>
<div class="panel-content">
<?php fillFooter($footerText);?>
</div>
</footer>
</body>
</html>