You are here

class Raven in Raven: Sentry Integration 3.x

Same name in this branch
  1. 3.x src/Logger/Raven.php \Drupal\raven\Logger\Raven
  2. 3.x src/Plugin/CspReportingHandler/Raven.php \Drupal\raven\Plugin\CspReportingHandler\Raven
Same name and namespace in other branches
  1. 8.2 src/Plugin/CspReportingHandler/Raven.php \Drupal\raven\Plugin\CspReportingHandler\Raven

CSP Reporting Plugin for a Sentry endpoint.

Plugin annotation


@CspReportingHandler(
  id = "raven",
  label = "Sentry",
  description = @Translation("Reports will be sent to Sentry."),
)

Hierarchy

Expanded class hierarchy of Raven

File

src/Plugin/CspReportingHandler/Raven.php, line 21

Namespace

Drupal\raven\Plugin\CspReportingHandler
View source
class Raven extends ReportingHandlerBase implements ContainerFactoryPluginInterface {

  /**
   * The configuration factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, $configFactory) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->configFactory = $configFactory;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('config.factory'));
  }

  /**
   * {@inheritdoc}
   */
  public function alterPolicy(Csp $policy) {
    if (!class_exists(Dsn::class)) {
      return;
    }
    $config = $this->configFactory
      ->get('raven.settings');
    try {
      $dsn = Dsn::createFromString(empty($_SERVER['SENTRY_DSN']) ? $config
        ->get('public_dsn') : $_SERVER['SENTRY_DSN']);
    } catch (\InvalidArgumentException $e) {

      // Raven is incorrectly configured.
      return;
    }
    $query = [
      'sentry_key' => $dsn
        ->getPublicKey(),
    ];
    if ($environment = empty($_SERVER['SENTRY_ENVIRONMENT']) ? $config
      ->get('environment') : $_SERVER['SENTRY_ENVIRONMENT']) {
      $query['sentry_environment'] = $environment;
    }
    if ($release = empty($_SERVER['SENTRY_RELEASE']) ? $config
      ->get('release') : $_SERVER['SENTRY_RELEASE']) {
      $query['sentry_release'] = $release;
    }
    $policy
      ->setDirective('report-uri', Url::fromUri(str_replace('/store/', '/security/', $dsn
      ->getStoreApiEndpointUrl()), [
      'query' => $query,
    ])
      ->toString());
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Raven::$configFactory protected property The configuration factory.
Raven::alterPolicy public function
Raven::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
Raven::__construct public function