shell bypass 403
<?php
/**
* BigBlueButton open source conferencing system - https://www.bigbluebutton.org/.
*
* Copyright (c) 2016-2018 BigBlueButton Inc. and by respective authors (see below).
*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 3.0 of the License, or (at your option) any later
* version.
*
* BigBlueButton 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
*/
namespace BigBlueButton;
use BigBlueButton\Parameters\CreateMeetingParameters as CreateMeetingParameters;
use BigBlueButton\Parameters\EndMeetingParameters;
use BigBlueButton\Parameters\JoinMeetingParameters as JoinMeetingParameters;
use BigBlueButton\Parameters\SetConfigXMLParameters as SetConfigXMLParameters;
use BigBlueButton\Parameters\UpdateRecordingsParameters as UpdateRecordingsParameters;
use BigBlueButton\Responses\CreateMeetingResponse;
use BigBlueButton\Responses\UpdateRecordingsResponse;
use Faker\Factory as Faker;
use Faker\Generator as Generator;
/**
* Class TestCase
* @package BigBlueButton
*/
class TestCase extends \PHPUnit\Framework\TestCase
{
/**
* @var Generator
*/
protected $faker;
/**
* {@inheritdoc}
*/
public function setUp() : void
{
parent::setUp();
$this->faker = Faker::create();
}
/**
* @param $bbb BigBlueButton
* @return CreateMeetingResponse
*/
protected function createRealMeeting($bbb)
{
$createMeetingParams = $this->generateCreateParams();
$createMeetingMock = $this->getCreateMock($createMeetingParams);
return $bbb->createMeeting($createMeetingMock);
}
/**
* @return array
*/
protected function generateCreateParams()
{
return [
'meetingName' => $this->faker->name,
'meetingId' => $this->faker->uuid,
'attendeePassword' => $this->faker->password,
'moderatorPassword' => $this->faker->password,
'autoStartRecording' => $this->faker->boolean(50),
'dialNumber' => $this->faker->phoneNumber,
'voiceBridge' => $this->faker->randomNumber(5),
'webVoice' => $this->faker->word,
'logoutUrl' => $this->faker->url,
'maxParticipants' => $this->faker->numberBetween(2, 100),
'record' => $this->faker->boolean(50),
'duration' => $this->faker->numberBetween(0, 6000),
'welcomeMessage' => $this->faker->sentence,
'allowStartStopRecording' => $this->faker->boolean(50),
'moderatorOnlyMessage' => $this->faker->sentence,
'webcamsOnlyForModerator' => $this->faker->boolean(50),
'logo' => $this->faker->imageUrl(330, 70),
'copyright' => $this->faker->text,
'muteOnStart' => $this->faker->boolean(50),
'lockSettingsDisableCam' => $this->faker->boolean(50),
'lockSettingsDisableMic' => $this->faker->boolean(50),
'lockSettingsDisablePrivateChat' => $this->faker->boolean(50),
'lockSettingsDisablePublicChat' => $this->faker->boolean(50),
'lockSettingsDisableNote' => $this->faker->boolean(50),
'lockSettingsHideUserList' => $this->faker->boolean(50),
'lockSettingsLockedLayout' => $this->faker->boolean(50),
'lockSettingsLockOnJoin' => $this->faker->boolean(50),
'lockSettingsLockOnJoinConfigurable' => $this->faker->boolean(50),
'allowModsToUnmuteUsers' => $this->faker->boolean(50),
'meta_presenter' => $this->faker->name,
'meta_endCallbackUrl' => $this->faker->url,
'meta_bbb-recording-ready-url' => $this->faker->url,
];
}
/**
* @param $createParams
* @return array
*/
protected function generateBreakoutCreateParams($createParams)
{
return array_merge($createParams, [
'isBreakout' => true,
'parentMeetingId' => $this->faker->uuid,
'sequence' => $this->faker->numberBetween(1, 8),
'freeJoin' => $this->faker->boolean(50)
]);
}
/**
* @param $params array
*
* @return CreateMeetingParameters
*/
protected function getCreateMock($params)
{
$createMeetingParams = new CreateMeetingParameters($params['meetingId'], $params['meetingName']);
return $createMeetingParams
->setAttendeePassword($params['attendeePassword'])
->setModeratorPassword($params['moderatorPassword'])
->setDialNumber($params['dialNumber'])
->setVoiceBridge($params['voiceBridge'])
->setWebVoice($params['webVoice'])
->setLogoutUrl($params['logoutUrl'])
->setMaxParticipants($params['maxParticipants'])
->setRecord($params['record'])
->setDuration($params['duration'])
->setWelcomeMessage($params['welcomeMessage'])
->setAutoStartRecording($params['autoStartRecording'])
->setAllowStartStopRecording($params['allowStartStopRecording'])
->setModeratorOnlyMessage($params['moderatorOnlyMessage'])
->setWebcamsOnlyForModerator($params['webcamsOnlyForModerator'])
->setLogo($params['logo'])
->setCopyright($params['copyright'])
->setEndCallbackUrl($params['meta_endCallbackUrl'])
->setMuteOnStart($params['muteOnStart'])
->setLockSettingsDisableCam($params['lockSettingsDisableCam'])
->setLockSettingsDisableMic($params['lockSettingsDisableMic'])
->setLockSettingsDisablePrivateChat($params['lockSettingsDisablePrivateChat'])
->setLockSettingsDisablePublicChat($params['lockSettingsDisablePublicChat'])
->setLockSettingsDisableNote($params['lockSettingsDisableNote'])
->setLockSettingsHideUserList($params['lockSettingsHideUserList'])
->setLockSettingsLockedLayout($params['lockSettingsLockedLayout'])
->setLockSettingsLockOnJoin($params['lockSettingsLockOnJoin'])
->setLockSettingsLockOnJoinConfigurable($params['lockSettingsLockOnJoinConfigurable'])
->addMeta('presenter', $params['meta_presenter'])
->addMeta('bbb-recording-ready-url', $params['meta_bbb-recording-ready-url']);
}
/**
* @param $params
*
* @return CreateMeetingParameters
*/
protected function getBreakoutCreateMock($params)
{
$createMeetingParams = $this->getCreateMock($params);
return $createMeetingParams->setBreakout($params['isBreakout'])->setParentMeetingId($params['parentMeetingId'])->
setSequence($params['sequence'])->setFreeJoin($params['freeJoin']);
}
/**
* @return array
*/
protected function generateJoinMeetingParams()
{
return ['meetingId' => $this->faker->uuid,
'userName' => $this->faker->name,
'password' => $this->faker->password,
'userId' => $this->faker->numberBetween(1, 1000),
'webVoiceConf' => $this->faker->word,
'creationTime' => $this->faker->unixTime,
'userdata_countrycode' => $this->faker->countryCode,
'userdata_email' => $this->faker->email,
'userdata_commercial' => false
];
}
/**
* @param $params array
*
* @return JoinMeetingParameters
*/
protected function getJoinMeetingMock($params)
{
$joinMeetingParams = new JoinMeetingParameters($params['meetingId'], $params['userName'], $params['password']);
return $joinMeetingParams->setUserId($params['userId'])->setWebVoiceConf($params['webVoiceConf'])
->setCreationTime($params['creationTime'])->addUserData('countrycode', $params['userdata_countrycode'])
->addUserData('email', $params['userdata_email'])->addUserData('commercial', $params['userdata_commercial']);
}
/**
* @return array
*/
protected function generateEndMeetingParams()
{
return ['meetingId' => $this->faker->uuid,
'password' => $this->faker->password];
}
/**
* @param $params array
*
* @return EndMeetingParameters
*/
protected function getEndMeetingMock($params)
{
return new EndMeetingParameters($params['meetingId'], $params['password']);
}
/**
* @param $bbb BigBlueButton
* @return UpdateRecordingsResponse
*/
protected function updateRecordings($bbb)
{
$updateRecordingsParams = $this->generateUpdateRecordingsParams();
$updateRecordingsMock = $this->getUpdateRecordingsParamsMock($updateRecordingsParams);
return $bbb->updateRecordings($updateRecordingsMock);
}
/**
* @return array
*/
protected function generateUpdateRecordingsParams()
{
return [
'recordingId' => $this->faker->uuid,
'meta_presenter' => $this->faker->name,
];
}
/**
* @param $params array
*
* @return UpdateRecordingsParameters
*/
protected function getUpdateRecordingsParamsMock($params)
{
$updateRecordingsParams = new UpdateRecordingsParameters($params['recordingId']);
return $updateRecordingsParams->addMeta('presenter', $params['meta_presenter']);
}
/**
* @return array
*/
protected function generateSetConfigXMLParams()
{
return [
'meetingId' => $this->faker->uuid,
];
}
/**
* @param $params array
*
* @return SetConfigXMLParameters
*/
protected function getSetConfigXMLMock($params)
{
return new SetConfigXMLParameters($params['meetingId']);
}
// Load fixtures
protected function loadXmlFile($path)
{
return simplexml_load_string(file_get_contents(($path)));
}
protected function minifyString($string)
{
return str_replace(["\r\n", "\r", "\n", "\t", ' '], '', $string);
}
// Additional assertions
public function assertIsInteger($actual, $message = '')
{
if (empty($message)) {
$message = 'Got a ' . gettype($actual) . ' instead of an integer.';
}
$this->assertTrue(is_integer($actual), $message);
}
public function assertIsDouble($actual, $message = '')
{
if (empty($message)) {
$message = 'Got a ' . gettype($actual) . ' instead of a double.';
}
$this->assertTrue(is_double($actual), $message);
}
public function assertIsBoolean($actual, $message = '')
{
if (empty($message)) {
$message = 'Got a ' . gettype($actual) . ' instead of a boolean.';
}
$this->assertTrue(is_bool($actual), $message);
}
public function assertEachGetterValueIsString($obj, $getters)
{
foreach ($getters as $getterName) {
$this->assertIsString($obj->$getterName(), 'Got a ' . gettype($obj->$getterName()) . ' instead of a string for property -> ' . $getterName);
}
}
public function assertEachGetterValueIsInteger($obj, $getters)
{
foreach ($getters as $getterName) {
$this->assertIsInteger($obj->$getterName(), 'Got a ' . gettype($obj->$getterName()) . ' instead of an integer for property -> ' . $getterName);
}
}
public function assertEachGetterValueIsDouble($obj, $getters)
{
foreach ($getters as $getterName) {
$this->assertIsDouble($obj->$getterName(), 'Got a ' . gettype($obj->$getterName()) . ' instead of a double for property -> ' . $getterName);
}
}
public function assertEachGetterValueIsBoolean($obj, $getters)
{
foreach ($getters as $getterName) {
$this->assertIsBoolean($obj->$getterName(), 'Got a ' . gettype($obj->$getterName()) . ' instead of a boolean for property -> ' . $getterName);
}
}
}