|
|
@@ -60,7 +60,7 @@ class ConnectionService extends ApiRequestService
|
|
|
*/
|
|
|
public function getAuthUrl(): AuthUrl
|
|
|
{
|
|
|
- $callbackUrl = UrlBuilder::concat($this->publicAppBaseUrl, ['helloasso/callback']);
|
|
|
+ $callbackUrl = UrlBuilder::concat($this->publicAppBaseUrl, ['helloasso']);
|
|
|
|
|
|
$challenge = OAuthPkceGenerator::generatePkce();
|
|
|
|
|
|
@@ -200,4 +200,33 @@ class ConnectionService extends ApiRequestService
|
|
|
throw new HttpException(500, 'Failed to update domain: ' . $response->getContent());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Retourne l'URL de redirection pour le callback HelloAsso.
|
|
|
+ * Valide que l'URL de destination correspond au format autorisé et transmet
|
|
|
+ * les paramètres de query (excepté 'state').
|
|
|
+ *
|
|
|
+ * @param array<string, string> $queryParameters Paramètres de la requête originale
|
|
|
+ * @return string L'URL vers laquelle rediriger l'utilisateur
|
|
|
+ * @throws HttpException Si le paramètre 'state' est manquant ou l'URL invalide
|
|
|
+ */
|
|
|
+ public function forwardCallbackTo(array $queryParameters): string
|
|
|
+ {
|
|
|
+ if (!isset($queryParameters['state']) || empty($queryParameters['state'])) {
|
|
|
+ throw new HttpException(400, 'Missing required state parameter');
|
|
|
+ }
|
|
|
+
|
|
|
+ $redirectUrl = $queryParameters['state'];
|
|
|
+
|
|
|
+ // Validation du format de l'URL (doit être https://***.opentalent.fr?***)
|
|
|
+ if (!preg_match('/^https:\/\/[^\/]+\.opentalent\.fr(\/[\w-]+)*(\?.*)?$/', $redirectUrl)) {
|
|
|
+ throw new HttpException(400, 'Invalid redirect URL format. Must be https://***.opentalent.fr/...');
|
|
|
+ }
|
|
|
+
|
|
|
+ // Supprimer le paramètre 'state' des paramètres à transmettre
|
|
|
+ $forwardParams = $queryParameters;
|
|
|
+ unset($forwardParams['state']);
|
|
|
+
|
|
|
+ return UrlBuilder::concatParameters($redirectUrl, $forwardParams);
|
|
|
+ }
|
|
|
}
|