<?php /** * FavMasToKey - Authentification OAuth avec 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'instance est fournie if (!isset($_GET['instance']) || empty($_GET['instance'])) { $_SESSION['messages'][] = [ 'type' => 'danger', 'text' => 'Aucune instance Misskey spécifiée.' ]; header('Location: index.php'); exit; } // Récupérer l'instance $instance = trim($_GET['instance']); // Supprimer le protocole et les slash de fin si présents $instance = preg_replace('/^https?:\/\//', '', $instance); $instance = rtrim($instance, '/'); // Vérifier que l'instance semble valide if (!preg_match('/^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $instance)) { $_SESSION['messages'][] = [ 'type' => 'danger', 'text' => 'L\'URL de l\'instance Misskey semble invalide.' ]; header('Location: index.php'); exit; } // Stocker l'instance dans la session $_SESSION['misskey_instance'] = $instance; // En production, ici nous devrions vérifier si l'application est déjà enregistrée sur cette instance // Si ce n'est pas le cas, il faudrait l'enregistrer via l'API Misskey // Pour cette version initiale, nous utilisons des valeurs simulées // Générer l'URL d'autorisation try { // REMARQUE: Pour une implémentation réelle, $config['client_id'] et $config['client_secret'] // devraient être stockés par instance car chaque instance Misskey nécessite une application distincte // Générer un état aléatoire pour la sécurité $state = bin2hex(random_bytes(16)); $_SESSION['oauth_state'] = $state; // Construire l'URL de callback (doit correspondre à celle configurée dans l'application Misskey) $callback_url = $config['app_url'] . '/callback.php'; // Paramètres de la requête d'autorisation $params = [ 'client_id' => $config['client_id'] ?: 'DEMO_CLIENT_ID', // En production, utiliser une valeur réelle 'response_type' => 'code', 'redirect_uri' => $callback_url, 'scope' => 'write:favorites', 'state' => $state ]; // Construire l'URL d'autorisation $auth_url = "https://{$instance}/oauth/authorize?" . http_build_query($params); // Rediriger vers l'URL d'autorisation header('Location: ' . $auth_url); exit; } catch (Exception $e) { $_SESSION['messages'][] = [ 'type' => 'danger', 'text' => 'Erreur lors de la préparation de l\'authentification: ' . $e->getMessage() ]; header('Location: index.php'); exit; }