$vulnerabilityId, ]); } /** * @param string $event * @param array $body * @return void */ public static function store($event, $body) { $filePath = join(DIRECTORY_SEPARATOR, [ WP_CONTENT_DIR, self::STORAGE_FILE_NAME, ]); $data = [ 'event' => $event, 'body' => $body, 'timestamp' => time(), ]; $encoded = json_encode($data); if ($encoded === false) { error_log('Failed to store event, unable to encode JSON'); return; } file_put_contents($filePath, $encoded . PHP_EOL, FILE_APPEND); } /** * @return void */ public static function registerWordpressEvents() { try { $notifier = new WpToolkitNotifier((new HttpClientFactory())->getClient()); } catch (\Exception $e) { error_log('Failed to create notifier: ' . $e->getMessage()); return; } $pluginEventListener = new PluginEventListener($notifier); WordPressHelper::addAction('activated_plugin', [$pluginEventListener, 'activatedPluginHook'], 10, 2); WordPressHelper::addAction('deactivated_plugin', [$pluginEventListener, 'deactivatedPluginHook'], 10, 2); WordPressHelper::addAction('deleted_plugin', [$pluginEventListener, 'deletedPluginHook'], 10, 2); WordPressHelper::addAction('upgrader_pre_install', [$pluginEventListener, 'upgraderPreUpdateHook'], 10, 2); WordPressHelper::addAction('upgrader_process_complete', [$pluginEventListener, 'upgraderProcessCompleteHook'], 10, 2); $themeEventListener = new ThemeEventListener($notifier); WordPressHelper::addAction('switch_theme', [$themeEventListener, 'switchedThemeHook'], 10, 2); // Since WordPress 5.8.0 WordPressHelper::addAction('deleted_theme', [$themeEventListener, 'deletedThemeHook'], 10, 2); WordPressHelper::addAction('upgrader_pre_install', [$themeEventListener, 'upgraderPreUpdateHook'], 10, 2); WordPressHelper::addAction('upgrader_process_complete', [$themeEventListener, 'upgraderProcessCompleteHook'], 10, 2); $coreEventListener = new CoreEventListener($notifier); WordPressHelper::addAction('upgrader_process_complete', [$coreEventListener, 'upgraderProcessCompleteHook'], 10, 2); WordPressHelper::addAction('shutdown', [$notifier, 'flush'], 10, 0); } }