Cleaned up path formatting with new method stripUserFilesPath()

This commit is contained in:
Sam Tuke 2013-02-05 15:59:28 +00:00
parent 50faddfa40
commit a1f200c1e5
2 changed files with 22 additions and 20 deletions

View File

@ -182,16 +182,11 @@ class Crypt {
/**
* @brief Check if a file is encrypted via legacy system
* @param string $relPath The path of the file, relative to user/data;
* e.g. filename or /Docs/filename, NOT admin/files/filename
* @return true / false
*/
public static function isLegacyEncryptedContent( $data, $path ) {
$trimmed = ltrim( $path, '/' );
// Path must not include user/files
$split = explode( '/', $trimmed );
$sliced = array_slice( $split, 2 );
$relPath = implode( '/', $sliced );
public static function isLegacyEncryptedContent( $data, $relPath ) {
// trigger_error("REL PATH = ".var_export($relPath, 1));
@ -200,7 +195,7 @@ class Crypt {
// Fetch all file metadata from DB
$metadata = \OC\Files\Filesystem::getFileInfo( $relPath, '' );
trigger_error("PATH = ". var_export($trimmed, 1)." METADATA = ".var_export($metadata['encrypted'], 1));
trigger_error("PATH = ". var_export($relPath, 1)." METADATA = ".var_export($metadata['encrypted'], 1));
// If a file is flagged with encryption in DB, but isn't a
// valid content + IV combination, it's probably using the

View File

@ -251,6 +251,7 @@ class Util {
) {
$filePath = $directory . '/' . $this->view->getRelativePath( '/' . $file );
$relPath = $this->stripUserFilesPath( $filePath );
// If the path is a directory, search
// its contents
@ -286,7 +287,7 @@ class Util {
// If the file uses old
// encryption system
} elseif ( Crypt::isLegacyEncryptedContent( $this->view->file_get_contents( $filePath ), $filePath ) ) {
} elseif ( Crypt::isLegacyEncryptedContent( $this->view->file_get_contents( $filePath ), $relPath ) ) {
$found['legacy'][] = array( 'name' => $file, 'path' => $filePath );
@ -341,6 +342,20 @@ class Util {
}
/**
* @brief Format a path to be relative to the /user/files/ directory
*/
public function stripUserFilesPath( $path ) {
$trimmed = ltrim( $path, '/' );
$split = explode( '/', $trimmed );
$sliced = array_slice( $split, 2 );
$relPath = implode( '/', $sliced );
return $relPath;
}
/**
* @brief Encrypt all files in a directory
* @param string $publicKey the public key to encrypt files with
@ -365,11 +380,7 @@ class Util {
// Encrypt data, generate catfile
$encrypted = Crypt::keyEncryptKeyfile( $plainData, $publicKey );
// Format path to be relative to user files dir
$trimmed = ltrim( $plainFile['path'], '/' );
$split = explode( '/', $trimmed );
$sliced = array_slice( $split, 2 );
$relPath = implode( '/', $sliced );
$relPath = $this->stripUserFilesPath( $plainFile['path'] );
// Save keyfile
Keymanager::setFileKey( $this->view, $relPath, $this->userId, $encrypted['key'] );
@ -401,11 +412,7 @@ class Util {
// Recrypt data, generate catfile
$recrypted = Crypt::legacyKeyRecryptKeyfile( $legacyData, $legacyPassphrase, $publicKey, $newPassphrase );
// Format path to be relative to user files dir
$trimmed = ltrim( $legacyFile['path'], '/' );
$split = explode( '/', $trimmed );
$sliced = array_slice( $split, 2 );
$relPath = implode( '/', $sliced );
$relPath = $this->stripUserFilesPath( $legacyFile['path'] );
// Save keyfile
Keymanager::setFileKey( $this->view, $relPath, $this->userId, $recrypted['key'] );