SSO #1

Merged
Charles-Edouard merged 23 commits from SSO into main 2025-07-29 16:46:46 +02:00
1 changed files with 0 additions and 89 deletions
Showing only changes of commit 8efc8d53c4 - Show all commits

View File

@ -1,89 +0,0 @@
<?php
namespace App\Command;
use Firebase\JWT\JWT;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
#[AsCommand(name: 'app:listen-subscription', description: 'Listen to Mercure subscriptions')]
class ListenSubscritptionCommand extends Command{
public function __construct(
private HttpClientInterface $httpClient
) {
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int{
$tab = [
'user' => 'charles',
'remoteAddr' => 'rawsfsda'
];
$key = "!ChangeThisMercureHubJWTSecretKey!";
$payload = [
'mercure' => [
'publish' => ['*'],
'subscribe' => ['*'],
'payload' => $tab
],
];
$jwt = JWT::encode($payload, $key, 'HS256');
try{
$response = $this->httpClient->request('GET', $_ENV['MERCURE_URL'] . '/subscriptions', [
'headers' => [
'Authorization' => 'Bearer ' . $jwt,
'Content-Type' => 'application/ld+json',
]
]);
$data = json_decode($response->getContent(), true);
$subscriptions = $this->getSubscription($data);
$encodedSubscriptions = json_encode($subscriptions, JSON_PRETTY_PRINT);
$section = $output->section();
$section2 = $output->section();
$section->writeln('<info>Active Subscriptions:</info>');
$section2->writeln($encodedSubscriptions);
return Command::SUCCESS;
}catch (\Throwable $e){
$output->writeln('<error>Error fetching subscriptions: ' . $e->getMessage() . '</error>');
return Command::FAILURE;
}
}
private function getSubscription(array $data): array {
$subscriptions = [];
foreach ($data['subscriptions'] as $sub) {
if ($sub['active']) {
$subscriptions[] = [
'topic' => $sub['topic'],
'user' => $sub['payload']['user'] ?? null,
'remoteAddr' => $sub['payload']['remoteAddr'] ?? null,
];
}
}
return $subscriptions;
}
private function getUserFromSubscription(array $subscription): ?string {
$parts = parse_url($subscription['topic']);
$userIdentifier = null;
if (isset($parts['query'])) {
parse_str($parts['query'], $query);
if (isset($query['userId'])) {
$userIdentifier = $query['userId'];
}
}
return $userIdentifier;
}
private function addSubscriptionToDb(array $subscription): void {
// try{
//
// }
}
}