82 lines
2.6 KiB
PHP
82 lines
2.6 KiB
PHP
<?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;
|
|
} |