$clientId, 'scope' => 'openid profile email', 'code' => $code, 'redirect_uri' => $redirectUri, 'grant_type' => 'authorization_code', 'client_secret' => $clientSecret ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tokenEndpoint); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $token = json_decode($response, true); if (isset($token['access_token'])) { $accessToken = $token['access_token']; // Utiliser le jeton pour obtenir des informations sur l'utilisateur $headers = [ "Authorization: Bearer $accessToken", "Accept: application/json" ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://graph.microsoft.com/v1.0/me"); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $user = json_decode($response, true); // Ajouter une ligne pour enregistrer la valeur de $user dans les logs d'erreur Apache if (!empty($user['mail']) || !empty($user['userPrincipalName'])) { $email = $user['mail'] ?? $user['userPrincipalName']; $name = $user['displayName']; // Convertir en minuscule et retirer les caractères spéciaux et les espaces $username = strtolower($name); $username = preg_replace('/[^a-z0-9]/', '', $username); // Établir la connexion à la base de données $pdo = sqlConnect($sqlDatabaseHost, $sqlDatabaseName, $sqlDatabaseUser, $sqlDatabasePass); // Vérifiez si l'utilisateur existe dans la base de données par email $sqlRequest = "SELECT ID, username, display_name, role, accreditation FROM users WHERE email = :email"; $request = $pdo->prepare($sqlRequest); $request->bindParam(":email", $email); $request->execute(); $result = $request->fetchAll(PDO::FETCH_ASSOC); if ($result) { // L'utilisateur existe, connectez-le session_start(); $_SESSION['userID'] = $result[0]['ID']; $_SESSION['userName'] = $result[0]['username']; $_SESSION['userDisplayName'] = $result[0]['display_name']; $_SESSION['userRole'] = $result[0]['role']; $_SESSION['userAccreditation'] = $result[0]['accreditation']; } else { // Vérifiez si le nom d'utilisateur existe déjà $usernameCheck = $pdo->prepare("SELECT COUNT(*) FROM users WHERE username = :username"); $usernameCheck->bindParam(":username", $username); $usernameCheck->execute(); $count = $usernameCheck->fetchColumn(); // Ajouter un identifiant unique si le nom d'utilisateur existe déjà $originalUsername = $username; $suffix = 1; while ($count > 0) { $username = $originalUsername . $suffix; $usernameCheck->bindParam(":username", $username); $usernameCheck->execute(); $count = $usernameCheck->fetchColumn(); $suffix++; } // L'utilisateur n'existe pas, créez-le $defaultPassword = ''; // Vous pouvez également générer un mot de passe aléatoire ou utiliser une valeur par défaut $sqlInsert = "INSERT INTO users (username, email, display_name, role, password) VALUES (:username, :email, :display_name, 1, :password)"; $insert = $pdo->prepare($sqlInsert); $insert->bindParam(":username", $username); $insert->bindParam(":email", $email); $insert->bindParam(":display_name", $name); $insert->bindParam(":password", $defaultPassword); $insert->execute(); // Récupérez l'ID du nouvel utilisateur $userID = $pdo->lastInsertId(); $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 = $name . ' a cree un compte sur e59.fr'; $mail->AltBody = $name . ' a cree un compte sur e59.fr'; // Envoyer l'email $mail->send(); } catch (Exception $e) { error_log("Erreur de Mailer: {$mail->ErrorInfo}"); } // Connectez l'utilisateur session_start(); $_SESSION['userID'] = $userID; $_SESSION['userName'] = $username; $_SESSION['userDisplayName'] = $name; $_SESSION['userRole'] = 'user'; $_SESSION['userAccreditation'] = null; } // Redirection vers la page d'accueil ou une autre page header('Location: /'); exit(); } else { error_log('Impossible d\'obtenir les informations utilisateur.'); echo 'Impossible d\'obtenir les informations utilisateur.'; } } else { error_log('Impossible d\'obtenir le jeton d\'accès.'); echo 'Impossible d\'obtenir le jeton d\'accès.'; } } else { header('Location: /login.php'); exit(); } ?>