146 lines
6.0 KiB
PHP
Executable File
146 lines
6.0 KiB
PHP
Executable File
<?php
|
|
|
|
require '../../include/variables.php';
|
|
require '../../include/init.php';
|
|
require("../../include/main-functions.php");
|
|
|
|
// Configuration de l'application
|
|
$clientId = 'bab07099-3044-4d44-b3ef-b2b3ba8031e3';
|
|
$clientSecret = '8Ak8Q~~_ahJh~qM0D-SMWsKz-w17lQI.ZBInObCm';
|
|
$redirectUri = 'https://e59.fr/login/microsoft-callback.php';
|
|
$authority = "https://login.microsoftonline.com/common";
|
|
$tokenEndpoint = $authority . '/oauth2/v2.0/token';
|
|
|
|
if (isset($_GET['code'])) {
|
|
$code = $_GET['code'];
|
|
|
|
// Échanger le code contre un jeton
|
|
$params = [
|
|
'client_id' => $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();
|
|
|
|
$from = "no-reply@e59.fr";
|
|
$fromName = "Association E59";
|
|
$to = "communication@e59.fr";
|
|
$subject = "Nouvel utilisateur";
|
|
$body = "$name a créé un compte sur e59.fr";
|
|
$altbody = "$name a créé un compte sur e59.fr";
|
|
sendMail($from, $fromName, $to, $subject, $body, $altbody);
|
|
|
|
// 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();
|
|
}
|
|
?>
|