ownCloud Benutzerdaten entschlüsseln

So. Nachdem der Martin mir letzte Nacht zwei Stunden Schlaf geraubt hat, damit ich die Daten seiner ownCloud rette, gibt es zum Jahresabschluss noch mal ein kleines Script, mit dem ihr eure von ownCloud verschlüsselten Daten entschlüsseln könnt. Kann ganz nützlich sein, wenn man via WebDAV, Webinterface, etc nur noch Fehlermeldungen bekommt :) Einfach $user sowie $pass anpassen und das Script im Root-Verzeichnis von ownCloud speichern. Je nach Datenmenge sollte man es aber besser per Shell ausführen, da Time- und Memory-Limit webserverseitig ggf etwas knapp sein könnten.

<?php
    $user = 'd0wn';
    $pass = 'asdf';

    function glob_recursive($pattern)
    {
        $files = glob($pattern);

        foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir)
        {
            $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern)));
        }

        return $files;
    }

    $RUNTIME_NOAPPS = false;
    require_once 'lib/base.php';

    OC_App::loadApps(array('core', 'files_encryption'));
    OC_User::login($user, $pass);
    OC_Crypt::init($user, $pass);

    $files = glob_recursive('data/' . $user . '/files/*');
    foreach ($files as $file)
    {
        if (is_dir($file)) continue;
        $decFile = 'decrypted/'. $file;

        printf("Decrypting %s to %s\n", $file, $decFile);

        @mkdir('decrypted/' . dirname($file), $mode = 0755, $recursive = true);
        $data = file_get_contents($file);
        $content = OC_CRYPT::decrypt($data, $_SESSION['enckey']);

        if ($data == $content) printf("Failed to decrypt %s\n", $file);
        else file_put_contents($decFile, $content);
    }
?>