diff options
author | Bjoern Schiessle <schiessle@owncloud.com> | 2015-01-14 20:39:23 +0100 |
---|---|---|
committer | Bjoern Schiessle <schiessle@owncloud.com> | 2015-03-26 20:56:51 +0100 |
commit | ff9c85ce60aac1098c741b7ea630d9fc545e3d96 (patch) | |
tree | b51ab4917630680beb0499fae4a1d7c0ae100e34 /apps | |
parent | a9b4f0d8429dbeb612e80b168b6146890bb7843e (diff) | |
download | nextcloud-server-ff9c85ce60aac1098c741b7ea630d9fc545e3d96.tar.gz nextcloud-server-ff9c85ce60aac1098c741b7ea630d9fc545e3d96.zip |
implement basic encryption functionallity in core to enable multiple encryption modules
Diffstat (limited to 'apps')
-rw-r--r-- | apps/encryption_dummy/appinfo/app.php | 6 | ||||
-rw-r--r-- | apps/encryption_dummy/appinfo/info.xml | 20 | ||||
-rw-r--r-- | apps/encryption_dummy/appinfo/version | 1 | ||||
-rw-r--r-- | apps/encryption_dummy/lib/dummymodule.php | 145 |
4 files changed, 172 insertions, 0 deletions
diff --git a/apps/encryption_dummy/appinfo/app.php b/apps/encryption_dummy/appinfo/app.php new file mode 100644 index 00000000000..fa17e676eda --- /dev/null +++ b/apps/encryption_dummy/appinfo/app.php @@ -0,0 +1,6 @@ +<?php + +$manager = \OC::$server->getEncryptionManager(); +$module = new \OCA\Encryption_Dummy\DummyModule(); +$manager->registerEncryptionModule($module); + diff --git a/apps/encryption_dummy/appinfo/info.xml b/apps/encryption_dummy/appinfo/info.xml new file mode 100644 index 00000000000..f62f6fb5dd6 --- /dev/null +++ b/apps/encryption_dummy/appinfo/info.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<info> + <id>encryption_dummy</id> + <name>dummy encryption module</name> + <description> + This module does nothing, it is used for testing purpose only + </description> + <licence>AGPL</licence> + <author>Bjoern Schiessle</author> + <requiremin>8</requiremin> + <shipped>true</shipped> + <rememberlogin>false</rememberlogin> + <types> + <filesystem/> + </types> + <ocsid>166047</ocsid> + <dependencies> + <lib>openssl</lib> + </dependencies> +</info> diff --git a/apps/encryption_dummy/appinfo/version b/apps/encryption_dummy/appinfo/version new file mode 100644 index 00000000000..8acdd82b765 --- /dev/null +++ b/apps/encryption_dummy/appinfo/version @@ -0,0 +1 @@ +0.0.1 diff --git a/apps/encryption_dummy/lib/dummymodule.php b/apps/encryption_dummy/lib/dummymodule.php new file mode 100644 index 00000000000..8ca9cd4f9af --- /dev/null +++ b/apps/encryption_dummy/lib/dummymodule.php @@ -0,0 +1,145 @@ +<?php + +/** + * ownCloud + * + * @copyright (C) 2015 ownCloud, Inc. + * + * @author Bjoern Schiessle <schiessle@owncloud.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library 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 library. If not, see <http://www.gnu.org/licenses/>. + */ + +namespace OCA\Encryption_Dummy; + +class DummyModule implements \OCP\Encryption\IEncryptionModule { + + /** @var boolean */ + protected $isWriteOperation; + + /** + * @return string defining the technical unique id + */ + public function getId() { + return "34876934"; + } + + /** + * In comparison to getKey() this function returns a human readable (maybe translated) name + * + * @return string + */ + public function getDisplayName() { + return "Dummy Encryption Module"; + } + + /** + * start receiving chunks from a file. This is the place where you can + * perform some initial step before starting encrypting/decrypting the + * chunks + * + * @param string $path to the file + * @param string $user who read/write the file (null for public access) + * @param array $header contains the header data read from the file + * @param array $accessList who has access to the file contains the key 'users' and 'public' + * + * $return array $header contain data as key-value pairs which should be + * written to the header, in case of a write operation + * or if no additional data is needed return a empty array + */ + public function begin($path, $user, $header, $accessList) { + return array(); + } + + /** + * last chunk received. This is the place where you can perform some final + * operation and return some remaining data if something is left in your + * buffer. + * + * @param string $path to the file + * @return string remained data which should be written to the file in case + * of a write operation + */ + public function end($path) { + + if ($this->isWriteOperation) { + $storage = \OC::$server->getEncryptionKeyStorage($this->getId()); + $storage->setFileKey($path, 'fileKey', 'foo'); + } + return ''; + } + + /** + * encrypt data + * + * @param string $data you want to encrypt + * @return mixed encrypted data + */ + public function encrypt($data) { + $this->isWriteOperation = true; + return $data; + } + + /** + * decrypt data + * + * @param string $data you want to decrypt + * @param string $user decrypt as user (null for public access) + * @return mixed decrypted data + */ + public function decrypt($data) { + $this->isWriteOperation=false; + return $data; + } + + /** + * update encrypted file, e.g. give additional users access to the file + * + * @param string $path path to the file which should be updated + * @param array $accessList who has access to the file contains the key 'users' and 'public' + * @return boolean + */ + public function update($path, $accessList) { + return true; + } + + /** + * should the file be encrypted or not + * + * @param string $path + * @return boolean + */ + public function shouldEncrypt($path) { + if (strpos($path, '/'. \OCP\User::getUser() . '/files/') === 0) { + return true; + } + + return false; + } + + /** + * calculate unencrypted size + * + * @param string $path to file + * @return integer unencrypted size + */ + public function calculateUnencryptedSize($path) { + return 42; + } + + public function getUnencryptedBlockSize() { + return 6126; + } + +}
\ No newline at end of file |