Allow slashes in digikey product ids

This commit is contained in:
Jan Böhmer 2023-07-17 23:21:30 +02:00
parent 2be76a488f
commit 52c6884e28
3 changed files with 11 additions and 4 deletions

View file

@ -220,7 +220,7 @@ class PartController extends AbstractController
return $this->renderPartForm('new', $request, $new_part);
}
#[Route('/from_info_provider/{providerKey}/{providerId}/create', name: 'info_providers_create_part')]
#[Route('/from_info_provider/{providerKey}/{providerId}/create', name: 'info_providers_create_part', requirements: ['providerId' => '.+'])]
public function createFromInfoProvider(Request $request, string $providerKey, string $providerId, PartInfoRetriever $infoRetriever): Response
{
$this->denyAccessUnlessGranted('@info_providers.create_parts');

View file

@ -73,7 +73,10 @@ final class PartInfoRetriever
*/
protected function searchInProvider(InfoProviderInterface $provider, string $keyword): array
{
return $this->partInfoCache->get("search_{$provider->getProviderKey()}_{$keyword}", function (ItemInterface $item) use ($provider, $keyword) {
//Generate key and escape reserved characters from the provider id
$escaped_keyword = urlencode($keyword);
return $this->partInfoCache->get("search_{$provider->getProviderKey()}_{$escaped_keyword}", function (ItemInterface $item) use ($provider, $keyword) {
//Set the expiration time
$item->expiresAfter(self::CACHE_RESULT_EXPIRATION);
@ -92,7 +95,11 @@ final class PartInfoRetriever
{
$provider = $this->provider_registry->getProviderByKey($provider_key);
return $this->partInfoCache->get("details_{$provider_key}_{$part_id}", function (ItemInterface $item) use ($provider, $part_id) {
//Generate key and escape reserved characters from the provider id
$escaped_part_id = urlencode($part_id);
return $this->partInfoCache->get("details_{$provider_key}_{$escaped_part_id}", function (ItemInterface $item) use ($provider, $part_id) {
//Set the expiration time
$item->expiresAfter(self::CACHE_DETAIL_EXPIRATION);

View file

@ -135,7 +135,7 @@ class DigikeyProvider implements InfoProviderInterface
public function getDetails(string $id): PartDetailDTO
{
$response = $this->digikeyClient->request('GET', '/Search/v3/Products/' . $id, [
$response = $this->digikeyClient->request('GET', '/Search/v3/Products/' . urlencode($id), [
'auth_bearer' => $this->authTokenManager->getAlwaysValidTokenString(self::OAUTH_APP_NAME)
]);