cloud_bbb/lib/Service/RoomService.php

133 lines
3.7 KiB
PHP
Raw Normal View History

2020-04-26 11:36:41 +02:00
<?php
2020-04-26 11:36:41 +02:00
namespace OCA\BigBlueButton\Service;
use Exception;
use OCA\BigBlueButton\Db\Room;
use OCA\BigBlueButton\Db\RoomMapper;
use OCA\BigBlueButton\Event\RoomCreatedEvent;
2020-09-23 12:33:09 +02:00
use OCA\BigBlueButton\Event\RoomDeletedEvent;
2020-09-23 12:33:09 +02:00
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\EventDispatcher\IEventDispatcher;
2020-04-26 11:36:41 +02:00
class RoomService {
2020-04-26 11:36:41 +02:00
/** @var RoomMapper */
private $mapper;
/** @var IEventDispatcher */
private $eventDispatcher;
public function __construct(
RoomMapper $mapper,
IEventDispatcher $eventDispatcher) {
2020-04-26 11:36:41 +02:00
$this->mapper = $mapper;
$this->eventDispatcher = $eventDispatcher;
2020-04-26 11:36:41 +02:00
}
public function findAll(string $userId, array $groupIds, array $circleIds): array {
return $this->mapper->findAll($userId, $groupIds, $circleIds);
2020-04-26 11:36:41 +02:00
}
private function handleException(Exception $e): void {
2020-04-26 11:36:41 +02:00
if ($e instanceof DoesNotExistException ||
$e instanceof MultipleObjectsReturnedException) {
throw new RoomNotFound($e->getMessage());
} else {
throw $e;
}
}
/**
* @throws RoomNotFound
*/
public function find($id): Room {
2020-04-26 11:36:41 +02:00
try {
2020-06-17 10:56:28 +02:00
return $this->mapper->find($id);
2020-04-26 11:36:41 +02:00
// in order to be able to plug in different storage backends like files
// for instance it is a good idea to turn storage related exceptions
// into service related exceptions so controllers and service users
// have to deal with only one type of exception
} catch (Exception $e) {
$this->handleException($e);
}
}
public function findByUid($uid) {
2020-04-26 11:36:41 +02:00
try {
return $this->mapper->findByUid($uid);
} catch (Exception $e) {
// $this->handleException($e);
return null;
}
}
public function create($name, $welcome, $maxParticipants, $record, $access, $userId) {
2020-04-26 11:36:41 +02:00
$room = new Room();
$room->setUid(\OC::$server->getSecureRandom()->generate(16, \OCP\Security\ISecureRandom::CHAR_HUMAN_READABLE));
$room->setName($name);
$room->setWelcome($welcome);
$room->setMaxParticipants(\max($maxParticipants, 0));
2020-04-26 11:36:41 +02:00
$room->setAttendeePassword(\OC::$server->getSecureRandom()->generate(32, \OCP\Security\ISecureRandom::CHAR_HUMAN_READABLE));
$room->setModeratorPassword(\OC::$server->getSecureRandom()->generate(32, \OCP\Security\ISecureRandom::CHAR_HUMAN_READABLE));
$room->setRecord($record);
$room->setAccess($access);
2020-04-26 11:36:41 +02:00
$room->setUserId($userId);
if ($access === Room::ACCESS_PASSWORD) {
$room->setPassword($this->humanReadableRandom(8));
}
$createdRoom = $this->mapper->insert($room);
$this->eventDispatcher->dispatch(RoomCreatedEvent::class, new RoomCreatedEvent($createdRoom));
return $createdRoom;
2020-04-26 11:36:41 +02:00
}
public function update($id, $name, $welcome, $maxParticipants, $record, $access, $everyoneIsModerator, $requireModerator) {
2020-04-26 11:36:41 +02:00
try {
2020-06-17 10:56:28 +02:00
$room = $this->mapper->find($id);
2020-04-26 11:36:41 +02:00
if ($room->access !== $access) {
$room->setPassword($access === Room::ACCESS_PASSWORD ? $this->humanReadableRandom(8) : null);
}
2020-04-26 11:36:41 +02:00
$room->setName($name);
$room->setWelcome($welcome);
$room->setMaxParticipants(\max($maxParticipants, 0));
2020-04-26 11:36:41 +02:00
$room->setRecord($record);
$room->setAccess($access);
$room->setEveryoneIsModerator($everyoneIsModerator);
$room->setRequireModerator($requireModerator);
2020-04-26 11:36:41 +02:00
return $this->mapper->update($room);
} catch (Exception $e) {
$this->handleException($e);
}
}
public function delete($id) {
2020-04-26 11:36:41 +02:00
try {
2020-06-17 10:56:28 +02:00
$room = $this->mapper->find($id);
2020-09-18 14:36:31 +02:00
2020-04-26 11:36:41 +02:00
$this->mapper->delete($room);
$this->eventDispatcher->dispatch(RoomDeletedEvent::class, new RoomDeletedEvent($room));
2020-04-26 11:36:41 +02:00
return $room;
} catch (Exception $e) {
$this->handleException($e);
}
}
private function humanReadableRandom($length) {
return \OC::$server->getSecureRandom()->generate($length, \OCP\Security\ISecureRandom::CHAR_HUMAN_READABLE);
}
2020-04-26 11:36:41 +02:00
}