OverrideAppKeysOnGenerate.php in Apigee Edge 8
File
tests/modules/apigee_edge_test_app_keys/src/EventSubscriber/OverrideAppKeysOnGenerate.php
View source
<?php
namespace Drupal\apigee_edge_test_app_keys\EventSubscriber;
use Apigee\Edge\Exception\ApiException;
use Apigee\Edge\Structure\CredentialProduct;
use Drupal\apigee_edge\Entity\Controller\DeveloperAppCredentialControllerFactoryInterface;
use Drupal\apigee_edge\Event\AppCredentialGenerateEvent;
use Drupal\Component\Utility\Random;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OverrideAppKeysOnGenerate implements EventSubscriberInterface {
private $devAppCredentialControllerFactory;
public function __construct(DeveloperAppCredentialControllerFactoryInterface $dev_app_credential_controller_factory) {
$this->devAppCredentialControllerFactory = $dev_app_credential_controller_factory;
}
public static function getSubscribedEvents() {
return [
AppCredentialGenerateEvent::EVENT_NAME => 'overrideAppKeyOnGenerate',
];
}
public function overrideAppKeyOnGenerate(AppCredentialGenerateEvent $event) {
$random = new Random();
if ($event
->getAppType() === AppCredentialGenerateEvent::APP_TYPE_DEVELOPER) {
$credential_controller = $this->devAppCredentialControllerFactory
->developerAppCredentialController($event
->getOwnerId(), $event
->getAppName());
}
else {
}
$prefix = apigee_edge_test_app_keys_get_prefix();
try {
$credential_controller
->delete($event
->getCredential()
->getConsumerKey());
$new_consumer_key = "{$prefix}-{$random->name()}";
try {
$credential_controller
->create($new_consumer_key, "{$prefix}-{$random->name()}");
try {
$products = array_map(function (CredentialProduct $item) {
return $item
->getApiproduct();
}, $event
->getCredential()
->getApiProducts());
$credential_controller
->addProducts($new_consumer_key, $products);
} catch (ApiException $e) {
watchdog_exception('apigee_edge', $e, 'Unable to assign API products to the newly generated API key on Apigee Edge for @app app. !message', [
'@app' => "{$event->getOwnerId()}:{$event->getAppName()}",
]);
try {
$credential_controller
->delete($new_consumer_key);
} catch (ApiException $e) {
watchdog_exception('apigee_edge', $e, 'Unable to delete newly generated API key after API product re-association has failed on Apigee Edge for @app app. !message', [
'@app' => "{$event->getOwnerId()}:{$event->getAppName()}",
]);
}
}
} catch (ApiException $e) {
watchdog_exception('apigee_edge', $e, 'Unable to create new API key on Apigee Edge for @app app. !message', [
'@app' => "{$event->getOwnerId()}:{$event->getAppName()}",
]);
}
} catch (ApiException $e) {
watchdog_exception('apigee_edge', $e, 'Unable to delete auto-generated key of @app app on Apigee Edge. !message', [
'@app' => "{$event->getOwnerId()}:{$event->getAppName()}",
]);
}
}
}