rootDirectory = $rootDirectory; } function getRootDirectory(): string { return $this->rootDirectory; } function getApi(): \Ubnt\UcrmPluginSdk\Service\UcrmApi { if ($this->api === NULL) { $this->api = \Ubnt\UcrmPluginSdk\Service\UcrmApi::create($this->rootDirectory); } return $this->api; } function getSelfUrl(): string { $ucrmOptionsManager = new UcrmOptionsManager($this->rootDirectory); $options = $ucrmOptionsManager->loadOptions(); return $options->ucrmLocalUrl ?? $options->ucrmPublicUrl ?? ''; } function getAttributes(): UcrmAttributes { if ($this->attributes === NULL) { $this->attributes = new UcrmAttributes($this); } return $this->attributes; } function getPaymentMethods(): UcrmPaymentMethods { if ($this->paymentMethods === NULL) { $this->paymentMethods = new UcrmPaymentMethods($this); } return $this->paymentMethods; } function getConfig(): array { if ($this->config === NULL) { $configManager = \Ubnt\UcrmPluginSdk\Service\PluginConfigManager::create($this->rootDirectory); $this->config = $configManager->loadConfig(); } return $this->config; } function getVersion(): string { $response = $this->getApi()->get('/version'); return $response['version']; } function getCurrentEvent(): array { if ($this->event === NULL) { try { if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') { throw new \RuntimeException('Failed to process event - wrong request method'); } $data = file_get_contents('php://input'); $data = json_decode($data, TRUE); if (!is_array($data)) { throw new \RuntimeException('Failed to process event - invalid JSON'); } if (!isset($data['uuid'])) { throw new \RuntimeException('Failed to process event - missing UUID'); } if (!ctype_alnum(strtr($data['uuid'], ['-' => '', '_' => '']))) { throw new \RuntimeException('Failed to process event - invalid UUID'); } $event = $this->getApi()->get('/webhook-events/' . $data['uuid']); if ($event['uuid'] !== $data['uuid']) { throw new \RuntimeException('Failed to process event - event not found'); } if (!ctype_digit($event['entityId'])) { throw new \RuntimeException('Failed to process event - invalid entity ID'); } $this->event = $event; } catch (\Throwable $e) { $this->event = $e; } } if ($this->event instanceof \Throwable) { throw $this->event; } return $this->event; } }