. * */ namespace OCA_Encryption; /** * Class for hook specific logic */ class Hooks { # TODO: use passphrase for encrypting private key that is separate to the login password /** * @brief Startup encryption backend upon user login * @note This method should never be called for users using client side encryption */ public static function login( $params ) { if ( Crypt::mode( $params['uid'] ) == 'server' ) { # TODO: use lots of dependency injection here $view = new \OC_FilesystemView( '/' ); $util = new Util( $view, $params['uid'] ); if ( !$util->ready()) { return $util->setupServerSide( $params['password'] ); } \OC_FileProxy::$enabled = false; $encryptedKey = Keymanager::getPrivateKey( $params['uid'], $view ); \OC_FileProxy::$enabled = true; # TODO: dont manually encrypt the private keyfile - use the config options of openssl_pkey_export instead for better mobile compatibility $_SESSION['enckey'] = Crypt::symmetricDecryptFileContent( $encryptedKey, $params['password'] ); } return true; } /** * @brief update the encryption key of the file uploaded by the client */ public static function updateKeyfile( $params ) { if (Crypt::mode() == 'client') if (isset($params['properties']['key'])) { Keymanager::setFileKey($params['path'], $params['properties']['key']); } else { \OC_Log::write( 'Encryption library', "Client side encryption is enabled but the client doesn't provide a encryption key for the file!", \OC_Log::ERROR ); error_log("Client side encryption is enabled but the client doesn't provide a encryption key for the file!"); } } } ?>