<?php /** * FavMasToKey - Callback OAuth pour Misskey */ // Définir la constante pour inclure les fichiers define('FAVMASTOKEY', true); // Inclure les fichiers requis require_once 'includes/config.php'; require_once 'includes/functions.php'; // Vérifier si l'état est valide (protection CSRF) if (!isset($_GET['state']) || !isset($_SESSION['oauth_state']) || $_GET['state'] !== $_SESSION['oauth_state']) { $_SESSION['messages'][] = [ 'type' => 'danger', 'text' => 'Paramètre d\'état invalide. Veuillez réessayer.' ]; header('Location: index.php'); exit; } // Vérifier si le code d'autorisation est présent if (!isset($_GET['code']) || empty($_GET['code'])) { $_SESSION['messages'][] = [ 'type' => 'danger', 'text' => 'Aucun code d\'autorisation reçu. L\'authentification a échoué ou a été annulée.' ]; header('Location: index.php'); exit; } // Récupérer l'instance Misskey depuis la session if (!isset($_SESSION['misskey_instance']) || empty($_SESSION['misskey_instance'])) { $_SESSION['messages'][] = [ 'type' => 'danger', 'text' => 'Instance Misskey non définie. Veuillez recommencer.' ]; header('Location: index.php'); exit; } $instance = $_SESSION['misskey_instance']; $code = $_GET['code']; // En production, ici nous échangerions le code contre un token d'accès // Pour cette version initiale, nous simulons l'échange // Simulation : générer un token fictif // Dans une implémentation réelle, nous appellerions l'API Misskey pour obtenir un vrai token $_SESSION['misskey_token'] = 'DEMO_' . bin2hex(random_bytes(16)); // Dans un cas réel, nous aurions un code similaire à celui-ci: /* // Construire l'URL pour l'échange du code $token_url = "https://{$instance}/oauth/token"; // Paramètres de la requête $params = [ 'client_id' => $config['client_id'], 'client_secret' => $config['client_secret'], 'grant_type' => 'authorization_code', 'code' => $code, 'redirect_uri' => $config['app_url'] . '/callback.php' ]; // Initialiser cURL $ch = curl_init(); // Configurer la requête curl_setopt_array($ch, [ CURLOPT_URL => $token_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_HTTPHEADER => [ 'Content-Type: application/x-www-form-urlencoded' ], CURLOPT_TIMEOUT => 30, CURLOPT_SSL_VERIFYPEER => true ]); // Exécuter la requête $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); // Fermer la session cURL curl_close($ch); // Vérifier les erreurs if ($error || $http_code !== 200) { $_SESSION['messages'][] = [ 'type' => 'danger', 'text' => 'Erreur lors de l\'échange du code d\'autorisation: ' . ($error ?: 'HTTP ' . $http_code) ]; header('Location: index.php'); exit; } // Décoder la réponse $response_data = json_decode($response, true); // Vérifier que le token est présent if (!isset($response_data['access_token']) || empty($response_data['access_token'])) { $_SESSION['messages'][] = [ 'type' => 'danger', 'text' => 'Aucun token d\'accès reçu. L\'authentification a échoué.' ]; header('Location: index.php'); exit; } // Stocker le token dans la session $_SESSION['misskey_token'] = $response_data['access_token']; */ // Nettoyer l'état OAuth unset($_SESSION['oauth_state']); // Ajouter un message de succès $_SESSION['messages'][] = [ 'type' => 'success', 'text' => 'Connecté avec succès à ' . $instance . '.' ]; // Rediriger vers la page de migration (étape 3) header('Location: index.php#step3');