95 lines
2.9 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;
}
// Récupérer le client_secret depuis la session
if (!isset($_SESSION['misskey_client_secret']) || empty($_SESSION['misskey_client_secret'])) {
$_SESSION['messages'][] = [
'type' => 'danger',
'text' => 'Informations d\'application manquantes. Veuillez recommencer.'
];
header('Location: index.php');
exit;
}
$instance = $_SESSION['misskey_instance'];
$code = $_GET['code'];
$client_secret = $_SESSION['misskey_client_secret'];
// Récupérer le client_id depuis les données d'application
if (!isset($app_data['instances'][$instance]) || !isset($app_data['instances'][$instance]['client_id'])) {
$_SESSION['messages'][] = [
'type' => 'danger',
'text' => 'Informations d\'application introuvables pour ' . $instance . '. Veuillez recommencer.'
];
header('Location: index.php');
exit;
}
$client_id = $app_data['instances'][$instance]['client_id'];
// Échanger le code contre un token d'accès
$exchange_result = exchange_oauth_code($instance, $code, $client_id, $client_secret);
if (!$exchange_result['success']) {
$_SESSION['messages'][] = [
'type' => 'danger',
'text' => 'Erreur lors de l\'échange du code d\'autorisation: ' . $exchange_result['message']
];
header('Location: index.php');
exit;
}
// Stocker le token dans la session
$_SESSION['misskey_token'] = $exchange_result['access_token'];
// Nettoyer les données temporaires de la session
unset($_SESSION['oauth_state']);
unset($_SESSION['misskey_client_secret']);
// 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');