2016-05-09 21:08:36 +01:00
|
|
|
<?php
|
2020-09-21 21:54:23 +01:00
|
|
|
// This file is part of GNU social - https://www.gnu.org/software/social
|
|
|
|
//
|
|
|
|
// GNU social 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.
|
|
|
|
//
|
|
|
|
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
|
2016-05-09 21:08:36 +01:00
|
|
|
|
2020-09-21 21:54:23 +01:00
|
|
|
defined('GNUSOCIAL') || die();
|
2016-05-09 21:08:36 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Download notice attachment
|
|
|
|
*
|
2020-09-21 21:54:23 +01:00
|
|
|
* @category Personal
|
|
|
|
* @package GNUsocial
|
|
|
|
* @author Mikael Nordfeldth <mmn@hethane.se>
|
|
|
|
* @copyright 2016 Free Software Foundation, Inc http://www.fsf.org
|
|
|
|
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or late
|
2016-05-09 21:08:36 +01:00
|
|
|
*/
|
|
|
|
class Attachment_downloadAction extends AttachmentAction
|
|
|
|
{
|
2019-10-19 01:57:36 +01:00
|
|
|
public function showPage(): void
|
2016-05-09 21:08:36 +01:00
|
|
|
{
|
[MEDIA] File downloader now in PHP, added proper name in the UI and changed the format for new attachment file names
The file downloader was changed from a simple redirect to the file to one
implemented in PHP, which should make it safer, by making it possible disallow
direct access to the file, to prevent executing of atttachments
The filename has a new format:
bin2hex("{$original_name}")."-{$filehash}"
This format should be respected. Notice the dash, which is important to distinguish it from the previous
format, which was "{$hash}.{$ext}"
This change was made to both make the experience more user friendly, by
providing a readable name for files, as opposed to it's hash. This name is taken
from the upload filename, but, clearly, as this wasn't done before, it's
impossible to have a proper name for older files, so those are displayed as
"untitled.{$ext}".
This new name is displayed in the UI, instead of the previous name.
2019-06-11 02:42:33 +01:00
|
|
|
// Disable errors, to not mess with the file contents (suppress errors in case access to this
|
|
|
|
// function is blocked, like in some shared hosts). Automatically reset at the end of the
|
|
|
|
// script execution, and we don't want to have any more errors until then, so don't reset it
|
|
|
|
@ini_set('display_errors', 0);
|
|
|
|
|
2020-09-21 21:54:23 +01:00
|
|
|
if ($this->attachment->isLocal()) {
|
2021-02-16 18:30:21 +00:00
|
|
|
try {
|
|
|
|
$this->filepath = $this->attachment->getFileOrThumbnailPath();
|
|
|
|
} catch (Exception $e) {
|
|
|
|
$this->clientError(
|
|
|
|
_m('Requested local URL for a file that is not stored locally.'),
|
|
|
|
404
|
|
|
|
);
|
|
|
|
}
|
2020-09-21 21:54:23 +01:00
|
|
|
common_send_file(
|
|
|
|
$this->filepath,
|
|
|
|
$this->mimetype,
|
|
|
|
$this->filename,
|
|
|
|
'attachment'
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
common_redirect($this->attachment->getUrl(), 303);
|
|
|
|
}
|
2016-05-09 21:08:36 +01:00
|
|
|
}
|
|
|
|
}
|