19 declare(strict_types=1);
29 #[PreserveGlobalState(false)] 30 #[RunTestsInSeparateProcesses] 39 protected function setUp(): void
42 $this->dic_backup = is_object($DIC) ? clone
$DIC :
null;
45 $DIC[
'ilDB'] = $this->db_mock = $this->createMock(ilDBInterface::class);
56 $settings = $this->createMock(ilFileServicesSettings::class);
57 $settings->expects($this->once())
58 ->method(
'getWhiteListedSuffixes')
59 ->willReturn([
'pdf',
'jpg']);
62 $this->assertTrue($sanitizer->isClean(
'/lib/test.pdf'));
63 $this->assertFalse($sanitizer->isClean(
'/lib/test.xml'));
64 $this->assertEquals(
'/lib/testxml.sec', $sanitizer->sanitize(
'/lib/test.xml'));
69 $settings = $this->createMock(ilFileServicesSettings::class);
70 $settings->expects($this->once())
71 ->method(
'getBlackListedSuffixes')
72 ->willReturn([
'pdf']);
74 $settings->expects($this->once())
75 ->method(
'isByPassAllowedForCurrentUser')
78 $stream = $this->createMock(FileStream::class);
79 $meta =
new Metadata(
'filename.pdf', 42,
'application/pdf');
86 $status = $processor->process($stream, $meta);
87 $this->assertEquals(ProcessingStatus::REJECTED, $status->getCode());
92 $settings = $this->createMock(ilFileServicesSettings::class);
93 $settings->expects($this->once())
94 ->method(
'getBlackListedSuffixes')
95 ->willReturn([
'pdf']);
97 $settings->expects($this->once())
98 ->method(
'isByPassAllowedForCurrentUser')
101 $stream = $this->createMock(FileStream::class);
102 $meta =
new Metadata(
'filename.pdf', 42,
'application/pdf');
109 $status = $processor->process($stream, $meta);
110 $this->assertEquals(ProcessingStatus::OK, $status->getCode());
115 $settings = $this->createMock(ilFileServicesSettings::class);
116 $settings->expects($this->once())
117 ->method(
'getWhiteListedSuffixes')
118 ->willReturn([
'pdf',
'png',
'jpg']);
122 $sane_filename =
'bellerophon.pdf';
123 $this->assertEquals($sane_filename, $sanitizer->sanitize($sane_filename));
125 $insane_filename =
'bellerophon.docx';
126 $this->assertNotEquals($insane_filename, $sanitizer->sanitize($insane_filename));
127 $this->assertEquals(
'bellerophondocx.sec', $sanitizer->sanitize($insane_filename));
132 $settings_mock = $this->createMock(ilSetting::class);
133 $ini_mock = $this->createMock(ilIniFile::class);
137 $this->db_mock->expects($this->once())
138 ->method(
'fetchObject')
141 $this->db_mock->expects($this->once())
142 ->method(
'fetchAssoc')
145 $default_whitelist = include __DIR__ .
"/../defaults/default_whitelist.php";
149 [
'suffix_custom_expl_black',
'bl001,bl002'],
150 [
'suffix_repl_additional',
'docx,doc'],
151 [
'suffix_custom_white_list',
'wl001,wl002']
154 ->expects($this->exactly(3))
156 ->willReturnCallback(
157 function ($k) use (&$consecutive) {
158 [$expected, $return] = array_shift($consecutive);
159 $this->assertEquals($expected, $k);
165 $this->assertEquals([
'bl001',
'bl002'], $settings->getBlackListedSuffixes());
166 $this->assertEquals([
'bl001',
'bl002'], $settings->getProhibited());
167 $this->assertEquals($default_whitelist, $settings->getDefaultWhitelist());
168 $this->assertEquals([
'docx',
'doc'], $settings->getWhiteListNegative());
169 $this->assertEquals([
'wl001',
'wl002'], $settings->getWhiteListPositive());
171 $whitelist = array_merge(
172 array_diff($default_whitelist, [
'docx',
'doc']),
173 [
'wl001',
'wl002',
'']
175 $diff = array_diff($whitelist, $settings->getWhiteListedSuffixes());
177 $this->assertEquals([], $diff);
178 $this->assertEquals(0, count($diff));
185 $settings = $this->createMock(ilFileServicesSettings::class);
187 $settings->expects($this->atLeastOnce())
188 ->method(
'getBlackListedSuffixes')
189 ->willReturn([
'mp3']);
191 $settings->expects($this->atLeastOnce())
192 ->method(
'getWhiteListedSuffixes')
193 ->willReturn([
'pdf',
'png',
'mp3']);
195 $settings->expects($this->atLeastOnce())
196 ->method(
'isASCIIConvertionEnabled')
200 $this->assertEquals(
'testmp3.sec', $policy->prepareFileNameForConsumer(
'test.mp3'));
201 $this->assertEquals(
'test.png', $policy->prepareFileNameForConsumer(
'test.png'));
202 $this->assertEquals(
'test.pdf', $policy->prepareFileNameForConsumer(
'test.pdf'));
203 $this->assertEquals(
'aeaeaeaeaeaeaeaeae.pdf', $policy->prepareFileNameForConsumer(
'äääääääää.pdf'));
204 $this->assertEquals(
'oeoeoeoeoeoeoeoeoe.pdf', $policy->prepareFileNameForConsumer(
'ööööööööö.pdf'));
205 $this->assertEquals(
'ueueueueueueueueue.pdf', $policy->prepareFileNameForConsumer(
'üüüüüüüüü.pdf'));
Class ilFileServicesPolicy.
Customizing of pimple-DIC for ILIAS.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
Class ilFileServicesFilenameSanitizer.
testRenamingNonWhitelistedFile()
testBlacklistedUploadWithPermission()
testFileNamePolicyOnDownloading()
Class ilFileServicesPolicy.