Check for e2e encryption when changing exif data

pull/175/head
eltos 2022-11-19 18:28:57 +01:00
parent 1167365f7e
commit 5078d986da
3 changed files with 22 additions and 0 deletions

View File

@ -32,6 +32,7 @@ use OCP\App\IAppManager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCP\Encryption\IManager;
use OCP\Files\File;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
@ -48,6 +49,7 @@ class ApiBase extends Controller
protected IUserSession $userSession;
protected IRootFolder $rootFolder;
protected IAppManager $appManager;
protected IManager $encryptionManager;
protected TimelineQuery $timelineQuery;
protected TimelineWrite $timelineWrite;
protected IShareManager $shareManager;
@ -60,6 +62,7 @@ class ApiBase extends Controller
IDBConnection $connection,
IRootFolder $rootFolder,
IAppManager $appManager,
IManager $encryptionManager,
IShareManager $shareManager,
IPreview $preview
) {
@ -70,6 +73,7 @@ class ApiBase extends Controller
$this->connection = $connection;
$this->rootFolder = $rootFolder;
$this->appManager = $appManager;
$this->encryptionManager = $encryptionManager;
$this->shareManager = $shareManager;
$this->previewManager = $preview;
$this->timelineQuery = new TimelineQuery($connection);

View File

@ -75,6 +75,11 @@ class ImageController extends ApiBase
return new JSONResponse([], Http::STATUS_FORBIDDEN);
}
// Check for end-to-end encryption
if (\OCA\Memories\Util::isEncryptionEnabled($this->encryptionManager)){
return new JSONResponse(['message' => 'Cannot change encrypted file'], Http::STATUS_PRECONDITION_FAILED);
}
// Get original file from body
$exif = $this->request->getParam('raw');
$path = $file->getStorage()->getLocalFile($file->getInternalPath());

View File

@ -105,4 +105,17 @@ class Util
return true;
}
/**
* Check if any encryption is enabled that we can not cope with
* such as end-to-end encryption
*/
public static function isEncryptionEnabled(&$encryptionManager): bool
{
if ($encryptionManager->isEnabled()){
// Server-side encryption (OC_DEFAULT_MODULE) is okay, others like e2e are not
return $encryptionManager->getDefaultEncryptionModuleId() != 'OC_DEFAULT_MODULE';
}
return false;
}
}