Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>pull/44129/head
parent
4cadb82850
commit
f4efb762ec
@ -0,0 +1,100 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de> |
||||
* |
||||
* @author Ferdinand Thiessen <opensource@fthiessen.de> |
||||
* |
||||
* @license AGPL-3.0-or-later |
||||
* |
||||
* This program 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. |
||||
* |
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OC\App\AppStore\Fetcher; |
||||
|
||||
use DateTimeImmutable; |
||||
use OC\App\CompareVersion; |
||||
use OC\Files\AppData\Factory; |
||||
use OCP\AppFramework\Utility\ITimeFactory; |
||||
use OCP\Http\Client\IClientService; |
||||
use OCP\IConfig; |
||||
use OCP\Support\Subscription\IRegistry; |
||||
use Psr\Log\LoggerInterface; |
||||
|
||||
class AppDiscoverFetcher extends Fetcher { |
||||
|
||||
public const INVALIDATE_AFTER_SECONDS = 86400; |
||||
|
||||
public function __construct( |
||||
Factory $appDataFactory, |
||||
IClientService $clientService, |
||||
ITimeFactory $timeFactory, |
||||
IConfig $config, |
||||
LoggerInterface $logger, |
||||
IRegistry $registry, |
||||
private CompareVersion $compareVersion, |
||||
) { |
||||
parent::__construct( |
||||
$appDataFactory, |
||||
$clientService, |
||||
$timeFactory, |
||||
$config, |
||||
$logger, |
||||
$registry |
||||
); |
||||
|
||||
$this->fileName = 'discover.json'; |
||||
$this->endpointName = 'discover.json'; |
||||
} |
||||
|
||||
/** |
||||
* Get the app discover section entries |
||||
* |
||||
* @param bool $allowUnstable Include also expired and upcoming entries |
||||
*/ |
||||
public function get($allowUnstable = false) { |
||||
$entries = parent::get(false); |
||||
|
||||
if (!$allowUnstable) { |
||||
$now = new DateTimeImmutable(); |
||||
|
||||
// Remove expired or future entries |
||||
return array_filter($entries, function (array $entry) use ($now) { |
||||
try { |
||||
$date = new DateTimeImmutable($entry['date'] ?? ''); |
||||
if ($date > $now) { |
||||
return false; |
||||
} |
||||
} catch (\Throwable $e) { |
||||
// Invalid date format |
||||
return false; |
||||
} |
||||
|
||||
try { |
||||
$expiryDate = new DateTimeImmutable($entry['expiryDate'] ?? ''); |
||||
if ($expiryDate < $now) { |
||||
return false; |
||||
} |
||||
} catch (\Throwable $e) { |
||||
// Invalid expiryDate format |
||||
return false; |
||||
} |
||||
|
||||
return true; |
||||
}); |
||||
} |
||||
|
||||
return $entries; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue