2025-03-20 21:42:31 +01:00

128 lines
3.6 KiB
PHP

<?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');