Added: Download endpoint

This commit is contained in:
Luc Mcgrady 2025-09-25 12:36:21 +01:00
parent 8129b6b60b
commit 1cdfbb08d8
No known key found for this signature in database
GPG Key ID: 4F3D7A0B17CC3D9C
3 changed files with 32 additions and 1 deletions

View File

@ -0,0 +1,26 @@
<?php
namespace Grocy\Controllers;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class ExportController extends BaseController
{
public function DownloadSql(Request $request, Response $response, array $args) {
$databasePath = GROCY_DATAPATH . '/grocy.db';
if (file_exists($databasePath))
{
$response = $response->withHeader('Content-Type', 'application/octet-stream');
$response = $response->withHeader('Content-Disposition', 'attachment; filename="grocy.db"');
$response = $response->withHeader('Content-Length', filesize($databasePath));
$response->getBody()->write(file_get_contents($databasePath));
return $response;
}
else
{
return $response->withStatus(404, 'Database file not found');
}
}
}

View File

@ -241,7 +241,10 @@ $app->group('/api', function (RouteCollectorProxy $group)
// Calendar
$group->get('/calendar/ical', '\Grocy\Controllers\CalendarApiController:Ical')->setName('calendar-ical');
$group->get('/calendar/ical/sharing-link', '\Grocy\Controllers\CalendarApiController:IcalSharingLink');
$group->get('/calendar/ical/sharing-link', '\Grocy\Controllers\CalendarApiController:IcalSharingLink');#
// Export routes
$group->get('/export/sql', '\Grocy\Controllers\ExportController:DownloadSql');
})->add(JsonMiddleware::class);
// Handle CORS preflight OPTIONS requests

View File

@ -674,6 +674,8 @@
href="{{ $U('/api') }}"><i class="fa-solid fa-fw fa-book"></i>&nbsp;{{ $__t('REST API browser') }}</a>
<a class="dropdown-item discrete-link"
href="{{ $U('/barcodescannertesting') }}"><i class="fa-solid fa-fw fa-barcode"></i>&nbsp;{{ $__t('Barcode scanner testing') }}</a>
<a class="dropdown-item discrete-link"
href="{{ $U('/api/export/sql') }}"><i class="fa-solid fa-fw fa-database"></i>&nbsp;{{ $__t('Download database') }}</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item discrete-link show-as-dialog-link"
data-dialog-type="wider"