. */ define('ROOT_DIR', '../../'); require_once(ROOT_DIR . 'lib/WebService/namespace.php'); require_once(ROOT_DIR . 'lib/WebService/Slim/namespace.php'); require_once(ROOT_DIR . 'WebServices/AuthenticationWebService.php'); require_once(ROOT_DIR . 'WebServices/ReservationsWebService.php'); require_once(ROOT_DIR . 'WebServices/ReservationWriteWebService.php'); require_once(ROOT_DIR . 'WebServices/ResourcesWebService.php'); require_once(ROOT_DIR . 'WebServices/ResourcesWriteWebService.php'); require_once(ROOT_DIR . 'WebServices/UsersWebService.php'); require_once(ROOT_DIR . 'WebServices/UsersWriteWebService.php'); require_once(ROOT_DIR . 'WebServices/SchedulesWebService.php'); require_once(ROOT_DIR . 'WebServices/AttributesWebService.php'); require_once(ROOT_DIR . 'WebServices/AttributesWriteWebService.php'); require_once(ROOT_DIR . 'WebServices/GroupsWebService.php'); require_once(ROOT_DIR . 'WebServices/GroupsWriteWebService.php'); require_once(ROOT_DIR . 'WebServices/AccessoriesWebService.php'); require_once(ROOT_DIR . 'WebServices/AccountWebService.php'); require_once(ROOT_DIR . 'Web/Services/Help/ApiHelpPage.php'); if (!Configuration::Instance()->GetSectionKey(ConfigSection::API, ConfigKeys::API_ENABLED, new BooleanConverter())) { die("Booked Scheduler API has been configured as disabled.

Set \$conf['settings']['api']['enabled'] = 'true' to enable."); } \Slim\Slim::registerAutoloader(); $app = new \Slim\Slim(); $server = new SlimServer($app); $registry = new SlimWebServiceRegistry($app); RegisterHelp($registry, $app); RegisterAuthentication($server, $registry); RegisterReservations($server, $registry); RegisterResources($server, $registry); RegisterUsers($server, $registry); RegisterSchedules($server, $registry); RegisterAttributes($server, $registry); RegisterGroups($server, $registry); RegisterAccessories($server, $registry); RegisterAccounts($server, $registry); $app->hook('slim.before.dispatch', function () use ($app, $server, $registry) { $routeName = $app->router()->getCurrentRoute()->getName(); if ($registry->IsSecure($routeName)) { $security = new WebServiceSecurity(new UserSessionRepository()); $wasHandled = $security->HandleSecureRequest($server, $registry->IsLimitedToAdmin($routeName)); if (!$wasHandled) { $app->halt(RestResponse::UNAUTHORIZED_CODE, 'You must be authenticated in order to access this service.
' . $server->GetFullServiceUrl(WebServices::Login)); } } }); $app->error(function (\Exception $e) use ($app) { require_once(ROOT_DIR . 'lib/Common/Logging/Log.php'); Log::Error('Slim Exception. %s', $e); $app->response()->header('Content-Type', 'application/json'); $app->response()->status(RestResponse::SERVER_ERROR); $app->response()->write('Exception was logged.'); }); $app->run(); function RegisterHelp(SlimWebServiceRegistry $registry, \Slim\Slim $app) { $app->get('/', function () use ($registry, $app) { // Print API documentation ApiHelpPage::Render($registry, $app); })->name("Default"); $app->get('/Help', function () use ($registry, $app) { // Print API documentation ApiHelpPage::Render($registry, $app); })->name("Help"); } function RegisterAuthentication(SlimServer $server, SlimWebServiceRegistry $registry) { $webService = new AuthenticationWebService($server, new WebServiceAuthentication(PluginManager::Instance()->LoadAuthentication(), new UserSessionRepository())); $category = new SlimWebServiceRegistryCategory('Authentication'); $category->AddPost('SignOut/', array($webService, 'SignOut'), WebServices::Logout); $category->AddPost('Authenticate/', array($webService, 'Authenticate'), WebServices::Login); $registry->AddCategory($category); } function RegisterReservations(SlimServer $server, SlimWebServiceRegistry $registry) { $readService = new ReservationsWebService($server, new ReservationViewRepository(), new PrivacyFilter(new ReservationAuthorization(PluginManager::Instance()->LoadAuthorization())), new AttributeService(new AttributeRepository())); $writeService = new ReservationWriteWebService($server, new ReservationSaveController(new ReservationPresenterFactory())); $category = new SlimWebServiceRegistryCategory('Reservations'); $category->AddSecurePost('/', array($writeService, 'Create'), WebServices::CreateReservation); $category->AddSecureGet('/', array($readService, 'GetReservations'), WebServices::AllReservations); $category->AddSecureGet('/:referenceNumber', array($readService, 'GetReservation'), WebServices::GetReservation); $category->AddSecurePost('/:referenceNumber', array($writeService, 'Update'), WebServices::UpdateReservation); $category->AddSecurePost('/:referenceNumber/Approval', array($writeService, 'Approve'), WebServices::ApproveReservation); $category->AddSecurePost('/:referenceNumber/CheckIn', array($writeService, 'Checkin'), WebServices::CheckinReservation); $category->AddSecurePost('/:referenceNumber/CheckOut', array($writeService, 'Checkout'), WebServices::CheckoutReservation); $category->AddSecureDelete('/:referenceNumber', array($writeService, 'Delete'), WebServices::DeleteReservation); $registry->AddCategory($category); } function RegisterResources(SlimServer $server, SlimWebServiceRegistry $registry) { $resourceRepository = new ResourceRepository(); $attributeService = new AttributeService(new AttributeRepository()); $webService = new ResourcesWebService($server, $resourceRepository, $attributeService, new ReservationViewRepository()); $writeWebService = new ResourcesWriteWebService($server, new ResourceSaveController($resourceRepository, new ResourceRequestValidator($attributeService))); $category = new SlimWebServiceRegistryCategory('Resources'); $category->AddGet('/Status', array($webService, 'GetStatuses'), WebServices::GetStatuses); $category->AddSecureGet('/', array($webService, 'GetAll'), WebServices::AllResources); $category->AddSecureGet('/Status/Reasons', array($webService, 'GetStatusReasons'), WebServices::GetStatusReasons); $category->AddSecureGet('/Availability', array($webService, 'GetAvailability'), WebServices::AllAvailability); $category->AddSecureGet('/Groups', array($webService, 'GetGroups'), WebServices::GetResourceGroups); $category->AddSecureGet('/:resourceId', array($webService, 'GetResource'), WebServices::GetResource); $category->AddSecureGet('/:resourceId/Availability', array($webService, 'GetAvailability'), WebServices::GetResourceAvailability); $category->AddAdminPost('/', array($writeWebService, 'Create'), WebServices::CreateResource); $category->AddAdminPost('/:resourceId', array($writeWebService, 'Update'), WebServices::UpdateResource); $category->AddAdminDelete('/:resourceId', array($writeWebService, 'Delete'), WebServices::DeleteResource); $registry->AddCategory($category); } function RegisterAccessories(SlimServer $server, SlimWebServiceRegistry $registry) { $webService = new AccessoriesWebService($server, new ResourceRepository(), new AccessoryRepository()); $category = new SlimWebServiceRegistryCategory('Accessories'); $category->AddSecureGet('/', array($webService, 'GetAll'), WebServices::AllAccessories); $category->AddSecureGet('/:accessoryId', array($webService, 'GetAccessory'), WebServices::GetAccessory); $registry->AddCategory($category); } function RegisterUsers(SlimServer $server, SlimWebServiceRegistry $registry) { $attributeService = new AttributeService(new AttributeRepository()); $webService = new UsersWebService($server, new UserRepositoryFactory(), $attributeService); $writeWebService = new UsersWriteWebService($server, new UserSaveController(new ManageUsersServiceFactory(), new UserRequestValidator($attributeService, new UserRepository()))); $category = new SlimWebServiceRegistryCategory('Users'); $category->AddSecureGet('/', array($webService, 'GetUsers'), WebServices::AllUsers); $category->AddSecureGet('/:userId', array($webService, 'GetUser'), WebServices::GetUser); $category->AddAdminPost('/', array($writeWebService, 'Create'), WebServices::CreateUser); $category->AddAdminPost('/:userId', array($writeWebService, 'Update'), WebServices::UpdateUser); $category->AddAdminPost('/:userId/Password', array($writeWebService, 'UpdatePassword'), WebServices::UpdatePassword); $category->AddAdminDelete('/:userId', array($writeWebService, 'Delete'), WebServices::DeleteUser); $registry->AddCategory($category); } function RegisterSchedules(SlimServer $server, SlimWebServiceRegistry $registry) { $webService = new SchedulesWebService($server, new ScheduleRepository(), new PrivacyFilter(new ReservationAuthorization(PluginManager::Instance()->LoadAuthorization()))); $category = new SlimWebServiceRegistryCategory('Schedules'); $category->AddSecureGet('/', array($webService, 'GetSchedules'), WebServices::AllSchedules); $category->AddSecureGet('/:scheduleId', array($webService, 'GetSchedule'), WebServices::GetSchedule); $category->AddSecureGet('/:scheduleId/Slots', array($webService, 'GetSlots'), WebServices::GetScheduleSlots); $registry->AddCategory($category); } function RegisterAttributes(SlimServer $server, SlimWebServiceRegistry $registry) { $webService = new AttributesWebService($server, new AttributeService(new AttributeRepository())); $writeWebService = new AttributesWriteWebService($server, new AttributeSaveController(new AttributeRepository())); $category = new SlimWebServiceRegistryCategory('Attributes'); $category->AddSecureGet('Category/:categoryId', array($webService, 'GetAttributes'), WebServices::AllCustomAttributes); $category->AddSecureGet('/:attributeId', array($webService, 'GetAttribute'), WebServices::GetCustomAttribute); $category->AddAdminPost('/', array($writeWebService, 'Create'), WebServices::CreateCustomAttribute); $category->AddAdminPost('/:attributeId', array($writeWebService, 'Update'), WebServices::UpdateCustomAttribute); $category->AddAdminDelete('/:attributeId', array($writeWebService, 'Delete'), WebServices::DeleteCustomAttribute); $registry->AddCategory($category); } function RegisterGroups(SlimServer $server, SlimWebServiceRegistry $registry) { $groupRepository = new GroupRepository(); $webService = new GroupsWebService($server, $groupRepository, $groupRepository); $writeWebService = new GroupsWriteWebService($server, new GroupSaveController($groupRepository, new ResourceRepository(), new ScheduleRepository())); $category = new SlimWebServiceRegistryCategory('Groups'); $category->AddSecureGet('/', array($webService, 'GetGroups'), WebServices::AllGroups); $category->AddSecureGet('/:groupId', array($webService, 'GetGroup'), WebServices::GetGroup); $category->AddAdminPost('/', array($writeWebService, 'Create'), WebServices::CreateGroup); $category->AddAdminPost('/:groupId', array($writeWebService, 'Update'), WebServices::UpdateGroup); $category->AddAdminPost('/:groupId/Roles', array($writeWebService, 'Roles'), WebServices::UpdateGroupRoles); $category->AddAdminPost('/:groupId/Permissions', array($writeWebService, 'Permissions'), WebServices::UpdateGroupPermissions); $category->AddAdminPost('/:groupId/Users', array($writeWebService, 'Users'), WebServices::UpdateGroupUsers); $category->AddAdminDelete('/:groupId', array($writeWebService, 'Delete'), WebServices::DeleteGroup); $registry->AddCategory($category); } function RegisterAccounts(SlimServer $server, SlimWebServiceRegistry $registry) { $userRepository = new UserRepository(); $attributeService = new AttributeService(new AttributeRepository()); $passwordEncryption = new PasswordEncryption(); $registration = new Registration($passwordEncryption, $userRepository, new RegistrationNotificationStrategy(), new RegistrationPermissionStrategy(), new GroupRepository()); $controller = new AccountController($registration, $userRepository, new AccountRequestValidator($attributeService, $userRepository), $passwordEncryption, $attributeService); $webService = new AccountWebService($server, $controller); $category = new SlimWebServiceRegistryCategory('Accounts'); $category->AddPost('/', array($webService, 'Create'), WebServices::CreateAccount); $category->AddSecurePost('/:userId', array($webService, 'Update'), WebServices::UpdateAccount); $category->AddSecurePost('/:userId/Password', array($webService, 'UpdatePassword'), WebServices::UpdateAccountPassword); $category->AddSecureGet('/:userId', array($webService, 'GetAccount'), WebServices::GetAccount); $registry->AddCategory($category); }