108 lines
3.8 KiB
PHP
108 lines
3.8 KiB
PHP
<?php
|
|
|
|
/* --------------------------------------------------------------------
|
|
|
|
Chevereto
|
|
http://chevereto.com/
|
|
|
|
@author Rodolfo Berrios A. <http://rodolfoberrios.com/>
|
|
<inbox@rodolfoberrios.com>
|
|
|
|
Copyright (C) Rodolfo Berrios A. All rights reserved.
|
|
|
|
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
|
|
http://chevereto.com/license
|
|
|
|
--------------------------------------------------------------------- */
|
|
|
|
$route = function ($handler) {
|
|
try {
|
|
if ($handler->isRequestLevel(2)) {
|
|
return $handler->issue404();
|
|
}
|
|
$viewer = CHV\Image::getUrlViewer('%id');
|
|
$viewer = str_replace('/', '\/', $viewer);
|
|
$regex = G\str_replace_last('%id', '(.*)', $viewer);
|
|
$regex = G\str_replace_first('https:', 'https?:', $regex);
|
|
$regex = G\str_replace_first('http:', 'https?:', $regex);
|
|
if (!preg_match('#^' . $regex . '$#', $_GET['url'], $matches)) {
|
|
G\set_status_header(403);
|
|
die();
|
|
}
|
|
$id = CHV\getIdFromURLComponent($matches[1]);
|
|
if ($id == false) {
|
|
G\set_status_header(404);
|
|
die();
|
|
}
|
|
$image = CHV\Image::getSingle($id, false, true, null);
|
|
if (!$image) {
|
|
G\set_status_header(404);
|
|
die();
|
|
}
|
|
if (!$image['is_approved']) {
|
|
G\set_status_header(403);
|
|
die();
|
|
}
|
|
if (in_array($image['album']['privacy'], array('password', 'private', 'custom'))) {
|
|
G\set_status_header(401);
|
|
die();
|
|
}
|
|
if ($image['user']['is_private']) {
|
|
unset($image['user']);
|
|
$image['user'] = CHV\User::getPrivate();
|
|
}
|
|
$data = [
|
|
'version' => '1.0',
|
|
'type' => 'photo',
|
|
'provider_name' => CHV\Settings::get('website_name'),
|
|
'provider_url' => G\get_base_url(),
|
|
'title' => $image['title'],
|
|
|
|
'url' => $image['url_viewer'],
|
|
'width' => $image['width'],
|
|
'height' => $image['height'],
|
|
];
|
|
if ($image['user']) {
|
|
$data = array_merge($data, [
|
|
'author_name' => $image['user']['username'],
|
|
'author_url' => $image['user']['url'],
|
|
]);
|
|
}
|
|
$thumb = 'display_url';
|
|
$maxWidth = isset($_GET['maxwidth']) ? intval($_GET['maxwidth']) : $image['width'];
|
|
$maxHeight = isset($_GET['maxHeight']) ? intval($_GET['maxHeight']) : $image['height'];
|
|
if ($image['display_width'] > $maxWidth || $image['display_height'] > $maxHeight) {
|
|
$thumb = null;
|
|
if (CHV\getSetting('upload_thumb_width') <= $maxWidth && CHV\getSetting('upload_thumb_height') <= $maxHeight) {
|
|
$thumb = 'thumb';
|
|
}
|
|
}
|
|
if ($thumb !== null) {
|
|
if ($thumb == 'thumb') {
|
|
$display_url = $image['thumb']['url'];
|
|
$display_width = CHV\getSetting('upload_thumb_width');
|
|
$display_height = CHV\getSetting('upload_thumb_height');
|
|
} else {
|
|
$display_url = $image['display_url'];
|
|
$display_width = $image['display_width'];
|
|
$display_height = $image['display_height'];
|
|
}
|
|
$data = array_merge($data, [
|
|
'thumbnail_url' => $display_url,
|
|
'thumbnail_width' => $display_width,
|
|
'thumbnail_height' => $display_height,
|
|
]);
|
|
}
|
|
switch ($_GET['format']) {
|
|
case 'xml':
|
|
G\Render\xml_output(['oembed' => $data]);
|
|
break;
|
|
case 'json':
|
|
default:
|
|
G\Render\json_output($data);
|
|
break;
|
|
}
|
|
} catch (Exception $e) {
|
|
G\exception_to_error($e);
|
|
}
|
|
};
|