aboutsummaryrefslogtreecommitdiffstats
path: root/build/stubs/app_api.php
blob: 04a6042dffd53884f4616624a04089ab620c2e5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php

namespace OCA\AppAPI\Service {
	use OCP\IRequest;

	class AppAPIService {
		/**
		 * @param IRequest $request
		 * @param bool $isDav
		 *
		 * @return bool
		 */
		public function validateExAppRequestToNC(IRequest $request, bool $isDav = false): bool {}
	}
}

namespace OCA\AppAPI {

	use OCP\IRequest;
	use OCP\Http\Client\IPromise;
	use OCP\Http\Client\IResponse;

	class PublicFunctions {

		public function __construct(
			private readonly ExAppService  $exAppService,
			private readonly AppAPIService $service,
		) {
		}

		/**
		 * Request to ExApp with AppAPI auth headers
		 */
		public function exAppRequest(
			string $appId,
			string $route,
			?string $userId = null,
			string $method = 'POST',
			array $params = [],
			array $options = [],
			?IRequest $request = null,
		): array|IResponse {
			$exApp = $this->exAppService->getExApp($appId);
			if ($exApp === null) {
				return ['error' => sprintf('ExApp `%s` not found', $appId)];
			}
			return $this->service->requestToExApp($exApp, $route, $userId, $method, $params, $options, $request);
		}

		/**
		 * Async request to ExApp with AppAPI auth headers
		 *
		 * @throws \Exception if ExApp not found
		 */
		public function asyncExAppRequest(
			string $appId,
			string $route,
			?string $userId = null,
			string $method = 'POST',
			array $params = [],
			array $options = [],
			?IRequest $request = null,
		): IPromise {
			$exApp = $this->exAppService->getExApp($appId);
			if ($exApp === null) {
				throw new \Exception(sprintf('ExApp `%s` not found', $appId));
			}
			return $this->service->requestToExAppAsync($exApp, $route, $userId, $method, $params, $options, $request);
		}

		/**
		 * Get basic ExApp info by appid
		 *
		 * @param string $appId
		 *
		 * @return array|null ExApp info (appid, version, name, enabled) or null if no ExApp found
		 */
		public function getExApp(string $appId): ?array {
			$exApp = $this->exAppService->getExApp($appId);
			if ($exApp !== null) {
				$info = $exApp->jsonSerialize();
				return [
					'appid' => $info['appid'],
					'version' => $info['version'],
					'name' => $info['name'],
					'enabled' => $info['enabled'],
				];
			}
			return null;
		}
	}
}