You are here

class Raven in Raven: Sentry Integration 8.2

Same name in this branch
  1. 8.2 src/Logger/Raven.php \Drupal\raven\Logger\Raven
  2. 8.2 src/Plugin/CspReportingHandler/Raven.php \Drupal\raven\Plugin\CspReportingHandler\Raven
Same name and namespace in other branches
  1. 3.x 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 20

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(\Raven_Client::class)) {
      return;
    }
    $config = $this->configFactory
      ->get('raven.settings');
    try {
      $dsn = \Raven_Client::parseDSN(empty($_SERVER['SENTRY_DSN']) ? $config
        ->get('public_dsn') : $_SERVER['SENTRY_DSN']);
    } catch (\InvalidArgumentException $e) {

      // Raven is incorrectly configured.
      return;
    }
    $query = [
      'sentry_key' => $dsn['public_key'],
    ];
    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['server']), [
      'query' => $query,
    ])
      ->toString());
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Raven::$configFactory protected property The configuration factory.
Raven::alterPolicy public function Alter the provided policy according to the plugin settings. Overrides ReportingHandlerBase::alterPolicy
Raven::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
Raven::__construct public function Reporting Handler plugin constructor. Overrides ReportingHandlerBase::__construct
ReportingHandlerBase::$configuration protected property The Plugin Configuration.
ReportingHandlerBase::$pluginDefinition protected property The Plugin Definition.
ReportingHandlerBase::$pluginId protected property The Plugin ID.
ReportingHandlerBase::getForm public function Get the form fields for configuring this reporting handler. Overrides ReportingHandlerInterface::getForm 2
ReportingHandlerBase::validateForm public function Validate the form fields of this report handler. Overrides ReportingHandlerInterface::validateForm 2