mirror of
https://github.com/nextcloud/spreed.git
synced 2025-12-18 05:20:50 +01:00
fix(routes): Move chat routes in controller
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
d87913b8e8
commit
b128b16d38
3 changed files with 74 additions and 62 deletions
|
|
@ -15,7 +15,6 @@ return array_merge_recursive(
|
|||
include(__DIR__ . '/routes/routesCalendarIntegrationController.php'),
|
||||
include(__DIR__ . '/routes/routesCallController.php'),
|
||||
include(__DIR__ . '/routes/routesCertificateController.php'),
|
||||
include(__DIR__ . '/routes/routesChatController.php'),
|
||||
include(__DIR__ . '/routes/routesFederationController.php'),
|
||||
include(__DIR__ . '/routes/routesFilesIntegrationController.php'),
|
||||
include(__DIR__ . '/routes/routesGuestController.php'),
|
||||
|
|
|
|||
|
|
@ -1,61 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
$requirementsVersionOnly = [
|
||||
'apiVersion' => '(v1)',
|
||||
];
|
||||
|
||||
$requirements = [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
];
|
||||
|
||||
$requirementsWithMessageId = [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
'messageId' => '[0-9]+',
|
||||
];
|
||||
|
||||
return [
|
||||
'ocs' => [
|
||||
/** @see \OCA\Talk\Controller\ChatController::receiveMessages() */
|
||||
['name' => 'Chat#receiveMessages', 'url' => '/api/{apiVersion}/chat/{token}', 'verb' => 'GET', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::summarizeChat() */
|
||||
['name' => 'Chat#summarizeChat', 'url' => '/api/{apiVersion}/chat/{token}/summarize', 'verb' => 'POST', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::sendMessage() */
|
||||
['name' => 'Chat#sendMessage', 'url' => '/api/{apiVersion}/chat/{token}', 'verb' => 'POST', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::clearHistory() */
|
||||
['name' => 'Chat#clearHistory', 'url' => '/api/{apiVersion}/chat/{token}', 'verb' => 'DELETE', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::deleteMessage() */
|
||||
['name' => 'Chat#deleteMessage', 'url' => '/api/{apiVersion}/chat/{token}/{messageId}', 'verb' => 'DELETE', 'requirements' => $requirementsWithMessageId],
|
||||
/** @see \OCA\Talk\Controller\ChatController::editMessage() */
|
||||
['name' => 'Chat#editMessage', 'url' => '/api/{apiVersion}/chat/{token}/{messageId}', 'verb' => 'PUT', 'requirements' => $requirementsWithMessageId],
|
||||
/** @see \OCA\Talk\Controller\ChatController::getMessageContext() */
|
||||
['name' => 'Chat#getMessageContext', 'url' => '/api/{apiVersion}/chat/{token}/{messageId}/context', 'verb' => 'GET', 'requirements' => $requirementsWithMessageId],
|
||||
/** @see \OCA\Talk\Controller\ChatController::setReminder() */
|
||||
['name' => 'Chat#setReminder', 'url' => '/api/{apiVersion}/chat/{token}/{messageId}/reminder', 'verb' => 'POST', 'requirements' => $requirementsWithMessageId],
|
||||
/** @see \OCA\Talk\Controller\ChatController::getReminder() */
|
||||
['name' => 'Chat#getReminder', 'url' => '/api/{apiVersion}/chat/{token}/{messageId}/reminder', 'verb' => 'GET', 'requirements' => $requirementsWithMessageId],
|
||||
/** @see \OCA\Talk\Controller\ChatController::deleteReminder() */
|
||||
['name' => 'Chat#deleteReminder', 'url' => '/api/{apiVersion}/chat/{token}/{messageId}/reminder', 'verb' => 'DELETE', 'requirements' => $requirementsWithMessageId],
|
||||
/** @see \OCA\Talk\Controller\ChatController::getUpcomingReminders() */
|
||||
['name' => 'Chat#getUpcomingReminders', 'url' => '/api/{apiVersion}/chat/upcoming-reminders', 'verb' => 'GET', 'requirements' => $requirementsVersionOnly],
|
||||
/** @see \OCA\Talk\Controller\ChatController::setReadMarker() */
|
||||
['name' => 'Chat#setReadMarker', 'url' => '/api/{apiVersion}/chat/{token}/read', 'verb' => 'POST', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::markUnread() */
|
||||
['name' => 'Chat#markUnread', 'url' => '/api/{apiVersion}/chat/{token}/read', 'verb' => 'DELETE', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::mentions() */
|
||||
['name' => 'Chat#mentions', 'url' => '/api/{apiVersion}/chat/{token}/mentions', 'verb' => 'GET', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::shareObjectToChat() */
|
||||
['name' => 'Chat#shareObjectToChat', 'url' => '/api/{apiVersion}/chat/{token}/share', 'verb' => 'POST', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::getObjectsSharedInRoomOverview() */
|
||||
['name' => 'Chat#getObjectsSharedInRoomOverview', 'url' => '/api/{apiVersion}/chat/{token}/share/overview', 'verb' => 'GET', 'requirements' => $requirements],
|
||||
/** @see \OCA\Talk\Controller\ChatController::getObjectsSharedInRoom() */
|
||||
['name' => 'Chat#getObjectsSharedInRoom', 'url' => '/api/{apiVersion}/chat/{token}/share', 'verb' => 'GET', 'requirements' => $requirements],
|
||||
],
|
||||
];
|
||||
|
|
@ -52,6 +52,7 @@ use OCA\Talk\Share\Helper\Preloader;
|
|||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\Attribute\ApiRoute;
|
||||
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
|
||||
use OCP\AppFramework\Http\Attribute\PublicPage;
|
||||
use OCP\AppFramework\Http\Attribute\RequestHeader;
|
||||
|
|
@ -220,6 +221,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequirePermission(permission: RequirePermission::CHAT)]
|
||||
#[RequireReadWriteConversation]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function sendMessage(string $message, string $actorDisplayName = '', string $referenceId = '', int $replyTo = 0, bool $silent = false): DataResponse {
|
||||
if ($this->room->isFederatedConversation()) {
|
||||
/** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */
|
||||
|
|
@ -292,6 +297,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequireParticipant]
|
||||
#[RequirePermission(permission: RequirePermission::CHAT)]
|
||||
#[RequireReadWriteConversation]
|
||||
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/share', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function shareObjectToChat(string $objectType, string $objectId, string $metaData = '', string $actorDisplayName = '', string $referenceId = ''): DataResponse {
|
||||
[$actorType, $actorId] = $this->getActorInfo($actorDisplayName);
|
||||
if (!$actorId) {
|
||||
|
|
@ -399,6 +408,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequireModeratorOrNoLobby]
|
||||
#[RequireParticipant]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function receiveMessages(int $lookIntoFuture,
|
||||
int $limit = 100,
|
||||
int $lastKnownMessageId = 0,
|
||||
|
|
@ -498,6 +511,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[PublicPage]
|
||||
#[RequireModeratorOrNoLobby]
|
||||
#[RequireParticipant]
|
||||
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/summarize', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function summarizeChat(
|
||||
int $fromMessageId,
|
||||
): DataResponse {
|
||||
|
|
@ -760,6 +777,11 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequireModeratorOrNoLobby]
|
||||
#[RequireParticipant]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/{messageId}/context', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
'messageId' => '[0-9]+',
|
||||
])]
|
||||
public function getMessageContext(
|
||||
int $messageId,
|
||||
int $limit = 50): DataResponse {
|
||||
|
|
@ -851,6 +873,11 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequirePermission(permission: RequirePermission::CHAT)]
|
||||
#[RequireReadWriteConversation]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/chat/{token}/{messageId}', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
'messageId' => '[0-9]+',
|
||||
])]
|
||||
public function deleteMessage(int $messageId): DataResponse {
|
||||
if ($this->room->isFederatedConversation()) {
|
||||
/** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */
|
||||
|
|
@ -944,6 +971,11 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequirePermission(permission: RequirePermission::CHAT)]
|
||||
#[RequireReadWriteConversation]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'PUT', url: '/api/{apiVersion}/chat/{token}/{messageId}', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
'messageId' => '[0-9]+',
|
||||
])]
|
||||
public function editMessage(int $messageId, string $message): DataResponse {
|
||||
if ($this->room->isFederatedConversation()) {
|
||||
/** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */
|
||||
|
|
@ -1051,6 +1083,11 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequireLoggedInParticipant]
|
||||
#[UserRateLimit(limit: 60, period: 3600)]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/{messageId}/reminder', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
'messageId' => '[0-9]+',
|
||||
])]
|
||||
public function setReminder(int $messageId, int $timestamp): DataResponse {
|
||||
try {
|
||||
// FIXME fail 400 when reminder is after expiration
|
||||
|
|
@ -1086,6 +1123,11 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequireModeratorOrNoLobby]
|
||||
#[RequireLoggedInParticipant]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/{messageId}/reminder', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
'messageId' => '[0-9]+',
|
||||
])]
|
||||
public function getReminder(int $messageId): DataResponse {
|
||||
try {
|
||||
$this->validateMessageExists($messageId);
|
||||
|
|
@ -1120,6 +1162,11 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequireModeratorOrNoLobby]
|
||||
#[RequireLoggedInParticipant]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/chat/{token}/{messageId}/reminder', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
'messageId' => '[0-9]+',
|
||||
])]
|
||||
public function deleteReminder(int $messageId): DataResponse {
|
||||
try {
|
||||
$this->validateMessageExists($messageId);
|
||||
|
|
@ -1146,6 +1193,9 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
* 200: Reminders returned
|
||||
*/
|
||||
#[NoAdminRequired]
|
||||
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/upcoming-reminders', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
])]
|
||||
public function getUpcomingReminders(): DataResponse {
|
||||
if ($this->userId === null) {
|
||||
return new DataResponse([], Http::STATUS_OK);
|
||||
|
|
@ -1259,6 +1309,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[NoAdminRequired]
|
||||
#[RequireModeratorParticipant]
|
||||
#[RequireReadWriteConversation]
|
||||
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/chat/{token}', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function clearHistory(): DataResponse {
|
||||
$attendee = $this->participant->getAttendee();
|
||||
if (!$this->participant->hasModeratorPermissions(false)) {
|
||||
|
|
@ -1307,6 +1361,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[PublicPage]
|
||||
#[RequireAuthenticatedParticipant]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/read', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function setReadMarker(?int $lastReadMessage = null): DataResponse {
|
||||
$setToMessage = $lastReadMessage ?? $this->room->getLastMessageId();
|
||||
if ($setToMessage === 0) {
|
||||
|
|
@ -1357,6 +1415,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[PublicPage]
|
||||
#[RequireAuthenticatedParticipant]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/chat/{token}/read', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function markUnread(): DataResponse {
|
||||
if ($this->room->isFederatedConversation()) {
|
||||
/** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */
|
||||
|
|
@ -1416,6 +1478,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[PublicPage]
|
||||
#[RequireModeratorOrNoLobby]
|
||||
#[RequireParticipant]
|
||||
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/share/overview', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function getObjectsSharedInRoomOverview(int $limit = 7): DataResponse {
|
||||
$limit = min(20, $limit);
|
||||
|
||||
|
|
@ -1469,6 +1535,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[PublicPage]
|
||||
#[RequireModeratorOrNoLobby]
|
||||
#[RequireParticipant]
|
||||
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/share', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function getObjectsSharedInRoom(string $objectType, int $lastKnownMessageId = 0, int $limit = 100): DataResponse {
|
||||
$offset = max(0, $lastKnownMessageId);
|
||||
$limit = min(200, $limit);
|
||||
|
|
@ -1534,6 +1604,10 @@ class ChatController extends AEnvironmentAwareOCSController {
|
|||
#[RequirePermission(permission: RequirePermission::CHAT)]
|
||||
#[RequireReadWriteConversation]
|
||||
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
|
||||
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/mentions', requirements: [
|
||||
'apiVersion' => '(v1)',
|
||||
'token' => '[a-z0-9]{4,30}',
|
||||
])]
|
||||
public function mentions(string $search, int $limit = 20, bool $includeStatus = false): DataResponse {
|
||||
if ($this->room->isFederatedConversation()) {
|
||||
/** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue