27 changed files with 578 additions and 325 deletions
			
			
		| @ -1 +1 @@ | |||||||
| Subproject commit 7190056dd64da2f2c4b2fd3fd8d40d26cb768937 | Subproject commit 65bb0849179cf93c161387a730f4abc79a782f77 | ||||||
| @ -1 +1 @@ | |||||||
| Subproject commit 3aabb381b9e7ffc5b13f951b8fb89494fe903a2c | Subproject commit 20ea9a25353129b56d46951fe7d23939665ab2b2 | ||||||
| @ -1,42 +0,0 @@ | |||||||
| <?php |  | ||||||
| 
 |  | ||||||
| declare(strict_types=1); |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @copyright Copyright (c) 2020, Georg Ehrke |  | ||||||
|  * |  | ||||||
|  * @author Georg Ehrke <oc.list@georgehrke.com> |  | ||||||
|  * |  | ||||||
|  * @license GNU AGPL version 3 or any later version |  | ||||||
|  * |  | ||||||
|  * This program is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU Affero General Public License as |  | ||||||
|  * published by the Free Software Foundation, either version 3 of the |  | ||||||
|  * License, or (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
|  * GNU Affero General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU Affero General Public License |  | ||||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| return [ |  | ||||||
|     'ocs' => [ |  | ||||||
|         // Routes for querying statuses |  | ||||||
|         ['name' => 'Statuses#findAll', 'url' => '/api/v1/statuses', 'verb' => 'GET'], |  | ||||||
|         ['name' => 'Statuses#find', 'url' => '/api/v1/statuses/{userId}', 'verb' => 'GET'], |  | ||||||
|         // Routes for manipulating your own status |  | ||||||
|         ['name' => 'UserStatus#getStatus', 'url' => '/api/v1/user_status', 'verb' => 'GET'], |  | ||||||
|         ['name' => 'UserStatus#setStatus', 'url' => '/api/v1/user_status/status', 'verb' => 'PUT'], |  | ||||||
|         ['name' => 'UserStatus#setPredefinedMessage', 'url' => '/api/v1/user_status/message/predefined', 'verb' => 'PUT'], |  | ||||||
|         ['name' => 'UserStatus#setCustomMessage', 'url' => '/api/v1/user_status/message/custom', 'verb' => 'PUT'], |  | ||||||
|         ['name' => 'UserStatus#clearMessage', 'url' => '/api/v1/user_status/message', 'verb' => 'DELETE'], |  | ||||||
|         // Routes for listing default routes |  | ||||||
|         ['name' => 'PredefinedStatus#findAll', 'url' => '/api/v1/predefined_statuses/', 'verb' => 'GET'], |  | ||||||
|         // Route for doing heartbeats |  | ||||||
|         ['name' => 'Heartbeat#heartbeat', 'url' => '/api/v1/heartbeat', 'verb' => 'PUT'], |  | ||||||
|     ], |  | ||||||
| ]; |  | ||||||
| @ -1,114 +0,0 @@ | |||||||
| <?php |  | ||||||
| 
 |  | ||||||
| declare(strict_types=1); |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @copyright Copyright (c) 2020, Georg Ehrke |  | ||||||
|  * |  | ||||||
|  * @author Georg Ehrke <oc.list@georgehrke.com> |  | ||||||
|  * |  | ||||||
|  * @license GNU AGPL version 3 or any later version |  | ||||||
|  * |  | ||||||
|  * This program is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU Affero General Public License as |  | ||||||
|  * published by the Free Software Foundation, either version 3 of the |  | ||||||
|  * License, or (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
|  * GNU Affero General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU Affero General Public License |  | ||||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| namespace OCA\UserStatus\Controller; |  | ||||||
| 
 |  | ||||||
| use OCA\UserStatus\Db\UserStatus; |  | ||||||
| use OCA\UserStatus\Service\StatusService; |  | ||||||
| use OCP\AppFramework\Controller; |  | ||||||
| use OCP\AppFramework\Db\DoesNotExistException; |  | ||||||
| use OCP\AppFramework\Http; |  | ||||||
| use OCP\AppFramework\Http\JSONResponse; |  | ||||||
| use OCP\AppFramework\OCSController; |  | ||||||
| use OCP\AppFramework\Utility\ITimeFactory; |  | ||||||
| use OCP\EventDispatcher\IEventDispatcher; |  | ||||||
| use OCP\IRequest; |  | ||||||
| use OCP\IUserSession; |  | ||||||
| use OCP\User\Events\UserLiveStatusEvent; |  | ||||||
| use OCP\UserStatus\IUserStatus; |  | ||||||
| 
 |  | ||||||
| class HeartbeatController extends OCSController { |  | ||||||
| 
 |  | ||||||
|     /** @var IEventDispatcher */ |  | ||||||
|     private $eventDispatcher; |  | ||||||
| 
 |  | ||||||
|     /** @var IUserSession */ |  | ||||||
|     private $userSession; |  | ||||||
| 
 |  | ||||||
|     /** @var ITimeFactory */ |  | ||||||
|     private $timeFactory; |  | ||||||
| 
 |  | ||||||
|     /** @var StatusService */ |  | ||||||
|     private $service; |  | ||||||
| 
 |  | ||||||
|     public function __construct(string $appName, |  | ||||||
|                                 IRequest $request, |  | ||||||
|                                 IEventDispatcher $eventDispatcher, |  | ||||||
|                                 IUserSession $userSession, |  | ||||||
|                                 ITimeFactory $timeFactory, |  | ||||||
|                                 StatusService $service) { |  | ||||||
|         parent::__construct($appName, $request); |  | ||||||
|         $this->eventDispatcher = $eventDispatcher; |  | ||||||
|         $this->userSession = $userSession; |  | ||||||
|         $this->timeFactory = $timeFactory; |  | ||||||
|         $this->service = $service; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * @NoAdminRequired |  | ||||||
|      * |  | ||||||
|      * @param string $status |  | ||||||
|      * @return JSONResponse |  | ||||||
|      */ |  | ||||||
|     public function heartbeat(string $status): JSONResponse { |  | ||||||
|         if (!\in_array($status, [IUserStatus::ONLINE, IUserStatus::AWAY], true)) { |  | ||||||
|             return new JSONResponse([], Http::STATUS_BAD_REQUEST); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         $user = $this->userSession->getUser(); |  | ||||||
|         if ($user === null) { |  | ||||||
|             return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         $event = new UserLiveStatusEvent( |  | ||||||
|             $user, |  | ||||||
|             $status, |  | ||||||
|             $this->timeFactory->getTime() |  | ||||||
|         ); |  | ||||||
| 
 |  | ||||||
|         $this->eventDispatcher->dispatchTyped($event); |  | ||||||
| 
 |  | ||||||
|         $userStatus = $event->getUserStatus(); |  | ||||||
|         if (!$userStatus) { |  | ||||||
|             return new JSONResponse([], Http::STATUS_NO_CONTENT); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /** @psalm-suppress UndefinedInterfaceMethod */ |  | ||||||
|         return new JSONResponse($this->formatStatus($userStatus->getInternal())); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private function formatStatus(UserStatus $status): array { |  | ||||||
|         return [ |  | ||||||
|             'userId' => $status->getUserId(), |  | ||||||
|             'message' => $status->getCustomMessage(), |  | ||||||
|             'messageId' => $status->getMessageId(), |  | ||||||
|             'messageIsPredefined' => $status->getMessageId() !== null, |  | ||||||
|             'icon' => $status->getCustomIcon(), |  | ||||||
|             'clearAt' => $status->getClearAt(), |  | ||||||
|             'status' => $status->getStatus(), |  | ||||||
|             'statusIsUserDefined' => $status->getIsUserDefined(), |  | ||||||
|         ]; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
					Loading…
					
					
				
		Reference in new issue