You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.2 KiB

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>
  5. *
  6. * @author Julius Härtl <jus@bitgrid.net>
  7. *
  8. * @license GNU AGPL version 3 or any later version
  9. *
  10. * This program is free software: you can redistribute it and/or modify
  11. * it under the terms of the GNU Affero General Public License as
  12. * published by the Free Software Foundation, either version 3 of the
  13. * License, or (at your option) any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU Affero General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU Affero General Public License
  21. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  22. */
  23. namespace OC\Core\Controller;
  24. use OCP\AppFramework\Http\DataResponse;
  25. use OCP\Collaboration\Reference\IDiscoverableReferenceProvider;
  26. use OCP\Collaboration\Reference\IReferenceManager;
  27. use OCP\IRequest;
  28. class ReferenceApiController extends \OCP\AppFramework\OCSController {
  29. public function __construct(string $appName,
  30. IRequest $request,
  31. private IReferenceManager $referenceManager,
  32. private ?string $userId) {
  33. parent::__construct($appName, $request);
  34. }
  35. /**
  36. * @NoAdminRequired
  37. */
  38. public function extract(string $text, bool $resolve = false, int $limit = 1): DataResponse {
  39. $references = $this->referenceManager->extractReferences($text);
  40. $result = [];
  41. $index = 0;
  42. foreach ($references as $reference) {
  43. if ($index++ >= $limit) {
  44. break;
  45. }
  46. $result[$reference] = $resolve ? $this->referenceManager->resolveReference($reference) : null;
  47. }
  48. return new DataResponse([
  49. 'references' => $result
  50. ]);
  51. }
  52. /**
  53. * @NoAdminRequired
  54. */
  55. public function resolveOne(string $reference): DataResponse {
  56. $resolvedReference = $this->referenceManager->resolveReference(trim($reference));
  57. $response = new DataResponse(['references' => [ $reference => $resolvedReference ]]);
  58. $response->cacheFor(3600, false, true);
  59. return $response;
  60. }
  61. /**
  62. * @NoAdminRequired
  63. *
  64. * @param string[] $references
  65. */
  66. public function resolve(array $references, int $limit = 1): DataResponse {
  67. $result = [];
  68. $index = 0;
  69. foreach ($references as $reference) {
  70. if ($index++ >= $limit) {
  71. break;
  72. }
  73. $result[$reference] = $this->referenceManager->resolveReference($reference);
  74. }
  75. return new DataResponse([
  76. 'references' => array_filter($result)
  77. ]);
  78. }
  79. /**
  80. * @NoAdminRequired
  81. */
  82. public function getProvidersInfo(): DataResponse {
  83. $providers = $this->referenceManager->getDiscoverableProviders();
  84. $jsonProviders = array_map(static function (IDiscoverableReferenceProvider $provider) {
  85. return $provider->jsonSerialize();
  86. }, $providers);
  87. return new DataResponse($jsonProviders);
  88. }
  89. /**
  90. * @NoAdminRequired
  91. */
  92. public function touchProvider(string $providerId, ?int $timestamp = null): DataResponse {
  93. if ($this->userId !== null) {
  94. $success = $this->referenceManager->touchProvider($this->userId, $providerId, $timestamp);
  95. return new DataResponse(['success' => $success]);
  96. }
  97. return new DataResponse(['success' => false]);
  98. }
  99. }