128 lines
3.6 KiB
PHP
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'); |