Merge branch 'master' into convert-oc_config
Conflicts: lib/config.php lib/setup.php
This commit is contained in:
commit
c6bbccc776
|
@ -6,7 +6,7 @@ config/mount.php
|
||||||
apps/inc.php
|
apps/inc.php
|
||||||
|
|
||||||
# ignore all apps except core ones
|
# ignore all apps except core ones
|
||||||
apps/*
|
apps*
|
||||||
!apps/files
|
!apps/files
|
||||||
!apps/files_encryption
|
!apps/files_encryption
|
||||||
!apps/files_external
|
!apps/files_external
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
## Submitting issues
|
## Submitting issues
|
||||||
|
|
||||||
If you have questions about how to use ownCloud, please direct these to the [mailing list][mailinglist] or our [forum][forum]. We are also available on [IRC][irc].
|
If you have questions about how to install or use ownCloud, please direct these to the [mailing list][mailinglist] or our [forum][forum]. We are also available on [IRC][irc].
|
||||||
|
|
||||||
|
### TL;DR
|
||||||
|
|
||||||
|
* The [issue template can be found here][template] but be aware of the different repositories! See list below.
|
||||||
|
|
||||||
### Guidelines
|
### Guidelines
|
||||||
* Please search the existing issues first, it's likely that your issue was already reported.
|
* Please search the existing issues first, it's likely that your issue was already reported or even fixed.
|
||||||
* [Report the issue](https://github.com/owncloud/core/issues/new) using our [template][template], it includes all the informations we need to track down the issue.
|
* This repository is *only* for issues within the ownCloud core code. This also includes the apps: files, encryption, external storage, sharing, deleted files, versions, LDAP, and WebDAV Auth
|
||||||
* This repository is *only* for issues within the ownCloud core code. Issues in other compontents should be reported in their own repositores:
|
* The issues in other components should be reported in their respective repositories:
|
||||||
- [Android client](https://github.com/owncloud/android/issues)
|
- [Android client](https://github.com/owncloud/android/issues)
|
||||||
- [iOS client](https://github.com/owncloud/ios-issues/issues)
|
- [iOS client](https://github.com/owncloud/ios-issues/issues)
|
||||||
- [Desktop client](https://github.com/owncloud/mirall/issues)
|
- [Desktop client](https://github.com/owncloud/mirall/issues)
|
||||||
|
@ -14,12 +18,12 @@ If you have questions about how to use ownCloud, please direct these to the [mai
|
||||||
- [Calendar](https://github.com/owncloud/calendar/issues)
|
- [Calendar](https://github.com/owncloud/calendar/issues)
|
||||||
- [Contacts](https://github.com/owncloud/contacts/issues)
|
- [Contacts](https://github.com/owncloud/contacts/issues)
|
||||||
- [Mail](https://github.com/owncloud/mail/issues)
|
- [Mail](https://github.com/owncloud/mail/issues)
|
||||||
|
- [Media/Music](https://github.com/owncloud/media/issues)
|
||||||
- [News](https://github.com/owncloud/news/issues)
|
- [News](https://github.com/owncloud/news/issues)
|
||||||
- [Notes](https://github.com/owncloud/notes/issues)
|
- [Notes](https://github.com/owncloud/notes/issues)
|
||||||
- [Shorty](https://github.com/owncloud/shorty/issues)
|
- [Shorty](https://github.com/owncloud/shorty/issues)
|
||||||
- [other apps](https://github.com/owncloud/apps/issues) (e.g. Pictures, Music, Tasks, ...)
|
- [All other apps](https://github.com/owncloud/apps/issues) (e.g. Pictures, Tasks, ...)
|
||||||
|
* Report the issue using our [template][template], it includes all the information we need to track down the issue.
|
||||||
If your issue appears to be a bug, and hasn't been reported, open a new issue.
|
|
||||||
|
|
||||||
Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
|
Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
|
||||||
|
|
||||||
|
@ -34,7 +38,7 @@ Thanks for wanting to contribute source code to ownCloud. That's great!
|
||||||
|
|
||||||
Before we're able to merge your code into the ownCloud core, you need to sign our [Contributor Agreement][agreement].
|
Before we're able to merge your code into the ownCloud core, you need to sign our [Contributor Agreement][agreement].
|
||||||
|
|
||||||
Please read the [Developer Manuals][devmanual] to get useful infos like how to create your first application or how to test the ownCloud code with phpunit.
|
Please read the [Developer Manuals][devmanual] to learn how to create your first application or how to test the ownCloud code with PHPUnit.
|
||||||
|
|
||||||
[agreement]: http://owncloud.org/about/contributor-agreement/
|
[agreement]: http://owncloud.org/about/contributor-agreement/
|
||||||
[devmanual]: http://owncloud.org/dev/
|
[devmanual]: http://owncloud.org/dev/
|
||||||
|
|
|
@ -4,6 +4,16 @@ session_write_close();
|
||||||
|
|
||||||
$force = (isset($_GET['force']) and ($_GET['force'] === 'true'));
|
$force = (isset($_GET['force']) and ($_GET['force'] === 'true'));
|
||||||
$dir = isset($_GET['dir']) ? $_GET['dir'] : '';
|
$dir = isset($_GET['dir']) ? $_GET['dir'] : '';
|
||||||
|
if (isset($_GET['users'])) {
|
||||||
|
OC_JSON::checkAdminUser();
|
||||||
|
if ($_GET['users'] === 'all') {
|
||||||
|
$users = OC_User::getUsers();
|
||||||
|
} else {
|
||||||
|
$users = json_decode($_GET['users']);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$users = array(OC_User::getUser());
|
||||||
|
}
|
||||||
|
|
||||||
$eventSource = new OC_EventSource();
|
$eventSource = new OC_EventSource();
|
||||||
ScanListener::$eventSource = $eventSource;
|
ScanListener::$eventSource = $eventSource;
|
||||||
|
@ -12,23 +22,29 @@ ScanListener::$view = \OC\Files\Filesystem::getView();
|
||||||
OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_folder', 'ScanListener', 'folder');
|
OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_folder', 'ScanListener', 'folder');
|
||||||
OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_file', 'ScanListener', 'file');
|
OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_file', 'ScanListener', 'file');
|
||||||
|
|
||||||
$absolutePath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir);
|
foreach ($users as $user) {
|
||||||
|
$eventSource->send('user', $user);
|
||||||
|
OC_Util::tearDownFS();
|
||||||
|
OC_Util::setupFS($user);
|
||||||
|
|
||||||
$mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath);
|
$absolutePath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir);
|
||||||
$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
|
|
||||||
$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
|
|
||||||
|
|
||||||
foreach ($mountPoints as $mountPoint) {
|
$mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath);
|
||||||
|
$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
|
||||||
|
$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
|
||||||
|
|
||||||
|
foreach ($mountPoints as $mountPoint) {
|
||||||
$storage = \OC\Files\Filesystem::getStorage($mountPoint);
|
$storage = \OC\Files\Filesystem::getStorage($mountPoint);
|
||||||
if ($storage) {
|
if ($storage) {
|
||||||
ScanListener::$mountPoints[$storage->getId()] = $mountPoint;
|
ScanListener::$mountPoints[$storage->getId()] = $mountPoint;
|
||||||
$scanner = $storage->getScanner();
|
$scanner = $storage->getScanner();
|
||||||
if ($force) {
|
if ($force) {
|
||||||
$scanner->scan('');
|
$scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG);
|
||||||
} else {
|
} else {
|
||||||
$scanner->backgroundScan();
|
$scanner->backgroundScan();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$eventSource->send('done', ScanListener::$fileCount);
|
$eventSource->send('done', ScanListener::$fileCount);
|
||||||
|
|
|
@ -63,8 +63,12 @@
|
||||||
}
|
}
|
||||||
#filestable { position: relative; top:37px; width:100%; }
|
#filestable { position: relative; top:37px; width:100%; }
|
||||||
tbody tr { background-color:#fff; height:2.5em; }
|
tbody tr { background-color:#fff; height:2.5em; }
|
||||||
tbody tr:hover, tbody tr:active, tbody tr.selected { background-color:#f8f8f8; }
|
tbody tr:hover, tbody tr:active {
|
||||||
tbody tr.selected { background-color:#eee; }
|
background-color: rgb(240,240,240);
|
||||||
|
}
|
||||||
|
tbody tr.selected {
|
||||||
|
background-color: rgb(230,230,230);
|
||||||
|
}
|
||||||
tbody a { color:#000; }
|
tbody a { color:#000; }
|
||||||
span.extension, span.uploading, td.date { color:#999; }
|
span.extension, span.uploading, td.date { color:#999; }
|
||||||
span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }
|
span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }
|
||||||
|
@ -81,7 +85,12 @@ table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-
|
||||||
/* Multiselect bar */
|
/* Multiselect bar */
|
||||||
#filestable.multiselect { top:63px; }
|
#filestable.multiselect { top:63px; }
|
||||||
table.multiselect thead { position:fixed; top:82px; z-index:1; -moz-box-sizing: border-box; box-sizing: border-box; left: 0; padding-left: 64px; width:100%; }
|
table.multiselect thead { position:fixed; top:82px; z-index:1; -moz-box-sizing: border-box; box-sizing: border-box; left: 0; padding-left: 64px; width:100%; }
|
||||||
table.multiselect thead th { background:rgba(230,230,230,.8); color:#000; font-weight:bold; border-bottom:0; }
|
table.multiselect thead th {
|
||||||
|
background-color: rgba(210,210,210,.7);
|
||||||
|
color: #000;
|
||||||
|
font-weight: bold;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
table.multiselect #headerName { width: 100%; }
|
table.multiselect #headerName { width: 100%; }
|
||||||
table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
|
table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
|
||||||
table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; }
|
table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; }
|
||||||
|
@ -115,10 +124,12 @@ table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
|
||||||
}
|
}
|
||||||
#fileList .name { position:relative; /* Firefox needs to explicitly have this default set … */ }
|
#fileList .name { position:relative; /* Firefox needs to explicitly have this default set … */ }
|
||||||
#fileList tr:hover .fileactions { /* background to distinguish when overlaying with file names */
|
#fileList tr:hover .fileactions { /* background to distinguish when overlaying with file names */
|
||||||
background:rgba(248,248,248,.9); box-shadow:-5px 0 7px rgba(248,248,248,.9);
|
background-color: rgba(240,240,240,0.898);
|
||||||
|
box-shadow: -5px 0 7px rgba(240,240,240,0.898);
|
||||||
}
|
}
|
||||||
#fileList tr.selected:hover .fileactions, #fileList tr.mouseOver .fileactions { /* slightly darker color for selected rows */
|
#fileList tr.selected:hover .fileactions, #fileList tr.mouseOver .fileactions { /* slightly darker color for selected rows */
|
||||||
background:rgba(238,238,238,.9); box-shadow:-5px 0 7px rgba(238,238,238,.9);
|
background-color: rgba(230,230,230,.9);
|
||||||
|
box-shadow: -5px 0 7px rgba(230,230,230,.9);
|
||||||
}
|
}
|
||||||
#fileList .fileactions a.action img { position:relative; top:.2em; }
|
#fileList .fileactions a.action img { position:relative; top:.2em; }
|
||||||
#fileList a.action { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; }
|
#fileList a.action { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; }
|
||||||
|
|
|
@ -51,7 +51,7 @@ var FileList={
|
||||||
}else{
|
}else{
|
||||||
simpleSize=t('files', 'Pending');
|
simpleSize=t('files', 'Pending');
|
||||||
}
|
}
|
||||||
var sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2));
|
var sizeColor = Math.round(160-Math.pow((size/(1024*1024)),2));
|
||||||
var lastModifiedTime = Math.round(lastModified.getTime() / 1000);
|
var lastModifiedTime = Math.round(lastModified.getTime() / 1000);
|
||||||
td = $('<td></td>').attr({
|
td = $('<td></td>').attr({
|
||||||
"class": "filesize",
|
"class": "filesize",
|
||||||
|
|
|
@ -695,7 +695,7 @@ $(document).ready(function() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function scanFiles(force, dir){
|
function scanFiles(force, dir, users){
|
||||||
if (!OC.currentUser) {
|
if (!OC.currentUser) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -705,7 +705,18 @@ function scanFiles(force, dir){
|
||||||
}
|
}
|
||||||
force = !!force; //cast to bool
|
force = !!force; //cast to bool
|
||||||
scanFiles.scanning = true;
|
scanFiles.scanning = true;
|
||||||
var scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir});
|
var scannerEventSource;
|
||||||
|
if (users) {
|
||||||
|
var usersString;
|
||||||
|
if (users === 'all') {
|
||||||
|
usersString = users;
|
||||||
|
} else {
|
||||||
|
usersString = JSON.stringify(users);
|
||||||
|
}
|
||||||
|
scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force: force,dir: dir, users: usersString});
|
||||||
|
} else {
|
||||||
|
scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force: force,dir: dir});
|
||||||
|
}
|
||||||
scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource);
|
scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource);
|
||||||
scannerEventSource.listen('count',function(count){
|
scannerEventSource.listen('count',function(count){
|
||||||
console.log(count + ' files scanned')
|
console.log(count + ' files scanned')
|
||||||
|
@ -717,6 +728,9 @@ function scanFiles(force, dir){
|
||||||
scanFiles.scanning=false;
|
scanFiles.scanning=false;
|
||||||
console.log('done after ' + count + ' files');
|
console.log('done after ' + count + ' files');
|
||||||
});
|
});
|
||||||
|
scannerEventSource.listen('user',function(user){
|
||||||
|
console.log('scanning files for ' + user);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
scanFiles.scanning=false;
|
scanFiles.scanning=false;
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
"{count} folders" => "{count} složky",
|
"{count} folders" => "{count} složky",
|
||||||
"1 file" => "1 soubor",
|
"1 file" => "1 soubor",
|
||||||
"{count} files" => "{count} soubory",
|
"{count} files" => "{count} soubory",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Název složky nelze použít. Použití názvu 'Shared' je ownCloudem rezervováno",
|
||||||
"Unable to rename file" => "Nelze přejmenovat soubor",
|
"Unable to rename file" => "Nelze přejmenovat soubor",
|
||||||
"Upload" => "Odeslat",
|
"Upload" => "Odeslat",
|
||||||
"File handling" => "Zacházení se soubory",
|
"File handling" => "Zacházení se soubory",
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
"{count} folders" => "{count} mapper",
|
"{count} folders" => "{count} mapper",
|
||||||
"1 file" => "1 fil",
|
"1 file" => "1 fil",
|
||||||
"{count} files" => "{count} filer",
|
"{count} files" => "{count} filer",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ugyldigt mappenavn. Brug af 'Shared' er forbeholdt af ownCloud",
|
||||||
"Unable to rename file" => "Kunne ikke omdøbe fil",
|
"Unable to rename file" => "Kunne ikke omdøbe fil",
|
||||||
"Upload" => "Upload",
|
"Upload" => "Upload",
|
||||||
"File handling" => "Filhåndtering",
|
"File handling" => "Filhåndtering",
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
"{count} folders" => "{count} Ordner",
|
"{count} folders" => "{count} Ordner",
|
||||||
"1 file" => "1 Datei",
|
"1 file" => "1 Datei",
|
||||||
"{count} files" => "{count} Dateien",
|
"{count} files" => "{count} Dateien",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Der Ordnername ist ungültig. Nur ownCloud kann den Ordner \"Shared\" anlegen",
|
||||||
"Unable to rename file" => "Konnte Datei nicht umbenennen",
|
"Unable to rename file" => "Konnte Datei nicht umbenennen",
|
||||||
"Upload" => "Hochladen",
|
"Upload" => "Hochladen",
|
||||||
"File handling" => "Dateibehandlung",
|
"File handling" => "Dateibehandlung",
|
||||||
|
|
|
@ -9,9 +9,11 @@
|
||||||
"No file was uploaded" => "Neniu dosiero alŝutiĝis.",
|
"No file was uploaded" => "Neniu dosiero alŝutiĝis.",
|
||||||
"Missing a temporary folder" => "Mankas provizora dosierujo.",
|
"Missing a temporary folder" => "Mankas provizora dosierujo.",
|
||||||
"Failed to write to disk" => "Malsukcesis skribo al disko",
|
"Failed to write to disk" => "Malsukcesis skribo al disko",
|
||||||
|
"Not enough storage available" => "Ne haveblas sufiĉa memoro",
|
||||||
"Invalid directory." => "Nevalida dosierujo.",
|
"Invalid directory." => "Nevalida dosierujo.",
|
||||||
"Files" => "Dosieroj",
|
"Files" => "Dosieroj",
|
||||||
"Share" => "Kunhavigi",
|
"Share" => "Kunhavigi",
|
||||||
|
"Delete permanently" => "Forigi por ĉiam",
|
||||||
"Delete" => "Forigi",
|
"Delete" => "Forigi",
|
||||||
"Rename" => "Alinomigi",
|
"Rename" => "Alinomigi",
|
||||||
"Pending" => "Traktotaj",
|
"Pending" => "Traktotaj",
|
||||||
|
@ -21,11 +23,14 @@
|
||||||
"cancel" => "nuligi",
|
"cancel" => "nuligi",
|
||||||
"replaced {new_name} with {old_name}" => "anstataŭiĝis {new_name} per {old_name}",
|
"replaced {new_name} with {old_name}" => "anstataŭiĝis {new_name} per {old_name}",
|
||||||
"undo" => "malfari",
|
"undo" => "malfari",
|
||||||
|
"perform delete operation" => "plenumi forigan operacion",
|
||||||
"1 file uploading" => "1 dosiero estas alŝutata",
|
"1 file uploading" => "1 dosiero estas alŝutata",
|
||||||
"files uploading" => "dosieroj estas alŝutataj",
|
"files uploading" => "dosieroj estas alŝutataj",
|
||||||
"'.' is an invalid file name." => "'.' ne estas valida dosiernomo.",
|
"'.' is an invalid file name." => "'.' ne estas valida dosiernomo.",
|
||||||
"File name cannot be empty." => "Dosiernomo devas ne malpleni.",
|
"File name cannot be empty." => "Dosiernomo devas ne malpleni.",
|
||||||
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas.",
|
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas.",
|
||||||
|
"Your storage is full, files can not be updated or synced anymore!" => "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!",
|
||||||
|
"Your storage is almost full ({usedSpacePercent}%)" => "Via memoro preskaŭ plenas ({usedSpacePercent}%)",
|
||||||
"Your download is being prepared. This might take some time if the files are big." => "Via elŝuto pretiĝatas. Ĉi tio povas daŭri iom da tempo se la dosieroj grandas.",
|
"Your download is being prepared. This might take some time if the files are big." => "Via elŝuto pretiĝatas. Ĉi tio povas daŭri iom da tempo se la dosieroj grandas.",
|
||||||
"Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn",
|
"Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn",
|
||||||
"Not enough space available" => "Ne haveblas sufiĉa spaco",
|
"Not enough space available" => "Ne haveblas sufiĉa spaco",
|
||||||
|
@ -41,6 +46,7 @@
|
||||||
"{count} folders" => "{count} dosierujoj",
|
"{count} folders" => "{count} dosierujoj",
|
||||||
"1 file" => "1 dosiero",
|
"1 file" => "1 dosiero",
|
||||||
"{count} files" => "{count} dosierujoj",
|
"{count} files" => "{count} dosierujoj",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nevalida dosierujnomo. La uzo de “Shared” estas rezervita de ownCloud.",
|
||||||
"Unable to rename file" => "Ne eblis alinomigi dosieron",
|
"Unable to rename file" => "Ne eblis alinomigi dosieron",
|
||||||
"Upload" => "Alŝuti",
|
"Upload" => "Alŝuti",
|
||||||
"File handling" => "Dosieradministro",
|
"File handling" => "Dosieradministro",
|
||||||
|
@ -55,12 +61,15 @@
|
||||||
"Text file" => "Tekstodosiero",
|
"Text file" => "Tekstodosiero",
|
||||||
"Folder" => "Dosierujo",
|
"Folder" => "Dosierujo",
|
||||||
"From link" => "El ligilo",
|
"From link" => "El ligilo",
|
||||||
|
"Deleted files" => "Forigitaj dosieroj",
|
||||||
"Cancel upload" => "Nuligi alŝuton",
|
"Cancel upload" => "Nuligi alŝuton",
|
||||||
|
"You don’t have write permissions here." => "Vi ne havas permeson skribi ĉi tie.",
|
||||||
"Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!",
|
"Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!",
|
||||||
"Download" => "Elŝuti",
|
"Download" => "Elŝuti",
|
||||||
"Unshare" => "Malkunhavigi",
|
"Unshare" => "Malkunhavigi",
|
||||||
"Upload too large" => "Alŝuto tro larĝa",
|
"Upload too large" => "Alŝuto tro larĝa",
|
||||||
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
|
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
|
||||||
"Files are being scanned, please wait." => "Dosieroj estas skanataj, bonvolu atendi.",
|
"Files are being scanned, please wait." => "Dosieroj estas skanataj, bonvolu atendi.",
|
||||||
"Current scanning" => "Nuna skano"
|
"Current scanning" => "Nuna skano",
|
||||||
|
"Upgrading filesystem cache..." => "Ĝisdatiĝas dosiersistema kaŝmemoro..."
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Could not move %s - File with this name already exists" => "לא ניתן להעביר את %s - קובץ בשם הזה כבר קיים",
|
||||||
|
"Could not move %s" => "לא ניתן להעביר את %s",
|
||||||
"No file was uploaded. Unknown error" => "לא הועלה קובץ. טעות בלתי מזוהה.",
|
"No file was uploaded. Unknown error" => "לא הועלה קובץ. טעות בלתי מזוהה.",
|
||||||
"There is no error, the file uploaded with success" => "לא התרחשה שגיאה, הקובץ הועלה בהצלחה",
|
"There is no error, the file uploaded with success" => "לא התרחשה שגיאה, הקובץ הועלה בהצלחה",
|
||||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "הקבצים שנשלחו חורגים מהגודל שצוין בהגדרה upload_max_filesize שבקובץ php.ini:",
|
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "הקבצים שנשלחו חורגים מהגודל שצוין בהגדרה upload_max_filesize שבקובץ php.ini:",
|
||||||
|
@ -7,6 +9,8 @@
|
||||||
"No file was uploaded" => "שום קובץ לא הועלה",
|
"No file was uploaded" => "שום קובץ לא הועלה",
|
||||||
"Missing a temporary folder" => "תקיה זמנית חסרה",
|
"Missing a temporary folder" => "תקיה זמנית חסרה",
|
||||||
"Failed to write to disk" => "הכתיבה לכונן נכשלה",
|
"Failed to write to disk" => "הכתיבה לכונן נכשלה",
|
||||||
|
"Not enough storage available" => "אין די שטח פנוי באחסון",
|
||||||
|
"Invalid directory." => "תיקייה שגויה.",
|
||||||
"Files" => "קבצים",
|
"Files" => "קבצים",
|
||||||
"Share" => "שתף",
|
"Share" => "שתף",
|
||||||
"Delete permanently" => "מחק לצמיתות",
|
"Delete permanently" => "מחק לצמיתות",
|
||||||
|
@ -19,7 +23,9 @@
|
||||||
"cancel" => "ביטול",
|
"cancel" => "ביטול",
|
||||||
"replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}",
|
"replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}",
|
||||||
"undo" => "ביטול",
|
"undo" => "ביטול",
|
||||||
|
"perform delete operation" => "ביצוע פעולת מחיקה",
|
||||||
"1 file uploading" => "קובץ אחד נשלח",
|
"1 file uploading" => "קובץ אחד נשלח",
|
||||||
|
"files uploading" => "קבצים בהעלאה",
|
||||||
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.",
|
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.",
|
||||||
"Unable to upload your file as it is a directory or has 0 bytes" => "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים",
|
"Unable to upload your file as it is a directory or has 0 bytes" => "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים",
|
||||||
"Upload cancelled." => "ההעלאה בוטלה.",
|
"Upload cancelled." => "ההעלאה בוטלה.",
|
||||||
|
@ -33,6 +39,7 @@
|
||||||
"{count} folders" => "{count} תיקיות",
|
"{count} folders" => "{count} תיקיות",
|
||||||
"1 file" => "קובץ אחד",
|
"1 file" => "קובץ אחד",
|
||||||
"{count} files" => "{count} קבצים",
|
"{count} files" => "{count} קבצים",
|
||||||
|
"Unable to rename file" => "לא ניתן לשנות את שם הקובץ",
|
||||||
"Upload" => "העלאה",
|
"Upload" => "העלאה",
|
||||||
"File handling" => "טיפול בקבצים",
|
"File handling" => "טיפול בקבצים",
|
||||||
"Maximum upload size" => "גודל העלאה מקסימלי",
|
"Maximum upload size" => "גודל העלאה מקסימלי",
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Share" => "साझा करें",
|
||||||
|
"Save" => "सहेजें"
|
||||||
|
);
|
|
@ -1,12 +1,19 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Could not move %s - File with this name already exists" => "Nepavyko perkelti %s - failas su tokiu pavadinimu jau egzistuoja",
|
||||||
|
"Could not move %s" => "Nepavyko perkelti %s",
|
||||||
|
"No file was uploaded. Unknown error" => "Failai nebuvo įkelti dėl nežinomos priežasties",
|
||||||
"There is no error, the file uploaded with success" => "Failas įkeltas sėkmingai, be klaidų",
|
"There is no error, the file uploaded with success" => "Failas įkeltas sėkmingai, be klaidų",
|
||||||
|
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Įkeliamas failas yra didesnis nei leidžia upload_max_filesize php.ini faile:",
|
||||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Įkeliamo failo dydis viršija MAX_FILE_SIZE nustatymą, kuris naudojamas HTML formoje.",
|
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Įkeliamo failo dydis viršija MAX_FILE_SIZE nustatymą, kuris naudojamas HTML formoje.",
|
||||||
"The uploaded file was only partially uploaded" => "Failas buvo įkeltas tik dalinai",
|
"The uploaded file was only partially uploaded" => "Failas buvo įkeltas tik dalinai",
|
||||||
"No file was uploaded" => "Nebuvo įkeltas joks failas",
|
"No file was uploaded" => "Nebuvo įkeltas joks failas",
|
||||||
"Missing a temporary folder" => "Nėra laikinojo katalogo",
|
"Missing a temporary folder" => "Nėra laikinojo katalogo",
|
||||||
"Failed to write to disk" => "Nepavyko įrašyti į diską",
|
"Failed to write to disk" => "Nepavyko įrašyti į diską",
|
||||||
|
"Not enough storage available" => "Nepakanka vietos serveryje",
|
||||||
|
"Invalid directory." => "Neteisingas aplankas",
|
||||||
"Files" => "Failai",
|
"Files" => "Failai",
|
||||||
"Share" => "Dalintis",
|
"Share" => "Dalintis",
|
||||||
|
"Delete permanently" => "Ištrinti negrįžtamai",
|
||||||
"Delete" => "Ištrinti",
|
"Delete" => "Ištrinti",
|
||||||
"Rename" => "Pervadinti",
|
"Rename" => "Pervadinti",
|
||||||
"Pending" => "Laukiantis",
|
"Pending" => "Laukiantis",
|
||||||
|
@ -16,10 +23,21 @@
|
||||||
"cancel" => "atšaukti",
|
"cancel" => "atšaukti",
|
||||||
"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
|
"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
|
||||||
"undo" => "anuliuoti",
|
"undo" => "anuliuoti",
|
||||||
|
"perform delete operation" => "ištrinti",
|
||||||
"1 file uploading" => "įkeliamas 1 failas",
|
"1 file uploading" => "įkeliamas 1 failas",
|
||||||
|
"files uploading" => "įkeliami failai",
|
||||||
|
"'.' is an invalid file name." => "'.' yra neleidžiamas failo pavadinime.",
|
||||||
|
"File name cannot be empty." => "Failo pavadinimas negali būti tuščias.",
|
||||||
|
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami.",
|
||||||
|
"Your storage is full, files can not be updated or synced anymore!" => "Jūsų visa vieta serveryje užimta",
|
||||||
|
"Your storage is almost full ({usedSpacePercent}%)" => "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
|
||||||
|
"Your download is being prepared. This might take some time if the files are big." => "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunčiamas didelis failas.",
|
||||||
"Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas",
|
"Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas",
|
||||||
|
"Not enough space available" => "Nepakanka vietos",
|
||||||
"Upload cancelled." => "Įkėlimas atšauktas.",
|
"Upload cancelled." => "Įkėlimas atšauktas.",
|
||||||
"File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
|
"File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
|
||||||
|
"URL cannot be empty." => "URL negali būti tuščias.",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Negalimas aplanko pavadinimas. 'Shared' pavadinimas yra rezervuotas ownCloud",
|
||||||
"Error" => "Klaida",
|
"Error" => "Klaida",
|
||||||
"Name" => "Pavadinimas",
|
"Name" => "Pavadinimas",
|
||||||
"Size" => "Dydis",
|
"Size" => "Dydis",
|
||||||
|
@ -28,6 +46,8 @@
|
||||||
"{count} folders" => "{count} aplankalai",
|
"{count} folders" => "{count} aplankalai",
|
||||||
"1 file" => "1 failas",
|
"1 file" => "1 failas",
|
||||||
"{count} files" => "{count} failai",
|
"{count} files" => "{count} failai",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Negalimas aplanko pavadinimas. 'Shared' pavadinimas yra rezervuotas ownCloud",
|
||||||
|
"Unable to rename file" => "Nepavyko pervadinti failo",
|
||||||
"Upload" => "Įkelti",
|
"Upload" => "Įkelti",
|
||||||
"File handling" => "Failų tvarkymas",
|
"File handling" => "Failų tvarkymas",
|
||||||
"Maximum upload size" => "Maksimalus įkeliamo failo dydis",
|
"Maximum upload size" => "Maksimalus įkeliamo failo dydis",
|
||||||
|
@ -40,12 +60,16 @@
|
||||||
"New" => "Naujas",
|
"New" => "Naujas",
|
||||||
"Text file" => "Teksto failas",
|
"Text file" => "Teksto failas",
|
||||||
"Folder" => "Katalogas",
|
"Folder" => "Katalogas",
|
||||||
|
"From link" => "Iš nuorodos",
|
||||||
|
"Deleted files" => "Ištrinti failai",
|
||||||
"Cancel upload" => "Atšaukti siuntimą",
|
"Cancel upload" => "Atšaukti siuntimą",
|
||||||
|
"You don’t have write permissions here." => "Jūs neturite rašymo leidimo.",
|
||||||
"Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!",
|
"Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!",
|
||||||
"Download" => "Atsisiųsti",
|
"Download" => "Atsisiųsti",
|
||||||
"Unshare" => "Nebesidalinti",
|
"Unshare" => "Nebesidalinti",
|
||||||
"Upload too large" => "Įkėlimui failas per didelis",
|
"Upload too large" => "Įkėlimui failas per didelis",
|
||||||
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų, kuris leidžiamas šiame serveryje",
|
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų, kuris leidžiamas šiame serveryje",
|
||||||
"Files are being scanned, please wait." => "Skenuojami failai, prašome palaukti.",
|
"Files are being scanned, please wait." => "Skenuojami failai, prašome palaukti.",
|
||||||
"Current scanning" => "Šiuo metu skenuojama"
|
"Current scanning" => "Šiuo metu skenuojama",
|
||||||
|
"Upgrading filesystem cache..." => "Atnaujinamas sistemos kešavimas..."
|
||||||
);
|
);
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
"{count} folders" => "{count} foldare",
|
"{count} folders" => "{count} foldare",
|
||||||
"1 file" => "1 fisier",
|
"1 file" => "1 fisier",
|
||||||
"{count} files" => "{count} fisiere",
|
"{count} files" => "{count} fisiere",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nume de dosar invalid. Utilizarea 'Shared' e rezervată de ownCloud",
|
||||||
"Unable to rename file" => "Nu s-a putut redenumi fișierul",
|
"Unable to rename file" => "Nu s-a putut redenumi fișierul",
|
||||||
"Upload" => "Încărcare",
|
"Upload" => "Încărcare",
|
||||||
"File handling" => "Manipulare fișiere",
|
"File handling" => "Manipulare fișiere",
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
"{count} folders" => "{count} папок",
|
"{count} folders" => "{count} папок",
|
||||||
"1 file" => "1 файл",
|
"1 file" => "1 файл",
|
||||||
"{count} files" => "{count} файлов",
|
"{count} files" => "{count} файлов",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Неправильное имя каталога. Имя 'Shared' зарезервировано.",
|
||||||
"Unable to rename file" => "Невозможно переименовать файл",
|
"Unable to rename file" => "Невозможно переименовать файл",
|
||||||
"Upload" => "Загрузка",
|
"Upload" => "Загрузка",
|
||||||
"File handling" => "Управление файлами",
|
"File handling" => "Управление файлами",
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
"'.' is an invalid file name." => "'.' är ett ogiltigt filnamn.",
|
"'.' is an invalid file name." => "'.' är ett ogiltigt filnamn.",
|
||||||
"File name cannot be empty." => "Filnamn kan inte vara tomt.",
|
"File name cannot be empty." => "Filnamn kan inte vara tomt.",
|
||||||
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
|
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
|
||||||
"Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan ej längre laddas upp eller synkas!",
|
"Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!",
|
||||||
"Your storage is almost full ({usedSpacePercent}%)" => "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)",
|
"Your storage is almost full ({usedSpacePercent}%)" => "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)",
|
||||||
"Your download is being prepared. This might take some time if the files are big." => "Din nedladdning förbereds. Det kan ta tid om det är stora filer.",
|
"Your download is being prepared. This might take some time if the files are big." => "Din nedladdning förbereds. Det kan ta tid om det är stora filer.",
|
||||||
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan inte ladda upp din fil eftersom det är en katalog eller har 0 bytes",
|
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan inte ladda upp din fil eftersom det är en katalog eller har 0 bytes",
|
||||||
|
@ -46,6 +46,7 @@
|
||||||
"{count} folders" => "{count} mappar",
|
"{count} folders" => "{count} mappar",
|
||||||
"1 file" => "1 fil",
|
"1 file" => "1 fil",
|
||||||
"{count} files" => "{count} filer",
|
"{count} files" => "{count} filer",
|
||||||
|
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ogiltigt mappnamn. Användning av 'Shared' är reserverad av ownCloud",
|
||||||
"Unable to rename file" => "Kan inte byta namn på filen",
|
"Unable to rename file" => "Kan inte byta namn på filen",
|
||||||
"Upload" => "Ladda upp",
|
"Upload" => "Ladda upp",
|
||||||
"File handling" => "Filhantering",
|
"File handling" => "Filhantering",
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
<?php foreach($_['files'] as $file):
|
<?php foreach($_['files'] as $file):
|
||||||
$simple_file_size = OCP\simple_file_size($file['size']);
|
$simple_file_size = OCP\simple_file_size($file['size']);
|
||||||
// the bigger the file, the darker the shade of grey; megabytes*2
|
// the bigger the file, the darker the shade of grey; megabytes*2
|
||||||
$simple_size_color = intval(200-$file['size']/(1024*1024)*2);
|
$simple_size_color = intval(160-$file['size']/(1024*1024)*2);
|
||||||
if($simple_size_color<0) $simple_size_color = 0;
|
if($simple_size_color<0) $simple_size_color = 0;
|
||||||
$relative_modified_date = OCP\relative_modified_date($file['mtime']);
|
$relative_modified_date = OCP\relative_modified_date($file['mtime']);
|
||||||
// the older the file, the brighter the shade of grey; days*14
|
// the older the file, the brighter the shade of grey; days*14
|
||||||
$relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
|
$relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
|
||||||
if($relative_date_color>200) $relative_date_color = 200;
|
if($relative_date_color>160) $relative_date_color = 160;
|
||||||
$name = rawurlencode($file['name']);
|
$name = rawurlencode($file['name']);
|
||||||
$name = str_replace('%2F', '/', $name);
|
$name = str_replace('%2F', '/', $name);
|
||||||
$directory = rawurlencode($file['directory']);
|
$directory = rawurlencode($file['directory']);
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../../lib/base.php';
|
||||||
|
|
||||||
|
if (OC::$CLI) {
|
||||||
|
if (count($argv) === 2) {
|
||||||
|
$file = $argv[1];
|
||||||
|
list(, $user) = explode('/', $file);
|
||||||
|
OC_Util::setupFS($user);
|
||||||
|
$view = new \OC\Files\View('');
|
||||||
|
/**
|
||||||
|
* @var \OC\Files\Storage\Storage $storage
|
||||||
|
*/
|
||||||
|
list($storage, $internalPath) = $view->resolvePath($file);
|
||||||
|
$watcher = $storage->getWatcher($internalPath);
|
||||||
|
$watcher->checkUpdate($internalPath);
|
||||||
|
} else {
|
||||||
|
echo "Usage: php triggerupdate.php /path/to/file\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo "This script can be run from the command line only\n";
|
||||||
|
}
|
|
@ -22,28 +22,28 @@ $return = false;
|
||||||
$oldPassword = $_POST['oldPassword'];
|
$oldPassword = $_POST['oldPassword'];
|
||||||
$newPassword = $_POST['newPassword'];
|
$newPassword = $_POST['newPassword'];
|
||||||
|
|
||||||
|
$view = new \OC\Files\View('/');
|
||||||
$util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), \OCP\User::getUser());
|
$util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), \OCP\User::getUser());
|
||||||
|
|
||||||
$result = $util->checkRecoveryPassword($oldPassword);
|
$proxyStatus = \OC_FileProxy::$enabled;
|
||||||
|
\OC_FileProxy::$enabled = false;
|
||||||
|
|
||||||
if ($result) {
|
$keyId = $util->getRecoveryKeyId();
|
||||||
$keyId = $util->getRecoveryKeyId();
|
$keyPath = '/owncloud_private_key/' . $keyId . '.private.key';
|
||||||
$keyPath = '/owncloud_private_key/' . $keyId . '.private.key';
|
|
||||||
$view = new \OC\Files\View('/');
|
|
||||||
|
|
||||||
$proxyStatus = \OC_FileProxy::$enabled;
|
$encryptedRecoveryKey = $view->file_get_contents($keyPath);
|
||||||
\OC_FileProxy::$enabled = false;
|
$decryptedRecoveryKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedRecoveryKey, $oldPassword);
|
||||||
|
|
||||||
|
if ($decryptedRecoveryKey) {
|
||||||
|
|
||||||
$encryptedRecoveryKey = $view->file_get_contents($keyPath);
|
|
||||||
$decryptedRecoveryKey = \OCA\Encryption\Crypt::symmetricDecryptFileContent($encryptedRecoveryKey, $oldPassword);
|
|
||||||
$encryptedRecoveryKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($decryptedRecoveryKey, $newPassword);
|
$encryptedRecoveryKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($decryptedRecoveryKey, $newPassword);
|
||||||
$view->file_put_contents($keyPath, $encryptedRecoveryKey);
|
$view->file_put_contents($keyPath, $encryptedRecoveryKey);
|
||||||
|
|
||||||
\OC_FileProxy::$enabled = $proxyStatus;
|
|
||||||
|
|
||||||
$return = true;
|
$return = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
|
|
||||||
// success or failure
|
// success or failure
|
||||||
if ($return) {
|
if ($return) {
|
||||||
\OCP\JSON::success(array('data' => array('message' => $l->t('Password successfully changed.'))));
|
\OCP\JSON::success(array('data' => array('message' => $l->t('Password successfully changed.'))));
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2013, Bjoern Schiessle <schiessle@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*
|
||||||
|
* @brief Script to change recovery key password
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
use OCA\Encryption;
|
||||||
|
|
||||||
|
\OCP\JSON::checkLoggedIn();
|
||||||
|
\OCP\JSON::checkAppEnabled('files_encryption');
|
||||||
|
\OCP\JSON::callCheck();
|
||||||
|
|
||||||
|
$l = OC_L10N::get('core');
|
||||||
|
|
||||||
|
$return = false;
|
||||||
|
|
||||||
|
$oldPassword = $_POST['oldPassword'];
|
||||||
|
$newPassword = $_POST['newPassword'];
|
||||||
|
|
||||||
|
$view = new \OC\Files\View('/');
|
||||||
|
$session = new \OCA\Encryption\Session($view);
|
||||||
|
$user = \OCP\User::getUser();
|
||||||
|
|
||||||
|
$proxyStatus = \OC_FileProxy::$enabled;
|
||||||
|
\OC_FileProxy::$enabled = false;
|
||||||
|
|
||||||
|
$keyPath = '/' . $user . '/files_encryption/' . $user . '.private.key';
|
||||||
|
|
||||||
|
$encryptedKey = $view->file_get_contents($keyPath);
|
||||||
|
$decryptedKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, $oldPassword);
|
||||||
|
|
||||||
|
if ($decryptedKey) {
|
||||||
|
|
||||||
|
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($decryptedKey, $newPassword);
|
||||||
|
$view->file_put_contents($keyPath, $encryptedKey);
|
||||||
|
|
||||||
|
$session->setPrivateKey($decryptedKey);
|
||||||
|
|
||||||
|
$return = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
|
|
||||||
|
// success or failure
|
||||||
|
if ($return) {
|
||||||
|
\OCP\JSON::success(array('data' => array('message' => $l->t('Private key password successfully updated.'))));
|
||||||
|
} else {
|
||||||
|
\OCP\JSON::error(array('data' => array('message' => $l->t('Could not update the private key password. Maybe the old password was not correct.'))));
|
||||||
|
}
|
|
@ -10,34 +10,41 @@ OC::$CLASSPATH['OCA\Encryption\Session'] = 'files_encryption/lib/session.php';
|
||||||
OC::$CLASSPATH['OCA\Encryption\Capabilities'] = 'files_encryption/lib/capabilities.php';
|
OC::$CLASSPATH['OCA\Encryption\Capabilities'] = 'files_encryption/lib/capabilities.php';
|
||||||
OC::$CLASSPATH['OCA\Encryption\Helper'] = 'files_encryption/lib/helper.php';
|
OC::$CLASSPATH['OCA\Encryption\Helper'] = 'files_encryption/lib/helper.php';
|
||||||
|
|
||||||
OC_FileProxy::register(new OCA\Encryption\Proxy());
|
if (!OC_Config::getValue('maintenance', false)) {
|
||||||
|
OC_FileProxy::register(new OCA\Encryption\Proxy());
|
||||||
|
|
||||||
// User related hooks
|
// User related hooks
|
||||||
OCA\Encryption\Helper::registerUserHooks();
|
OCA\Encryption\Helper::registerUserHooks();
|
||||||
|
|
||||||
// Sharing related hooks
|
// Sharing related hooks
|
||||||
OCA\Encryption\Helper::registerShareHooks();
|
OCA\Encryption\Helper::registerShareHooks();
|
||||||
|
|
||||||
// Filesystem related hooks
|
// Filesystem related hooks
|
||||||
OCA\Encryption\Helper::registerFilesystemHooks();
|
OCA\Encryption\Helper::registerFilesystemHooks();
|
||||||
|
|
||||||
stream_wrapper_register('crypt', 'OCA\Encryption\Stream');
|
stream_wrapper_register('crypt', 'OCA\Encryption\Stream');
|
||||||
|
|
||||||
// check if we are logged in
|
// check if we are logged in
|
||||||
if (OCP\User::isLoggedIn()) {
|
if (OCP\User::isLoggedIn()) {
|
||||||
|
|
||||||
// ensure filesystem is loaded
|
// ensure filesystem is loaded
|
||||||
if(!\OC\Files\Filesystem::$loaded) {
|
if (!\OC\Files\Filesystem::$loaded) {
|
||||||
\OC_Util::setupFS();
|
\OC_Util::setupFS();
|
||||||
}
|
}
|
||||||
|
|
||||||
$view = new OC_FilesystemView('/');
|
$view = new OC_FilesystemView('/');
|
||||||
$session = new \OCA\Encryption\Session($view);
|
|
||||||
|
|
||||||
|
$sessionReady = false;
|
||||||
|
if(extension_loaded("openssl")) {
|
||||||
|
$session = new \OCA\Encryption\Session($view);
|
||||||
|
$sessionReady = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = \OCP\USER::getUser();
|
||||||
// check if user has a private key
|
// check if user has a private key
|
||||||
if (
|
if ($sessionReady === false
|
||||||
!$session->getPrivateKey(\OCP\USER::getUser())
|
|| (!$view->file_exists('/' . $user . '/files_encryption/' . $user . '.private.key')
|
||||||
&& OCA\Encryption\Crypt::mode() === 'server'
|
&& OCA\Encryption\Crypt::mode() === 'server')
|
||||||
) {
|
) {
|
||||||
|
|
||||||
// Force the user to log-in again if the encryption key isn't unlocked
|
// Force the user to log-in again if the encryption key isn't unlocked
|
||||||
|
@ -49,6 +56,10 @@ if (OCP\User::isLoggedIn()) {
|
||||||
|
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// logout user if we are in maintenance to force re-login
|
||||||
|
OCP\User::logout();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register settings scripts
|
// Register settings scripts
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<info>
|
<info>
|
||||||
<id>files_encryption</id>
|
<id>files_encryption</id>
|
||||||
<name>Encryption</name>
|
<name>Encryption</name>
|
||||||
<description>WARNING: This is a preview release of the new ownCloud 5 encryption system. Testing and feedback is very welcome but don't use this in production yet. Encryption is not yet compatible with LDAP.</description>
|
<description>WARNING: This is a preview release of the new ownCloud 5 encryption system. Testing and feedback is very welcome but don't use this in production yet. After the app was enabled you need to re-login to initialize your encryption keys</description>
|
||||||
<licence>AGPL</licence>
|
<licence>AGPL</licence>
|
||||||
<author>Sam Tuke, Bjoern Schiessle, Florin Peter</author>
|
<author>Sam Tuke, Bjoern Schiessle, Florin Peter</author>
|
||||||
<require>4</require>
|
<require>4</require>
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
if (!isset($_)) { //also provide standalone error page
|
||||||
|
require_once '../../../lib/base.php';
|
||||||
|
|
||||||
|
$l = OC_L10N::get('files_encryption');
|
||||||
|
|
||||||
|
$errorMsg = $l->t('Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files');
|
||||||
|
|
||||||
|
if(isset($_GET['p']) && $_GET['p'] === '1') {
|
||||||
|
header('HTTP/1.0 404 ' . $errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if ajax request
|
||||||
|
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
|
||||||
|
\OCP\JSON::error(array('data' => array('message' => $errorMsg)));
|
||||||
|
} else {
|
||||||
|
header('HTTP/1.0 404 ' . $errorMsg);
|
||||||
|
$tmpl = new OC_Template('files_encryption', 'invalid_private_key', 'guest');
|
||||||
|
$tmpl->printPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
|
@ -38,11 +38,15 @@ class Hooks {
|
||||||
* @note This method should never be called for users using client side encryption
|
* @note This method should never be called for users using client side encryption
|
||||||
*/
|
*/
|
||||||
public static function login($params) {
|
public static function login($params) {
|
||||||
|
$l = new \OC_L10N('files_encryption');
|
||||||
// Manually initialise Filesystem{} singleton with correct
|
//check if openssl is available
|
||||||
// fake root path, in order to avoid fatal webdav errors
|
if(!extension_loaded("openssl") ) {
|
||||||
// NOTE: disabled because this give errors on webdav!
|
$error_msg = $l->t("PHP module OpenSSL is not installed.");
|
||||||
//\OC\Files\Filesystem::init( $params['uid'], '/' . 'files' . '/' );
|
$hint = $l->t('Please ask your server administrator to install the module. For now the encryption app was disabled.');
|
||||||
|
\OC_App::disable('files_encryption');
|
||||||
|
\OCP\Util::writeLog('Encryption library', $error_msg . ' ' . $hint, \OCP\Util::ERROR);
|
||||||
|
\OCP\Template::printErrorPage($error_msg, $hint);
|
||||||
|
}
|
||||||
|
|
||||||
$view = new \OC_FilesystemView('/');
|
$view = new \OC_FilesystemView('/');
|
||||||
|
|
||||||
|
@ -60,17 +64,25 @@ class Hooks {
|
||||||
|
|
||||||
$encryptedKey = Keymanager::getPrivateKey($view, $params['uid']);
|
$encryptedKey = Keymanager::getPrivateKey($view, $params['uid']);
|
||||||
|
|
||||||
$privateKey = Crypt::symmetricDecryptFileContent($encryptedKey, $params['password']);
|
$privateKey = Crypt::decryptPrivateKey($encryptedKey, $params['password']);
|
||||||
|
|
||||||
|
if ($privateKey === false) {
|
||||||
|
\OCP\Util::writeLog('Encryption library', 'Private key for user "' . $params['uid']
|
||||||
|
. '" is not valid! Maybe the user password was changed from outside if so please change it back to gain access', \OCP\Util::ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
$session = new \OCA\Encryption\Session($view);
|
$session = new \OCA\Encryption\Session($view);
|
||||||
|
|
||||||
$session->setPrivateKey($privateKey, $params['uid']);
|
$session->setPrivateKey($privateKey);
|
||||||
|
|
||||||
// Check if first-run file migration has already been performed
|
// Check if first-run file migration has already been performed
|
||||||
$migrationCompleted = $util->getMigrationStatus();
|
$ready = false;
|
||||||
|
if ($util->getMigrationStatus() === Util::MIGRATION_OPEN) {
|
||||||
|
$ready = $util->beginMigration();
|
||||||
|
}
|
||||||
|
|
||||||
// If migration not yet done
|
// If migration not yet done
|
||||||
if (!$migrationCompleted) {
|
if ($ready) {
|
||||||
|
|
||||||
$userView = new \OC_FilesystemView('/' . $params['uid']);
|
$userView = new \OC_FilesystemView('/' . $params['uid']);
|
||||||
|
|
||||||
|
@ -81,7 +93,7 @@ class Hooks {
|
||||||
&& $encLegacyKey = $userView->file_get_contents('encryption.key')
|
&& $encLegacyKey = $userView->file_get_contents('encryption.key')
|
||||||
) {
|
) {
|
||||||
|
|
||||||
$plainLegacyKey = Crypt::legacyBlockDecrypt($encLegacyKey, $params['password']);
|
$plainLegacyKey = Crypt::legacyDecrypt($encLegacyKey, $params['password']);
|
||||||
|
|
||||||
$session->setLegacyKey($plainLegacyKey);
|
$session->setLegacyKey($plainLegacyKey);
|
||||||
|
|
||||||
|
@ -102,7 +114,7 @@ class Hooks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register successful migration in DB
|
// Register successful migration in DB
|
||||||
$util->setMigrationStatus(1);
|
$util->finishMigration();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,6 +153,15 @@ class Hooks {
|
||||||
\OC_FileProxy::$enabled = $proxyStatus;
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief If the password can't be changed within ownCloud, than update the key password in advance.
|
||||||
|
*/
|
||||||
|
public static function preSetPassphrase($params) {
|
||||||
|
if ( ! \OC_User::canUserChangePassword($params['uid']) ) {
|
||||||
|
self::setPassphrase($params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Change a user's encryption passphrase
|
* @brief Change a user's encryption passphrase
|
||||||
* @param array $params keys: uid, password
|
* @param array $params keys: uid, password
|
||||||
|
@ -333,7 +354,7 @@ class Hooks {
|
||||||
$sharingEnabled = \OCP\Share::isEnabled();
|
$sharingEnabled = \OCP\Share::isEnabled();
|
||||||
|
|
||||||
// get the path including mount point only if not a shared folder
|
// get the path including mount point only if not a shared folder
|
||||||
if(strncmp($path, '/Shared' , strlen('/Shared') !== 0)) {
|
if (strncmp($path, '/Shared', strlen('/Shared') !== 0)) {
|
||||||
// get path including the the storage mount point
|
// get path including the the storage mount point
|
||||||
$path = $util->getPathWithMountPoint($params['itemSource']);
|
$path = $util->getPathWithMountPoint($params['itemSource']);
|
||||||
}
|
}
|
||||||
|
@ -410,14 +431,14 @@ class Hooks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the path including mount point only if not a shared folder
|
// get the path including mount point only if not a shared folder
|
||||||
if(strncmp($path, '/Shared' , strlen('/Shared') !== 0)) {
|
if (strncmp($path, '/Shared', strlen('/Shared') !== 0)) {
|
||||||
// get path including the the storage mount point
|
// get path including the the storage mount point
|
||||||
$path = $util->getPathWithMountPoint($params['itemSource']);
|
$path = $util->getPathWithMountPoint($params['itemSource']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we unshare a folder we need a list of all (sub-)files
|
// if we unshare a folder we need a list of all (sub-)files
|
||||||
if ($params['itemType'] === 'folder') {
|
if ($params['itemType'] === 'folder') {
|
||||||
$allFiles = $util->getAllFiles( $path );
|
$allFiles = $util->getAllFiles($path);
|
||||||
} else {
|
} else {
|
||||||
$allFiles = array($path);
|
$allFiles = array($path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,25 @@
|
||||||
* See the COPYING-README file.
|
* See the COPYING-README file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
function updatePrivateKeyPasswd() {
|
||||||
|
var oldPrivateKeyPassword = $('input:password[id="oldPrivateKeyPassword"]').val();
|
||||||
|
var newPrivateKeyPassword = $('input:password[id="newPrivateKeyPassword"]').val();
|
||||||
|
OC.msg.startSaving('#encryption .msg');
|
||||||
|
$.post(
|
||||||
|
OC.filePath( 'files_encryption', 'ajax', 'updatePrivateKeyPassword.php' )
|
||||||
|
, { oldPassword: oldPrivateKeyPassword, newPassword: newPrivateKeyPassword }
|
||||||
|
, function( data ) {
|
||||||
|
if (data.status === "error") {
|
||||||
|
OC.msg.finishedSaving('#encryption .msg', data);
|
||||||
|
} else {
|
||||||
|
OC.msg.finishedSaving('#encryption .msg', data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|
||||||
// Trigger ajax on recoveryAdmin status change
|
// Trigger ajax on recoveryAdmin status change
|
||||||
$( 'input:radio[name="userEnableRecovery"]' ).change(
|
$( 'input:radio[name="userEnableRecovery"]' ).change(
|
||||||
function() {
|
function() {
|
||||||
|
@ -57,4 +75,24 @@ $(document).ready(function(){
|
||||||
}
|
}
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// update private key password
|
||||||
|
|
||||||
|
$('input:password[name="changePrivateKeyPassword"]').keyup(function(event) {
|
||||||
|
var oldPrivateKeyPassword = $('input:password[id="oldPrivateKeyPassword"]').val();
|
||||||
|
var newPrivateKeyPassword = $('input:password[id="newPrivateKeyPassword"]').val();
|
||||||
|
if (newPrivateKeyPassword !== '' && oldPrivateKeyPassword !== '' ) {
|
||||||
|
$('button:button[name="submitChangePrivateKeyPassword"]').removeAttr("disabled");
|
||||||
|
if(event.which === 13) {
|
||||||
|
updatePrivateKeyPasswd();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$('button:button[name="submitChangePrivateKeyPassword"]').attr("disabled", "true");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('button:button[name="submitChangePrivateKeyPassword"]').click(function() {
|
||||||
|
updatePrivateKeyPasswd();
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,4 +1,29 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "La clau de recuperació s'ha activat",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "No s'ha pogut activar la clau de recuperació. Comproveu contrasenya de la clau de recuperació!",
|
||||||
|
"Recovery key successfully disabled" => "La clau de recuperació s'ha descativat",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "No s'ha pogut desactivar la calu de recuperació. Comproveu la contrasenya de la clau de recuperació!",
|
||||||
|
"Password successfully changed." => "La contrasenya s'ha canviat.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "No s'ha pogut canviar la contrasenya. Potser la contrasenya anterior no era correcta.",
|
||||||
|
"Private key password successfully updated." => "La contrasenya de la clau privada s'ha actualitzat.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "No s'ha pogut actualitzar la contrasenya de la clau privada. Potser la contrasenya anterior no era correcta.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "La clau privada no és vàlida! Potser la contrasenya ha canviat des de fora. Podeu actualitzar la contrasenya de la clau privada a l'arranjament personal per obtenir de nou accés als vostres fitxers",
|
||||||
"Saving..." => "Desant...",
|
"Saving..." => "Desant...",
|
||||||
"Encryption" => "Xifrat"
|
"Your private key is not valid! Maybe the your password was changed from outside." => "La vostra clau privada no és vàlida! Potser la vostra contrasenya ha canviat des de fora.",
|
||||||
|
"You can unlock your private key in your " => "Podeu desbloquejar la clau privada en el vostre",
|
||||||
|
"personal settings" => "arranjament personal",
|
||||||
|
"Encryption" => "Xifrat",
|
||||||
|
"Enabled" => "Activat",
|
||||||
|
"Disabled" => "Desactivat",
|
||||||
|
"Change Password" => "Canvia la contrasenya",
|
||||||
|
"Your private key password no longer match your log-in password:" => "La clau privada ja no es correspon amb la contrasenya d'accés:",
|
||||||
|
"Set your old private key password to your current log-in password." => "Establiu la vostra contrasenya clau en funció de la contrasenya actual d'accés.",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Si no recordeu la contrasenya anterior podeu demanar a l'administrador que recuperi els vostres fitxers.",
|
||||||
|
"Old log-in password" => "Contrasenya anterior d'accés",
|
||||||
|
"Current log-in password" => "Contrasenya d'accés actual",
|
||||||
|
"Update Private Key Password" => "Actualitza la contrasenya de clau privada",
|
||||||
|
"Enable password recovery:" => "Habilita la recuperació de contrasenya:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Activar aquesta opció us permetrà obtenir de nou accés als vostres fitxers encriptats en cas de perdre la contrasenya",
|
||||||
|
"File recovery settings updated" => "S'han actualitzat els arranjaments de recuperació de fitxers",
|
||||||
|
"Could not update file recovery" => "No s'ha pogut actualitzar la recuperació de fitxers"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,20 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Záchranný klíč byl úspěšně povolen",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Nepodařilo se povolit záchranný klíč. Zkontrolujte prosím vaše heslo záchranného klíče!",
|
||||||
|
"Recovery key successfully disabled" => "Záchranný klíč byl úspěšně zakázán",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Nelze zakázat záchranný klíč. Zkontrolujte prosím heslo vašeho záchranného klíče.",
|
||||||
|
"Password successfully changed." => "Heslo bylo úspěšně změněno.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Nelze změnit heslo. Pravděpodobně nebylo stávající heslo zadáno správně.",
|
||||||
|
"Private key password successfully updated." => "Heslo soukromého klíče úspěšně aktualizováno.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Nelze aktualizovat heslo soukromého klíče. Možná nebylo staré heslo správně.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "Váš soukromý klíč není platný. Možná bylo vaše heslo změněno z venku. Můžete aktualizovat heslo soukromého klíče v osobním nastavení pro opětovné získání přístupu k souborům",
|
||||||
"Saving..." => "Ukládám...",
|
"Saving..." => "Ukládám...",
|
||||||
"Encryption" => "Šifrování"
|
"Encryption" => "Šifrování",
|
||||||
|
"Enabled" => "Povoleno",
|
||||||
|
"Disabled" => "Zakázáno",
|
||||||
|
"Change Password" => "Změnit heslo",
|
||||||
|
"Enable password recovery:" => "Povolit obnovu hesla:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Povolení vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
|
||||||
|
"File recovery settings updated" => "Možnosti obnovy souborů aktualizovány",
|
||||||
|
"Could not update file recovery" => "Nelze aktualizovat obnovu souborů"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,18 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Wiederherstellungsschlüssel wurde erfolgreich aktiviert",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Überprüfen Sie Ihr Wiederherstellungspasswort!",
|
||||||
|
"Recovery key successfully disabled" => "Wiederherstellungsschlüssel deaktiviert.",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Überprüfen Sie Ihr Wiederherstellungspasswort!",
|
||||||
|
"Password successfully changed." => "Dein Passwort wurde geändert.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.",
|
||||||
|
"Private key password successfully updated." => "Passwort des privaten Schlüssels erfolgreich aktualisiert",
|
||||||
"Saving..." => "Speichern...",
|
"Saving..." => "Speichern...",
|
||||||
"Encryption" => "Verschlüsselung"
|
"personal settings" => "Private Einstellungen",
|
||||||
|
"Encryption" => "Verschlüsselung",
|
||||||
|
"Enabled" => "Aktiviert",
|
||||||
|
"Disabled" => "Deaktiviert",
|
||||||
|
"Change Password" => "Passwort ändern",
|
||||||
|
"Old log-in password" => "Altes login Passwort",
|
||||||
|
"Current log-in password" => "Aktuelles Passwort",
|
||||||
|
"File recovery settings updated" => "Einstellungen zur Wiederherstellung von Dateien wurden aktualisiert"
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,15 +5,22 @@
|
||||||
"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
|
"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
|
||||||
"Password successfully changed." => "Das Passwort wurde erfolgreich geändert.",
|
"Password successfully changed." => "Das Passwort wurde erfolgreich geändert.",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.",
|
"Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.",
|
||||||
|
"Private key password successfully updated." => "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Vielleicht war das alte Passwort nicht richtig.",
|
||||||
|
"PHP module OpenSSL is not installed." => "Das PHP-Modul OpenSSL ist nicht installiert.",
|
||||||
|
"Please ask your server administrator to install the module. For now the encryption app was disabled." => "Bitte fragen Sie Ihren Server-Administrator, das entsprechende Modul zu installieren. Bis dahin wurde die Anwendung zur Verschlüsselung deaktiviert.",
|
||||||
"Saving..." => "Speichern...",
|
"Saving..." => "Speichern...",
|
||||||
|
"Your private key is not valid! Maybe the your password was changed from outside." => "Ihr privater Schlüssel ist ungültig! Vielleicht wurde Ihr Passwort von außerhalb geändert.",
|
||||||
|
"personal settings" => "Persönliche Einstellungen",
|
||||||
"Encryption" => "Verschlüsselung",
|
"Encryption" => "Verschlüsselung",
|
||||||
"Recovery account password" => "Account-Passwort wiederherstellen",
|
|
||||||
"Enabled" => "Aktiviert",
|
"Enabled" => "Aktiviert",
|
||||||
"Disabled" => "Deaktiviert",
|
"Disabled" => "Deaktiviert",
|
||||||
"Old Recovery account password" => "Altes Passwort für die Account-Wiederherstellung",
|
|
||||||
"New Recovery account password" => "Neues Passwort für die Account-Wiederherstellung",
|
|
||||||
"Change Password" => "Passwort ändern",
|
"Change Password" => "Passwort ändern",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Falls Sie sich nicht an Ihr altes Passwort erinnern können, fragen Sie bitte Ihren Administrator, um Ihre Dateien wiederherzustellen.",
|
||||||
|
"Old log-in password" => "Altes Login-Passwort",
|
||||||
|
"Current log-in password" => "Momentanes Login-Passwort",
|
||||||
|
"Update Private Key Password" => "Das Passwort des privaten Schlüssels aktualisieren",
|
||||||
|
"Enable password recovery:" => "Passwort-Wiederherstellung aktivieren:",
|
||||||
"File recovery settings updated" => "Die Einstellungen für die Dateiwiederherstellung wurden aktualisiert.",
|
"File recovery settings updated" => "Die Einstellungen für die Dateiwiederherstellung wurden aktualisiert.",
|
||||||
"Could not update file recovery" => "Die Dateiwiederherstellung konnte nicht aktualisiert werden."
|
"Could not update file recovery" => "Die Dateiwiederherstellung konnte nicht aktualisiert werden."
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,11 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Password successfully changed." => "Ο κωδικός αλλάχτηκε επιτυχώς.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Αποτυχία αλλαγής κωδικού ίσως ο παλιός κωδικός να μην ήταν σωστός.",
|
||||||
"Saving..." => "Γίνεται αποθήκευση...",
|
"Saving..." => "Γίνεται αποθήκευση...",
|
||||||
"Encryption" => "Κρυπτογράφηση"
|
"personal settings" => "προσωπικές ρυθμίσεις",
|
||||||
|
"Encryption" => "Κρυπτογράφηση",
|
||||||
|
"Enabled" => "Ενεργοποιημένο",
|
||||||
|
"Disabled" => "Απενεργοποιημένο",
|
||||||
|
"Change Password" => "Αλλαγή Κωδικού Πρόσβασης",
|
||||||
|
"File recovery settings updated" => "Οι ρυθμίσεις επαναφοράς αρχείων ανανεώθηκαν"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,16 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Password successfully changed." => "La pasvorto sukcese ŝanĝiĝis.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Ne eblis ŝanĝi la pasvorton. Eble la malnova pasvorto malĝustis.",
|
||||||
|
"Private key password successfully updated." => "La pasvorto de la malpublika klavo sukcese ĝisdatiĝis.",
|
||||||
|
"PHP module OpenSSL is not installed." => "La PHP-modulo OpenSSL ne instalitas.",
|
||||||
"Saving..." => "Konservante...",
|
"Saving..." => "Konservante...",
|
||||||
"Encryption" => "Ĉifrado"
|
"personal settings" => "persona agordo",
|
||||||
|
"Encryption" => "Ĉifrado",
|
||||||
|
"Enabled" => "Kapabligita",
|
||||||
|
"Disabled" => "Malkapabligita",
|
||||||
|
"Change Password" => "Ŝarĝi pasvorton",
|
||||||
|
"Your private key password no longer match your log-in password:" => "La pasvorto de via malpublika klavo ne plu kongruas kun via ensaluta pasvorto:",
|
||||||
|
"Old log-in password" => "Malnova ensaluta pasvorto",
|
||||||
|
"Current log-in password" => "Nuna ensaluta pasvorto",
|
||||||
|
"Update Private Key Password" => "Ĝisdatigi la pasvorton de la malpublika klavo"
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,18 +5,14 @@
|
||||||
"Could not disable recovery key. Please check your recovery key password!" => "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
|
"Could not disable recovery key. Please check your recovery key password!" => "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
|
||||||
"Password successfully changed." => "Su contraseña ha sido cambiada",
|
"Password successfully changed." => "Su contraseña ha sido cambiada",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
|
"Could not change the password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
|
||||||
|
"Private key password successfully updated." => "Contraseña de clave privada actualizada con éxito.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Puede que la contraseña antigua no sea correcta.",
|
||||||
"Saving..." => "Guardando...",
|
"Saving..." => "Guardando...",
|
||||||
"Encryption" => "Cifrado",
|
"Encryption" => "Cifrado",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "Habilitar clave de recuperación de contraseñas ():",
|
|
||||||
"Recovery account password" => "Recuperar contraseña",
|
|
||||||
"Enabled" => "Habilitar",
|
"Enabled" => "Habilitar",
|
||||||
"Disabled" => "Deshabilitado",
|
"Disabled" => "Deshabilitado",
|
||||||
"Change encryption passwords recovery key:" => "Cambiar clave de cifrado de contraseñas:",
|
|
||||||
"Old Recovery account password" => "Contraseña de recuperación actual",
|
|
||||||
"New Recovery account password" => "Contraseña de recuperación nueva",
|
|
||||||
"Change Password" => "Cambiar contraseña",
|
"Change Password" => "Cambiar contraseña",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "Habilitar recuperación de contraseña compartiendo todos los archivos con su administrador",
|
"Enable password recovery:" => "Habilitar la recuperación de contraseña:",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "Habilitar esta opción para poder acceder a sus archivos cifrados si pierde su contraseña",
|
|
||||||
"File recovery settings updated" => "Opciones de recuperación de archivos actualizada",
|
"File recovery settings updated" => "Opciones de recuperación de archivos actualizada",
|
||||||
"Could not update file recovery" => "No se pudo actualizar la recuperación de archivos"
|
"Could not update file recovery" => "No se pudo actualizar la recuperación de archivos"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,36 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Se habilitó la recuperación de archivos",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "No se pudo habilitar la clave de recuperación. Por favor, comprobá tu contraseña.",
|
||||||
|
"Recovery key successfully disabled" => "Clave de recuperación deshabilitada",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "No fue posible deshabilitar la clave de recuperación. Por favor, comprobá tu contraseña.",
|
||||||
|
"Password successfully changed." => "Tu contraseña fue cambiada",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Comprobá que la contraseña actual sea correcta.",
|
||||||
|
"Private key password successfully updated." => "Contraseña de clave privada actualizada con éxito.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "No fue posible actualizar la contraseña de la clave privada. Tal vez la contraseña antigua no es correcta.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "¡Tu clave privada no es válida! Tal vez tu contraseña fue cambiada de alguna manera. Podés actualizar tu clave privada de contraseña en 'configuración personal' para tener acceso nuevamente a tus archivos",
|
||||||
|
"PHP module OpenSSL is not installed." => "El módulo OpenSSL para PHP no está instalado.",
|
||||||
|
"Please ask your server administrator to install the module. For now the encryption app was disabled." => "Pedile al administrador del servidor que instale el módulo. Por ahora la App de encriptación está deshabilitada.",
|
||||||
"Saving..." => "Guardando...",
|
"Saving..." => "Guardando...",
|
||||||
"Encryption" => "Encriptación"
|
"Your private key is not valid! Maybe the your password was changed from outside." => "¡Tu clave privada no es válida! Tal vez tu contraseña fue cambiada desde afuera.",
|
||||||
|
"You can unlock your private key in your " => "Podés desbloquear tu clave privada en tu",
|
||||||
|
"personal settings" => "Configuración personal",
|
||||||
|
"Encryption" => "Encriptación",
|
||||||
|
"Enable recovery key (allow to recover users files in case of password loss):" => "Habilitar clave de recuperación (te permite recuperar los archivos de usuario en el caso en que pierdas la contraseña):",
|
||||||
|
"Recovery key password" => "Contraseña de recuperación de clave",
|
||||||
|
"Enabled" => "Habilitado",
|
||||||
|
"Disabled" => "Deshabilitado",
|
||||||
|
"Change recovery key password:" => "Cambiar contraseña para recuperar la clave:",
|
||||||
|
"Old Recovery key password" => "Contraseña antigua de recuperación de clave",
|
||||||
|
"New Recovery key password" => "Nueva contraseña de recuperación de clave",
|
||||||
|
"Change Password" => "Cambiar contraseña",
|
||||||
|
"Your private key password no longer match your log-in password:" => "Tu contraseña de recuperación de clave ya no coincide con la contraseña de ingreso:",
|
||||||
|
"Set your old private key password to your current log-in password." => "Usá tu contraseña de recuperación de clave antigua para tu contraseña de ingreso actual.",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Si no te acordás de tu contraseña antigua, pedile al administrador que recupere tus archivos",
|
||||||
|
"Old log-in password" => "Contraseña anterior",
|
||||||
|
"Current log-in password" => "Contraseña actual",
|
||||||
|
"Update Private Key Password" => "Actualizar contraseña de la clave privada",
|
||||||
|
"Enable password recovery:" => "Habilitar contraseña de recuperación:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Habilitando esta opción te va a permitir tener acceso a tus archivos encriptados incluso si perdés la contraseña",
|
||||||
|
"File recovery settings updated" => "Las opciones de recuperación de archivos fueron actualizadas",
|
||||||
|
"Could not update file recovery" => "No fue posible actualizar la recuperación de archivos"
|
||||||
);
|
);
|
||||||
|
|
|
@ -7,16 +7,9 @@
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.",
|
"Could not change the password. Maybe the old password was not correct." => "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.",
|
||||||
"Saving..." => "Salvestamine...",
|
"Saving..." => "Salvestamine...",
|
||||||
"Encryption" => "Krüpteerimine",
|
"Encryption" => "Krüpteerimine",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "Luba krüpteerimise paroolide taastevõti (võimalda parooli jagamine taastevõtmesse):",
|
|
||||||
"Recovery account password" => "Konto taasteparool",
|
|
||||||
"Enabled" => "Sisse lülitatud",
|
"Enabled" => "Sisse lülitatud",
|
||||||
"Disabled" => "Väljalülitatud",
|
"Disabled" => "Väljalülitatud",
|
||||||
"Change encryption passwords recovery key:" => "Muuda taaste võtme krüpteerimise paroole:",
|
|
||||||
"Old Recovery account password" => "Konto vana taaste parool",
|
|
||||||
"New Recovery account password" => "Konto uus taasteparool",
|
|
||||||
"Change Password" => "Muuda parooli",
|
"Change Password" => "Muuda parooli",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "Luba parooli taaste jagades kõik failid administraatoriga:",
|
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "Valiku lubamine võimaldab taastada ligipääsu krüpteeritud failidele kui parool on kadunud",
|
|
||||||
"File recovery settings updated" => "Faili taaste seaded uuendatud",
|
"File recovery settings updated" => "Faili taaste seaded uuendatud",
|
||||||
"Could not update file recovery" => "Ei suuda uuendada taastefaili"
|
"Could not update file recovery" => "Ei suuda uuendada taastefaili"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,29 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Clé de récupération activée avec succès",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Ne peut pas activer la clé de récupération. s'il vous plait vérifiez votre mot de passe de clé de récupération!",
|
||||||
|
"Recovery key successfully disabled" => "Clé de récupération désactivée avc succès",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Ne peut pas désactiver la clé de récupération. S'il vous plait vérifiez votre mot de passe de clé de récupération!",
|
||||||
|
"Password successfully changed." => "Mot de passe changé avec succès ",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Ne peut pas changer le mot de passe. L'ancien mot de passe est peut-être incorrect.",
|
||||||
|
"Private key password successfully updated." => "Mot de passe de la clé privé mis à jour avec succès.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Impossible de mettre à jour le mot de passe de la clé privé. Peut-être que l'ancien mot de passe n'était pas correcte.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "Votre clef privée est invalide ! Votre mot de passe a peut-être été modifié depuis l'extérieur. Vous pouvez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers",
|
||||||
"Saving..." => "Enregistrement...",
|
"Saving..." => "Enregistrement...",
|
||||||
"Encryption" => "Chiffrement"
|
"Your private key is not valid! Maybe the your password was changed from outside." => "Votre clef privée est invalide ! Votre mot de passe a peut-être été modifié depuis l'extérieur.",
|
||||||
|
"You can unlock your private key in your " => "Vous pouvez déverrouiller votre clé privée dans votre",
|
||||||
|
"personal settings" => "paramètres personnel",
|
||||||
|
"Encryption" => "Chiffrement",
|
||||||
|
"Enabled" => "Activer",
|
||||||
|
"Disabled" => "Désactiver",
|
||||||
|
"Change Password" => "Changer de mot de passe",
|
||||||
|
"Your private key password no longer match your log-in password:" => "Le mot de passe de votre clef privée ne correspond plus à votre mot de passe de connexion :",
|
||||||
|
"Set your old private key password to your current log-in password." => "Configurez le mot de passe de votre ancienne clef privée avec votre mot de passe courant de connexion. ",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Si vous ne vous souvenez plus de votre ancien mot de passe, vous pouvez demander à votre administrateur de récupérer vos fichiers.",
|
||||||
|
"Old log-in password" => "Ancien mot de passe de connexion",
|
||||||
|
"Current log-in password" => "Actuel mot de passe de connexion",
|
||||||
|
"Update Private Key Password" => "Mettre à jour le mot de passe de votre clé privée",
|
||||||
|
"Enable password recovery:" => "Activer la récupération du mot de passe:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Activer cette option vous permettra d'obtenir à nouveau l'accès à vos fichiers chiffrés en cas de perte de mot de passe",
|
||||||
|
"File recovery settings updated" => "Mise à jour des paramètres de récupération de fichiers ",
|
||||||
|
"Could not update file recovery" => "Ne peut pas remettre à jour les fichiers de récupération"
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,18 +5,32 @@
|
||||||
"Could not disable recovery key. Please check your recovery key password!" => "Non foi posíbel desactivar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!",
|
"Could not disable recovery key. Please check your recovery key password!" => "Non foi posíbel desactivar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!",
|
||||||
"Password successfully changed." => "O contrasinal foi cambiado satisfactoriamente",
|
"Password successfully changed." => "O contrasinal foi cambiado satisfactoriamente",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.",
|
"Could not change the password. Maybe the old password was not correct." => "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.",
|
||||||
|
"Private key password successfully updated." => "A chave privada foi actualizada correctamente.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Non foi posíbel actualizar o contrasinal da chave privada. É probábel que o contrasinal antigo non sexa correcto.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior. Vostede pode actualizar o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros",
|
||||||
|
"PHP module OpenSSL is not installed." => "O módulo PHP OpenSSL non está instalado.",
|
||||||
|
"Please ask your server administrator to install the module. For now the encryption app was disabled." => "Pregúntelle ao administrador do servidor pola instalación do módulo. Polo de agora o aplicativo de cifrado foi desactivado.",
|
||||||
"Saving..." => "Gardando...",
|
"Saving..." => "Gardando...",
|
||||||
|
"Your private key is not valid! Maybe the your password was changed from outside." => "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior. ",
|
||||||
|
"You can unlock your private key in your " => "Pode desbloquear a chave privada nos seus",
|
||||||
|
"personal settings" => "axustes persoais",
|
||||||
"Encryption" => "Cifrado",
|
"Encryption" => "Cifrado",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "Activar a chave de recuperación do cifrado de contrasinais (permite compartir a chave de recuperación):",
|
"Enable recovery key (allow to recover users files in case of password loss):" => "Activar a chave de recuperación (permitirá recuperar os ficheiros dos usuarios no caso de perda do contrasinal):",
|
||||||
"Recovery account password" => "Recuperación do contrasinal da conta",
|
"Recovery key password" => "Contrasinal da chave de recuperación",
|
||||||
"Enabled" => "Activado",
|
"Enabled" => "Activado",
|
||||||
"Disabled" => "Desactivado",
|
"Disabled" => "Desactivado",
|
||||||
"Change encryption passwords recovery key:" => "Cambiar a chave de la recuperación do cifrado de contrasinais:",
|
"Change recovery key password:" => "Cambiar o contrasinal da chave de la recuperación:",
|
||||||
"Old Recovery account password" => "Antigo contrasinal de recuperación da conta",
|
"Old Recovery key password" => "Antigo contrasinal da chave de recuperación",
|
||||||
"New Recovery account password" => "Novo contrasinal de recuperación da conta",
|
"New Recovery key password" => "Novo contrasinal da chave de recuperación",
|
||||||
"Change Password" => "Cambiar o contrasinal",
|
"Change Password" => "Cambiar o contrasinal",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "Activar a recuperación de contrasinais compartindo todos os ficheiros co administrador:",
|
"Your private key password no longer match your log-in password:" => "O seu contrasinal da chave privada non coincide co seu contrasinal de acceso.",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "Ao activar esta opción permitiráselle volver a obter acceso aos ficheiros cifrados se perde o contrasinal",
|
"Set your old private key password to your current log-in password." => "Estabeleza o seu contrasinal antigo da chave de recuperación ao seu contrasinal de acceso actual",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => " Se non lembra o seu antigo contrasinal pode pedírllelo ao seu administrador para recuperar os seus ficheiros.",
|
||||||
|
"Old log-in password" => "Contrasinal de acceso antigo",
|
||||||
|
"Current log-in password" => "Contrasinal de acceso actual",
|
||||||
|
"Update Private Key Password" => "Actualizar o contrasinal da chave privada",
|
||||||
|
"Enable password recovery:" => "Activar o contrasinal de recuperación:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Ao activar esta opción permitiráselle volver a obter acceso aos ficheiros cifrados no caso de perda do contrasinal",
|
||||||
"File recovery settings updated" => "Actualizouse o ficheiro de axustes de recuperación",
|
"File recovery settings updated" => "Actualizouse o ficheiro de axustes de recuperación",
|
||||||
"Could not update file recovery" => "Non foi posíbel actualizar o ficheiro de recuperación"
|
"Could not update file recovery" => "Non foi posíbel actualizar o ficheiro de recuperación"
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,18 +5,32 @@
|
||||||
"Could not disable recovery key. Please check your recovery key password!" => "Impossibile disabilitare la chiave di ripristino. Verifica la password della chiave di ripristino.",
|
"Could not disable recovery key. Please check your recovery key password!" => "Impossibile disabilitare la chiave di ripristino. Verifica la password della chiave di ripristino.",
|
||||||
"Password successfully changed." => "Password modificata correttamente.",
|
"Password successfully changed." => "Password modificata correttamente.",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Impossibile cambiare la password. Forse la vecchia password non era corretta.",
|
"Could not change the password. Maybe the old password was not correct." => "Impossibile cambiare la password. Forse la vecchia password non era corretta.",
|
||||||
|
"Private key password successfully updated." => "Password della chiave privata aggiornata correttamente.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Impossibile aggiornare la password della chiave privata. Forse la vecchia password non era corretta.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "La chiave privata non è valida! Forse la password è stata cambiata dall'esterno. Puoi aggiornare la password della chiave privata nelle impostazioni personali per ottenere nuovamente l'accesso ai file.",
|
||||||
|
"PHP module OpenSSL is not installed." => "Il modulo PHP OpenSSL non è installato.",
|
||||||
|
"Please ask your server administrator to install the module. For now the encryption app was disabled." => "Chiedi all'amministratore del server di installare il modulo. Per ora la crittografia è disabilitata.",
|
||||||
"Saving..." => "Salvataggio in corso...",
|
"Saving..." => "Salvataggio in corso...",
|
||||||
|
"Your private key is not valid! Maybe the your password was changed from outside." => "La tua chiave privata non è valida! Forse è stata modifica dall'esterno.",
|
||||||
|
"You can unlock your private key in your " => "Puoi sbloccare la chiave privata nelle tue",
|
||||||
|
"personal settings" => "impostazioni personali",
|
||||||
"Encryption" => "Cifratura",
|
"Encryption" => "Cifratura",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "Abilita la chiave di ripristino delle password di cifratura (consente di condividere la chiave di ripristino):",
|
"Enable recovery key (allow to recover users files in case of password loss):" => "Abilita la chiave di recupero (permette di recuperare i file utenti in caso di perdita della password):",
|
||||||
"Recovery account password" => "Password di ripristino dell'account",
|
"Recovery key password" => "Password della chiave di recupero",
|
||||||
"Enabled" => "Abilitata",
|
"Enabled" => "Abilitata",
|
||||||
"Disabled" => "Disabilitata",
|
"Disabled" => "Disabilitata",
|
||||||
"Change encryption passwords recovery key:" => "Cambia la chiave di ripristino delle password di cifratura:",
|
"Change recovery key password:" => "Cambia la password della chiave di recupero:",
|
||||||
"Old Recovery account password" => "Vecchia password di ripristino dell'account",
|
"Old Recovery key password" => "Vecchia password della chiave di recupero",
|
||||||
"New Recovery account password" => "Nuova password di ripristino dell'account",
|
"New Recovery key password" => "Nuova password della chiave di recupero",
|
||||||
"Change Password" => "Modifica password",
|
"Change Password" => "Modifica password",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "Abilita il ripristino della password condividendo tutti i file con l'amministratore:",
|
"Your private key password no longer match your log-in password:" => "La password della chiave privata non corrisponde più alla password di accesso:",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "L'abilitazione di questa opzione ti consentirà di ottenere nuovamente accesso ai tuoi file cifrati in caso di smarrimento della password",
|
"Set your old private key password to your current log-in password." => "Imposta la vecchia password della chiave privata sull'attuale password di accesso.",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Se non ricordi la vecchia password puoi chiedere al tuo amministratore di recuperare i file.",
|
||||||
|
"Old log-in password" => "Vecchia password di accesso",
|
||||||
|
"Current log-in password" => "Password di accesso attuale",
|
||||||
|
"Update Private Key Password" => "Aggiorna la password della chiave privata",
|
||||||
|
"Enable password recovery:" => "Abilita il ripristino della password:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "L'abilitazione di questa opzione ti consentirà di accedere nuovamente ai file cifrati in caso di perdita della password",
|
||||||
"File recovery settings updated" => "Impostazioni di ripristino dei file aggiornate",
|
"File recovery settings updated" => "Impostazioni di ripristino dei file aggiornate",
|
||||||
"Could not update file recovery" => "Impossibile aggiornare il ripristino dei file"
|
"Could not update file recovery" => "Impossibile aggiornare il ripristino dei file"
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,18 +5,32 @@
|
||||||
"Could not disable recovery key. Please check your recovery key password!" => "リカバリ用のキーを無効化できませんでした。リカバリ用のキーのパスワードを確認して下さい!",
|
"Could not disable recovery key. Please check your recovery key password!" => "リカバリ用のキーを無効化できませんでした。リカバリ用のキーのパスワードを確認して下さい!",
|
||||||
"Password successfully changed." => "パスワードを変更できました。",
|
"Password successfully changed." => "パスワードを変更できました。",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "パスワードを変更できませんでした。古いパスワードが間違っているかもしれません。",
|
"Could not change the password. Maybe the old password was not correct." => "パスワードを変更できませんでした。古いパスワードが間違っているかもしれません。",
|
||||||
|
"Private key password successfully updated." => "秘密鍵のパスワードが正常に更新されました。",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "秘密鍵のパスワードを更新できませんでした。古いパスワードが正確でない場合があります。",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "秘密鍵が有効ではありません。パスワードが外部から変更された恐れがあります。。個人設定で秘密鍵のパスワードを更新して、ファイルへのアクセス権を奪還できます。",
|
||||||
|
"PHP module OpenSSL is not installed." => "PHPのモジュール OpenSSLがインストールされていません。",
|
||||||
|
"Please ask your server administrator to install the module. For now the encryption app was disabled." => "サーバーの管理者にモジュールのインストールを頼んでください。さしあたり暗号化アプリは無効化されました。",
|
||||||
"Saving..." => "保存中...",
|
"Saving..." => "保存中...",
|
||||||
|
"Your private key is not valid! Maybe the your password was changed from outside." => "秘密鍵が有効ではありません。パスワードが外部から変更された恐れがあります。",
|
||||||
|
"You can unlock your private key in your " => "個人設定で",
|
||||||
|
"personal settings" => "秘密鍵をアンロックできます",
|
||||||
"Encryption" => "暗号化",
|
"Encryption" => "暗号化",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "暗号化パスワードの復旧キーを有効にする(復旧キーを共有することを許可):",
|
"Enable recovery key (allow to recover users files in case of password loss):" => "復旧キーを有効化 (万一パスワードを亡くした場合もユーザーのファイルを回復できる):",
|
||||||
"Recovery account password" => "復旧アカウントのパスワード",
|
"Recovery key password" => "復旧キーのパスワード",
|
||||||
"Enabled" => "有効",
|
"Enabled" => "有効",
|
||||||
"Disabled" => "無効",
|
"Disabled" => "無効",
|
||||||
"Change encryption passwords recovery key:" => "復旧キーの暗号化パスワードを変更:",
|
"Change recovery key password:" => "復旧キーのパスワードを変更:",
|
||||||
"Old Recovery account password" => "古い復旧アカウントのパスワード",
|
"Old Recovery key password" => "古い復旧キーのパスワード",
|
||||||
"New Recovery account password" => "新しい復旧アカウントのパスワード",
|
"New Recovery key password" => "新しい復旧キーのパスワード",
|
||||||
"Change Password" => "パスワードを変更",
|
"Change Password" => "パスワードを変更",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "管理者が全ての共有ファイルに対してパスワードによる復旧を有効にする:",
|
"Your private key password no longer match your log-in password:" => "もはや秘密鍵はログインパスワードと一致しません:",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "このオプションを有効にすると、もしパスワードが分からなくなったとしても、暗号化されたファイルに再度アクセスすることが出来るようになります。",
|
"Set your old private key password to your current log-in password." => "古い秘密鍵のパスワードを現在のログインパスワードに設定する。",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "古いパスワードを覚えていない場合、管理者に尋ねてファイルを回復することができます。",
|
||||||
|
"Old log-in password" => "古いログインパスワード",
|
||||||
|
"Current log-in password" => "現在のログインパスワード",
|
||||||
|
"Update Private Key Password" => "秘密鍵のパスワードを更新",
|
||||||
|
"Enable password recovery:" => "パスワード復旧を有効化:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "このオプションを有効にすると、パスワードを紛失した場合も、暗号化されたファイルに再度アクセスすることができるようになります。",
|
||||||
"File recovery settings updated" => "ファイル復旧設定が更新されました",
|
"File recovery settings updated" => "ファイル復旧設定が更新されました",
|
||||||
"Could not update file recovery" => "ファイル復旧を更新できませんでした"
|
"Could not update file recovery" => "ファイル復旧を更新できませんでした"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,15 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Atkūrimo raktas sėkmingai įjungtas",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Neišėjo įjungti jūsų atkūrimo rakto. Prašome jį patikrinti!",
|
||||||
|
"Recovery key successfully disabled" => "Atkūrimo raktas sėkmingai išjungtas",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Neišėjo išjungti jūsų atkūrimo rakto. Prašome jį patikrinti!",
|
||||||
|
"Password successfully changed." => "Slaptažodis sėkmingai pakeistas",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.",
|
||||||
"Saving..." => "Saugoma...",
|
"Saving..." => "Saugoma...",
|
||||||
"Encryption" => "Šifravimas"
|
"Encryption" => "Šifravimas",
|
||||||
|
"Enabled" => "Įjungta",
|
||||||
|
"Disabled" => "Išjungta",
|
||||||
|
"Change Password" => "Pakeisti slaptažodį",
|
||||||
|
"File recovery settings updated" => "Failų atstatymo nustatymai pakeisti",
|
||||||
|
"Could not update file recovery" => "Neišėjo atnaujinti failų atkūrimo"
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,18 +5,32 @@
|
||||||
"Could not disable recovery key. Please check your recovery key password!" => "Kon herstelsleutel niet deactiveren. Controleer het wachtwoord van uw herstelsleutel!",
|
"Could not disable recovery key. Please check your recovery key password!" => "Kon herstelsleutel niet deactiveren. Controleer het wachtwoord van uw herstelsleutel!",
|
||||||
"Password successfully changed." => "Wachtwoord succesvol gewijzigd.",
|
"Password successfully changed." => "Wachtwoord succesvol gewijzigd.",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Kon wachtwoord niet wijzigen. Wellicht oude wachtwoord niet juist ingevoerd.",
|
"Could not change the password. Maybe the old password was not correct." => "Kon wachtwoord niet wijzigen. Wellicht oude wachtwoord niet juist ingevoerd.",
|
||||||
|
"Private key password successfully updated." => "Privésleutel succesvol bijgewerkt.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Kon het wachtwoord van de privésleutel niet wijzigen. Misschien was het oude wachtwoord onjuist.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "Uw privésleutel is niet geldig! Misschien was uw wachtwoord van buitenaf gewijzigd. U kunt het wachtwoord van uw privésleutel bijwerking in uw persoonlijke instellingen om bij uw bestanden te komen.",
|
||||||
|
"PHP module OpenSSL is not installed." => "PHP module OpenSSL is niet geïnstalleerd.",
|
||||||
|
"Please ask your server administrator to install the module. For now the encryption app was disabled." => "Vraag uw beheerder deze module te installeren. Tot zolang is de crypto app gedeactiveerd.",
|
||||||
"Saving..." => "Opslaan",
|
"Saving..." => "Opslaan",
|
||||||
|
"Your private key is not valid! Maybe the your password was changed from outside." => "Uw privésleutel is niet geldig. Misschien was uw wachtwoord van buitenaf gewijzigd.",
|
||||||
|
"You can unlock your private key in your " => "U kunt uw privésleutel deblokkeren in uw",
|
||||||
|
"personal settings" => "persoonlijke instellingen",
|
||||||
"Encryption" => "Versleuteling",
|
"Encryption" => "Versleuteling",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "Activeer versleuteling van wachtwoorden herstelsleutel (maak delen met herstel sleutel mogelijk):",
|
"Enable recovery key (allow to recover users files in case of password loss):" => "Activeren herstelsleutel (maakt het mogelijk om gebruikersbestanden terug te halen in geval van verlies van het wachtwoord):",
|
||||||
"Recovery account password" => "Herstel account wachtwoord",
|
"Recovery key password" => "Wachtwoord herstelsleulel",
|
||||||
"Enabled" => "Geactiveerd",
|
"Enabled" => "Geactiveerd",
|
||||||
"Disabled" => "Gedeactiveerd",
|
"Disabled" => "Gedeactiveerd",
|
||||||
"Change encryption passwords recovery key:" => "Wijzig versleuteling wachtwoord herstelsleutel",
|
"Change recovery key password:" => "Wijzig wachtwoord herstelsleutel:",
|
||||||
"Old Recovery account password" => "Oude herstel account wachtwoord",
|
"Old Recovery key password" => "Oude wachtwoord herstelsleutel",
|
||||||
"New Recovery account password" => "Nieuwe herstel account wachtwoord",
|
"New Recovery key password" => "Nieuwe wachtwoord herstelsleutel",
|
||||||
"Change Password" => "Wijzigen wachtwoord",
|
"Change Password" => "Wijzigen wachtwoord",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "Activeer wachtwoordherstel door alle bestanden met uw beheerder te delen:",
|
"Your private key password no longer match your log-in password:" => "Het wachtwoord van uw privésleutel komt niet meer overeen met uw inlogwachtwoord:",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "Door deze optie te activeren kunt u toegang tot uw versleutelde bestanden krijgen als u uw wachtwoord kwijt bent",
|
"Set your old private key password to your current log-in password." => "Stel het wachtwoord van uw oude privésleutel in op uw huidige inlogwachtwoord.",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Als u uw oude wachtwoord niet meer weet, kunt u uw beheerder vragen uw bestanden terug te halen.",
|
||||||
|
"Old log-in password" => "Oude wachtwoord",
|
||||||
|
"Current log-in password" => "Huidige wachtwoord",
|
||||||
|
"Update Private Key Password" => "Bijwerken wachtwoord Privésleutel",
|
||||||
|
"Enable password recovery:" => "Activeren wachtwoord herstel:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Het activeren van deze optie maakt het mogelijk om uw versleutelde bestanden te benaderen als uw wachtwoord kwijt is",
|
||||||
"File recovery settings updated" => "Bestandsherstel instellingen bijgewerkt",
|
"File recovery settings updated" => "Bestandsherstel instellingen bijgewerkt",
|
||||||
"Could not update file recovery" => "Kon bestandsherstel niet bijwerken"
|
"Could not update file recovery" => "Kon bestandsherstel niet bijwerken"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,18 +1,31 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Klucz odzyskiwania włączony",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Nie można włączyć klucza odzyskiwania. Proszę sprawdzić swoje hasło odzyskiwania!",
|
||||||
|
"Recovery key successfully disabled" => "Klucz odzyskiwania wyłączony",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Nie można wyłączyć klucza odzyskiwania. Proszę sprawdzić swoje hasło odzyskiwania!",
|
||||||
"Password successfully changed." => "Zmiana hasła udana.",
|
"Password successfully changed." => "Zmiana hasła udana.",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Nie można zmienić hasła. Może stare hasło nie było poprawne.",
|
"Could not change the password. Maybe the old password was not correct." => "Nie można zmienić hasła. Może stare hasło nie było poprawne.",
|
||||||
|
"Private key password successfully updated." => "Pomyślnie zaktualizowano hasło klucza prywatnego.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Nie można zmienić prywatnego hasła. Może stare hasło nie było poprawne.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
|
||||||
|
"PHP module OpenSSL is not installed." => "Moduł PHP OpenSSL nie jest zainstalowany",
|
||||||
|
"Please ask your server administrator to install the module. For now the encryption app was disabled." => "Proszę poproś administratora serwera aby zainstalował ten moduł. Obecnie aplikacja szyfrowanie została wyłączona.",
|
||||||
"Saving..." => "Zapisywanie...",
|
"Saving..." => "Zapisywanie...",
|
||||||
|
"Your private key is not valid! Maybe the your password was changed from outside." => "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz.",
|
||||||
|
"You can unlock your private key in your " => "Możesz odblokować swój klucz prywatny w swojej",
|
||||||
|
"personal settings" => "Ustawienia osobiste",
|
||||||
"Encryption" => "Szyfrowanie",
|
"Encryption" => "Szyfrowanie",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "Włącz szyfrowanie odzyskiwanych haseł klucza (zezwalaj na odzyskiwanie klucza):",
|
|
||||||
"Recovery account password" => "Odzyskiwanie hasła konta",
|
|
||||||
"Enabled" => "Włączone",
|
"Enabled" => "Włączone",
|
||||||
"Disabled" => "Wyłączone",
|
"Disabled" => "Wyłączone",
|
||||||
"Change encryption passwords recovery key:" => "Zmiana klucza szyfrowania haseł odzyskiwania:",
|
|
||||||
"Old Recovery account password" => "Stare hasło odzyskiwania",
|
|
||||||
"New Recovery account password" => "Nowe hasło odzyskiwania",
|
|
||||||
"Change Password" => "Zmień hasło",
|
"Change Password" => "Zmień hasło",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "Włączyć hasło odzyskiwania przez udostępnianie wszystkich plików z administratorem:",
|
"Your private key password no longer match your log-in password:" => "Hasło klucza prywatnego nie pasuje do hasła logowania:",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "Włączenie tej opcji umożliwia otrzymać dostęp do zaszyfrowanych plików w przypadku utraty hasła",
|
"Set your old private key password to your current log-in password." => "Podaj swoje stare prywatne hasło aby ustawić nowe",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Jeśli nie pamiętasz swojego starego hasła, poproś swojego administratora, aby odzyskać pliki.",
|
||||||
|
"Old log-in password" => "Stare hasło logowania",
|
||||||
|
"Current log-in password" => "Bieżące hasło logowania",
|
||||||
|
"Update Private Key Password" => "Aktualizacja hasła klucza prywatnego",
|
||||||
|
"Enable password recovery:" => "Włącz hasło odzyskiwania:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Włączenie tej opcji umożliwia otrzymać dostęp do zaszyfrowanych plików w przypadku utraty hasła",
|
||||||
"File recovery settings updated" => "Ustawienia odzyskiwania plików zmienione",
|
"File recovery settings updated" => "Ustawienia odzyskiwania plików zmienione",
|
||||||
"Could not update file recovery" => "Nie można zmienić pliku odzyskiwania"
|
"Could not update file recovery" => "Nie można zmienić pliku odzyskiwania"
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,18 +5,32 @@
|
||||||
"Could not disable recovery key. Please check your recovery key password!" => "Impossível desabilitar recuperação de chave. Por favor verifique sua senha para recuperação de chave!",
|
"Could not disable recovery key. Please check your recovery key password!" => "Impossível desabilitar recuperação de chave. Por favor verifique sua senha para recuperação de chave!",
|
||||||
"Password successfully changed." => "Senha alterada com sucesso.",
|
"Password successfully changed." => "Senha alterada com sucesso.",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.",
|
"Could not change the password. Maybe the old password was not correct." => "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.",
|
||||||
|
"Private key password successfully updated." => "Senha de chave privada atualizada com sucesso.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Não foi possível atualizar a senha de chave privada. Talvez a senha antiga esteja incorreta.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "Sua chave privada não é válida! Talvez sua senha tenha sido mudada. Você pode atualizar sua senha de chave privada nas suas configurações pessoais para obter novamente acesso aos seus arquivos.",
|
||||||
|
"PHP module OpenSSL is not installed." => "O módulo PHP OpenSSL não está instalado.",
|
||||||
|
"Please ask your server administrator to install the module. For now the encryption app was disabled." => "Por favor peça ao administrador do servidor para instalar o módulo. Por enquanto o app de encriptação foi desabilitada.",
|
||||||
"Saving..." => "Salvando...",
|
"Saving..." => "Salvando...",
|
||||||
|
"Your private key is not valid! Maybe the your password was changed from outside." => "Sua chave privada não é válida! Talvez sua senha tenha sido mudada.",
|
||||||
|
"You can unlock your private key in your " => "Você pode desbloquear sua chave privada nas suas",
|
||||||
|
"personal settings" => "configurações pessoais.",
|
||||||
"Encryption" => "Criptografia",
|
"Encryption" => "Criptografia",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "Ativar a criptografia de chave de recuperação de senhas (permitir compartilhar a chave de recuperação):",
|
"Enable recovery key (allow to recover users files in case of password loss):" => "Habilitar chave de recuperação (permite recuperar arquivos de usuários em caso de perda de senha):",
|
||||||
"Recovery account password" => "Recuperar a senha da conta",
|
"Recovery key password" => "Senha da chave de recuperação",
|
||||||
"Enabled" => "Habilidado",
|
"Enabled" => "Habilidado",
|
||||||
"Disabled" => "Desabilitado",
|
"Disabled" => "Desabilitado",
|
||||||
"Change encryption passwords recovery key:" => "Mudar a criptografia de chave de recuperação de senhas:",
|
"Change recovery key password:" => "Mudar a senha da chave de recuperação:",
|
||||||
"Old Recovery account password" => "Recuperação de senha de conta antiga",
|
"Old Recovery key password" => "Senha antiga da chave de recuperação",
|
||||||
"New Recovery account password" => "Senha Nova da conta de Recuperação",
|
"New Recovery key password" => "Nova senha da chave de recuperação",
|
||||||
"Change Password" => "Trocar Senha",
|
"Change Password" => "Trocar Senha",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "Habilitar recuperação de senha através da partilha de todos os arquivos com o administrador:",
|
"Your private key password no longer match your log-in password:" => "Sua senha de chave privada não coincide mais com sua senha de login:",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "Ativando esta opção irá permitir que você reobtainha acesso aos seus arquivos criptografados se sua senha for perdida",
|
"Set your old private key password to your current log-in password." => "Configure sua antiga senha de chave privada para sua atual senha de login.",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Se você não se lembra de sua antiga senha você pode pedir ao administrador que recupere seus arquivos.",
|
||||||
|
"Old log-in password" => "Senha antiga de login",
|
||||||
|
"Current log-in password" => "Atual senha de login",
|
||||||
|
"Update Private Key Password" => "Atualizar senha de chave privada",
|
||||||
|
"Enable password recovery:" => "Habilitar recuperação de senha:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Habilitar essa opção vai permitir que você obtenha novamente acesso aos seus arquivos encriptados em caso de perda de senha",
|
||||||
"File recovery settings updated" => "Configurações de recuperação de arquivo atualizado",
|
"File recovery settings updated" => "Configurações de recuperação de arquivo atualizado",
|
||||||
"Could not update file recovery" => "Não foi possível atualizar a recuperação de arquivos"
|
"Could not update file recovery" => "Não foi possível atualizar a recuperação de arquivos"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Chave de recuperação activada com sucesso",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Não foi possível activar a chave de recuperação. Por favor verifique a password da chave de recuperação!",
|
||||||
|
"Recovery key successfully disabled" => "Chave de recuperação descativada com sucesso",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Não foi possível desactivar a chave de recuperação. Por favor verifique a password da chave de recuperação.",
|
||||||
"Password successfully changed." => "Password alterada com sucesso.",
|
"Password successfully changed." => "Password alterada com sucesso.",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Não foi possivel alterar a password. Possivelmente a password antiga não está correcta.",
|
"Could not change the password. Maybe the old password was not correct." => "Não foi possivel alterar a password. Possivelmente a password antiga não está correcta.",
|
||||||
"Saving..." => "A guardar...",
|
"Saving..." => "A guardar...",
|
||||||
"Encryption" => "Encriptação",
|
"Encryption" => "Encriptação",
|
||||||
"Enabled" => "Activado",
|
"Enabled" => "Activado",
|
||||||
"Disabled" => "Desactivado",
|
"Disabled" => "Desactivado",
|
||||||
"Change Password" => "Mudar a Password"
|
"Change Password" => "Mudar a Password",
|
||||||
|
"File recovery settings updated" => "Actualizadas as definições de recuperação de ficheiros",
|
||||||
|
"Could not update file recovery" => "Não foi possível actualizar a recuperação de ficheiros"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,18 +1,16 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Ключ восстановления успешно установлен",
|
||||||
|
"Recovery key successfully disabled" => "Ключ восстановления успешно отключен",
|
||||||
"Password successfully changed." => "Пароль изменен удачно.",
|
"Password successfully changed." => "Пароль изменен удачно.",
|
||||||
"Could not change the password. Maybe the old password was not correct." => "Невозможно изменить пароль. Возможно старый пароль не был верен.",
|
"Could not change the password. Maybe the old password was not correct." => "Невозможно изменить пароль. Возможно старый пароль не был верен.",
|
||||||
"Saving..." => "Сохранение...",
|
"Saving..." => "Сохранение...",
|
||||||
|
"personal settings" => "персональные настройки",
|
||||||
"Encryption" => "Шифрование",
|
"Encryption" => "Шифрование",
|
||||||
"Enable encryption passwords recovery key (allow sharing to recovery key):" => "Включить шифрование пароля ключа восстановления (понадобится разрешение для восстановления ключа)",
|
|
||||||
"Recovery account password" => "Восстановление пароля учетной записи",
|
|
||||||
"Enabled" => "Включено",
|
"Enabled" => "Включено",
|
||||||
"Disabled" => "Отключено",
|
"Disabled" => "Отключено",
|
||||||
"Change encryption passwords recovery key:" => "Изменить шифрование пароля ключа восстановления:",
|
|
||||||
"Old Recovery account password" => "Старое Восстановление пароля учетной записи",
|
|
||||||
"New Recovery account password" => "Новое Восстановление пароля учетной записи",
|
|
||||||
"Change Password" => "Изменить пароль",
|
"Change Password" => "Изменить пароль",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "Включить восстановление пароля путем доступа Вашего администратора ко всем файлам",
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Если вы не помните свой старый пароль, вы можете попросить своего администратора восстановить ваши файлы",
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "Включение этой опции позволит вам получить доступ к зашифрованным файлам, в случае утери пароля",
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Включение этой опции позволит вам получить доступ к своим зашифрованным файлам в случае утери пароля",
|
||||||
"File recovery settings updated" => "Настройки файла восстановления обновлены",
|
"File recovery settings updated" => "Настройки файла восстановления обновлены",
|
||||||
"Could not update file recovery" => "Невозможно обновить файл восстановления"
|
"Could not update file recovery" => "Невозможно обновить файл восстановления"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,11 +1,28 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Záchranný kľúč bol úspešne povolený",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Nepodarilo sa povoliť záchranný kľúč. Skontrolujte prosím Vaše heslo záchranného kľúča!",
|
||||||
|
"Recovery key successfully disabled" => "Záchranný kľúč bol úspešne zakázaný",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Nepodarilo sa zakázať záchranný kľúč. Skontrolujte prosím Vaše heslo záchranného kľúča!",
|
||||||
"Password successfully changed." => "Heslo úspešne zmenené.",
|
"Password successfully changed." => "Heslo úspešne zmenené.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Nemožno zmeniť heslo. Pravdepodobne nebolo staré heslo zadané správne.",
|
||||||
|
"Private key password successfully updated." => "Heslo súkromného kľúča je úspešne aktualizované.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Nemožno aktualizovať heslo súkromného kľúča. Možno nebolo staré heslo správne.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "Váš súkromný kľúč je neplatný. Možno bolo Vaše heslo zmenené z vonku. Môžete aktualizovať heslo súkromného kľúča v osobnom nastavení na opätovné získanie prístupu k súborom",
|
||||||
"Saving..." => "Ukladám...",
|
"Saving..." => "Ukladám...",
|
||||||
|
"Your private key is not valid! Maybe the your password was changed from outside." => "Váš súkromný kľúč je neplatný. Možno bolo Vaše heslo zmenené z vonku.",
|
||||||
|
"personal settings" => "osobné nastavenia",
|
||||||
"Encryption" => "Šifrovanie",
|
"Encryption" => "Šifrovanie",
|
||||||
"Enabled" => "Povolené",
|
"Enabled" => "Povolené",
|
||||||
"Disabled" => "Zakázané",
|
"Disabled" => "Zakázané",
|
||||||
"Change encryption passwords recovery key:" => "Zmeniť šifrovacie heslo obnovovacieho kľúča:",
|
|
||||||
"Change Password" => "Zmeniť heslo",
|
"Change Password" => "Zmeniť heslo",
|
||||||
|
"Your private key password no longer match your log-in password:" => "Vaše heslo súkromného kľúča je rovnaké ako Vaše prihlasovacie heslo:",
|
||||||
|
"Set your old private key password to your current log-in password." => "Nastavte si staré heslo súkromného kľúča k Vášmu súčasnému prihlasovaciemu heslu.",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Ak si nepamätáte svoje staré heslo, môžete požiadať správcu o obnovenie svojich súborov.",
|
||||||
|
"Old log-in password" => "Staré prihlasovacie heslo",
|
||||||
|
"Current log-in password" => "Súčasné prihlasovacie heslo",
|
||||||
|
"Update Private Key Password" => "Aktualizovať heslo súkromného kľúča",
|
||||||
|
"Enable password recovery:" => "Povoliť obnovu hesla:",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Povolenie Vám umožní znovu získať prístup k Vašim zašifrovaným súborom, ak stratíte heslo",
|
||||||
"File recovery settings updated" => "Nastavenie obnovy súborov aktualizované",
|
"File recovery settings updated" => "Nastavenie obnovy súborov aktualizované",
|
||||||
"Could not update file recovery" => "Nemožno aktualizovať obnovenie súborov"
|
"Could not update file recovery" => "Nemožno aktualizovať obnovenie súborov"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,29 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Återställningsnyckeln har framgångsrikt aktiverats",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Kunde inte aktivera återställningsnyckeln. Vänligen kontrollera ditt lösenord för återställningsnyckeln!",
|
||||||
|
"Recovery key successfully disabled" => "Återställningsnyckeln har framgångsrikt inaktiverats",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Kunde inte inaktivera återställningsnyckeln. Vänligen kontrollera ditt lösenord för återställningsnyckeln!",
|
||||||
|
"Password successfully changed." => "Ändringen av lösenordet lyckades.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Kunde inte ändra lösenordet. Kanske det gamla lösenordet inte var rätt.",
|
||||||
|
"Private key password successfully updated." => "Den privata lösenordsnyckeln uppdaterades utan problem.",
|
||||||
|
"Could not update the private key password. Maybe the old password was not correct." => "Kunde inte uppdatera den privata lösenordsnyckeln. Kanske var det gamla lösenordet fel.",
|
||||||
|
"Your private key is not valid! Maybe your password was changed from outside. You can update your private key password in your personal settings to regain access to your files" => "Din privata lösenordsnyckel är inte giltig! Kanske byttes ditt lösenord från utsidan. Du kan uppdatera din privata lösenordsnyckel under dina personliga inställningar för att återfå tillgång till dina filer",
|
||||||
"Saving..." => "Sparar...",
|
"Saving..." => "Sparar...",
|
||||||
"Encryption" => "Kryptering"
|
"Your private key is not valid! Maybe the your password was changed from outside." => "Din privata lösenordsnyckel är inte giltig! Kanske byttes ditt lösenord från utsidan.",
|
||||||
|
"You can unlock your private key in your " => "Du kan låsa upp din privata nyckel i dina",
|
||||||
|
"personal settings" => "personliga inställningar",
|
||||||
|
"Encryption" => "Kryptering",
|
||||||
|
"Enabled" => "Aktiverad",
|
||||||
|
"Disabled" => "Inaktiverad",
|
||||||
|
"Change Password" => "Byt lösenord",
|
||||||
|
"Your private key password no longer match your log-in password:" => "Din privata lösenordsnyckel stämmer inte längre överrens med ditt inloggningslösenord:",
|
||||||
|
"Set your old private key password to your current log-in password." => "Ställ in din gamla privata lösenordsnyckel till ditt aktuella inloggningslösenord.",
|
||||||
|
" If you don't remember your old password you can ask your administrator to recover your files." => "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer.",
|
||||||
|
"Old log-in password" => "Gammalt inloggningslösenord",
|
||||||
|
"Current log-in password" => "Nuvarande inloggningslösenord",
|
||||||
|
"Update Private Key Password" => "Uppdatera den privata lösenordsnyckeln",
|
||||||
|
"Enable password recovery:" => "Aktivera lösenordsåterställning",
|
||||||
|
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Genom att aktivera detta alternativ kommer du kunna återfå tillgång till dina krypterade filer om du skulle förlora/glömma ditt lösenord",
|
||||||
|
"File recovery settings updated" => "Inställningarna för filåterställning har uppdaterats",
|
||||||
|
"Could not update file recovery" => "Kunde inte uppdatera filåterställning"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,15 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "Kurtarma anahtarı başarıyla etkinleştirildi",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "Kurtarma anahtarı etkinleştirilemedi. Lütfen kurtarma anahtarı parolanızı kontrol edin!",
|
||||||
|
"Recovery key successfully disabled" => "Kurtarma anahtarı başarıyla devre dışı bırakıldı",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "Kurtarma anahtarı devre dışı bırakılamadı. Lütfen kurtarma anahtarı parolanızı kontrol edin!",
|
||||||
|
"Password successfully changed." => "Şifreniz başarıyla değiştirildi.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Parola değiştirilemedi. Eski parolanız doğru olmayabilir",
|
||||||
"Saving..." => "Kaydediliyor...",
|
"Saving..." => "Kaydediliyor...",
|
||||||
"Encryption" => "Şifreleme"
|
"Encryption" => "Şifreleme",
|
||||||
|
"Enabled" => "Etkinleştirildi",
|
||||||
|
"Disabled" => "Devre dışı",
|
||||||
|
"Change Password" => "Parola değiştir",
|
||||||
|
"File recovery settings updated" => "Dosya kurtarma ayarları güncellendi",
|
||||||
|
"Could not update file recovery" => "Dosya kurtarma güncellenemedi"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Password successfully changed." => "Đã đổi mật khẩu.",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "Không thể đổi mật khẩu. Có lẽ do mật khẩu cũ không đúng.",
|
||||||
"Saving..." => "Đang lưu...",
|
"Saving..." => "Đang lưu...",
|
||||||
"Encryption" => "Mã hóa"
|
"Encryption" => "Mã hóa",
|
||||||
|
"Enabled" => "Bật",
|
||||||
|
"Disabled" => "Tắt",
|
||||||
|
"Change Password" => "Đổi Mật khẩu"
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,15 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
|
"Recovery key successfully enabled" => "恢复密钥成功启用",
|
||||||
|
"Could not enable recovery key. Please check your recovery key password!" => "不能启用恢复密钥。请检查恢复密钥密码!",
|
||||||
|
"Recovery key successfully disabled" => "恢复密钥成功禁用",
|
||||||
|
"Could not disable recovery key. Please check your recovery key password!" => "不能禁用恢复密钥。请检查恢复密钥密码!",
|
||||||
|
"Password successfully changed." => "密码修改成功。",
|
||||||
|
"Could not change the password. Maybe the old password was not correct." => "不能修改密码。旧密码可能不正确。",
|
||||||
"Saving..." => "保存中",
|
"Saving..." => "保存中",
|
||||||
"Encryption" => "加密"
|
"Encryption" => "加密",
|
||||||
|
"Enabled" => "开启",
|
||||||
|
"Disabled" => "禁用",
|
||||||
|
"Change Password" => "修改密码",
|
||||||
|
"File recovery settings updated" => "文件恢复设置已更新",
|
||||||
|
"Could not update file recovery" => "不能更新文件恢复"
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,10 +5,7 @@
|
||||||
"Encryption" => "加密",
|
"Encryption" => "加密",
|
||||||
"Enabled" => "已啓用",
|
"Enabled" => "已啓用",
|
||||||
"Disabled" => "已停用",
|
"Disabled" => "已停用",
|
||||||
"Change encryption passwords recovery key:" => "變更加密密碼還原金鑰:",
|
|
||||||
"Change Password" => "變更密碼",
|
"Change Password" => "變更密碼",
|
||||||
"Enable password recovery by sharing all files with your administrator:" => "與管理員分享所有檔案以啓用密碼還原功能:",
|
|
||||||
"Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" => "啓用此選項允許您未來遺失密碼時重新取得已加密的檔案",
|
|
||||||
"File recovery settings updated" => "檔案還原設定已更新",
|
"File recovery settings updated" => "檔案還原設定已更新",
|
||||||
"Could not update file recovery" => "無法更新檔案還原設定"
|
"Could not update file recovery" => "無法更新檔案還原設定"
|
||||||
);
|
);
|
||||||
|
|
|
@ -51,21 +51,26 @@ class Crypt {
|
||||||
*/
|
*/
|
||||||
public static function createKeypair() {
|
public static function createKeypair() {
|
||||||
|
|
||||||
|
$return = false;
|
||||||
|
|
||||||
$res = openssl_pkey_new(array('private_key_bits' => 4096));
|
$res = openssl_pkey_new(array('private_key_bits' => 4096));
|
||||||
|
|
||||||
// Get private key
|
if ($res === false) {
|
||||||
openssl_pkey_export($res, $privateKey);
|
\OCP\Util::writeLog('Encryption library', 'couldn\'t generate users key-pair for ' . \OCP\User::getUser(), \OCP\Util::ERROR);
|
||||||
|
} elseif (openssl_pkey_export($res, $privateKey)) {
|
||||||
// Get public key
|
// Get public key
|
||||||
$publicKey = openssl_pkey_get_details($res);
|
$publicKey = openssl_pkey_get_details($res);
|
||||||
|
|
||||||
$publicKey = $publicKey['key'];
|
$publicKey = $publicKey['key'];
|
||||||
|
|
||||||
return (array(
|
$return = array(
|
||||||
'publicKey' => $publicKey,
|
'publicKey' => $publicKey,
|
||||||
'privateKey' => $privateKey
|
'privateKey' => $privateKey
|
||||||
));
|
);
|
||||||
|
} else {
|
||||||
|
\OCP\Util::writeLog('Encryption library', 'couldn\'t export users private key, please check your servers openSSL configuration.' . \OCP\User::getUser(), \OCP\Util::ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -168,7 +173,7 @@ class Crypt {
|
||||||
* e.g. filename or /Docs/filename, NOT admin/files/filename
|
* e.g. filename or /Docs/filename, NOT admin/files/filename
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public static function isLegacyEncryptedContent($data, $relPath) {
|
public static function isLegacyEncryptedContent($isCatFileContent, $relPath) {
|
||||||
|
|
||||||
// Fetch all file metadata from DB
|
// Fetch all file metadata from DB
|
||||||
$metadata = \OC\Files\Filesystem::getFileInfo($relPath, '');
|
$metadata = \OC\Files\Filesystem::getFileInfo($relPath, '');
|
||||||
|
@ -178,7 +183,7 @@ class Crypt {
|
||||||
// legacy encryption system
|
// legacy encryption system
|
||||||
if (isset($metadata['encrypted'])
|
if (isset($metadata['encrypted'])
|
||||||
&& $metadata['encrypted'] === true
|
&& $metadata['encrypted'] === true
|
||||||
&& !self::isCatfileContent($data)
|
&& $isCatFileContent === false
|
||||||
) {
|
) {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -287,28 +292,22 @@ class Crypt {
|
||||||
public static function symmetricEncryptFileContent($plainContent, $passphrase = '') {
|
public static function symmetricEncryptFileContent($plainContent, $passphrase = '') {
|
||||||
|
|
||||||
if (!$plainContent) {
|
if (!$plainContent) {
|
||||||
|
\OCP\Util::writeLog('Encryption library', 'symmetrically encryption failed, no content given.', \OCP\Util::ERROR);
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$iv = self::generateIv();
|
$iv = self::generateIv();
|
||||||
|
|
||||||
if ($encryptedContent = self::encrypt($plainContent, $iv, $passphrase)) {
|
if ($encryptedContent = self::encrypt($plainContent, $iv, $passphrase)) {
|
||||||
|
|
||||||
// Combine content to encrypt with IV identifier and actual IV
|
// Combine content to encrypt with IV identifier and actual IV
|
||||||
$catfile = self::concatIv($encryptedContent, $iv);
|
$catfile = self::concatIv($encryptedContent, $iv);
|
||||||
|
|
||||||
$padded = self::addPadding($catfile);
|
$padded = self::addPadding($catfile);
|
||||||
|
|
||||||
return $padded;
|
return $padded;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
\OCP\Util::writeLog('Encryption library', 'Encryption (symmetric) of keyfile content failed', \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', 'Encryption (symmetric) of keyfile content failed', \OCP\Util::ERROR);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -351,6 +350,34 @@ class Crypt {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Decrypt private key and check if the result is a valid keyfile
|
||||||
|
* @param string $encryptedKey encrypted keyfile
|
||||||
|
* @param string $passphrase to decrypt keyfile
|
||||||
|
* @returns encrypted private key or false
|
||||||
|
*
|
||||||
|
* This function decrypts a file
|
||||||
|
*/
|
||||||
|
public static function decryptPrivateKey($encryptedKey, $passphrase) {
|
||||||
|
|
||||||
|
$plainKey = self::symmetricDecryptFileContent($encryptedKey, $passphrase);
|
||||||
|
|
||||||
|
// check if this a valid private key
|
||||||
|
$res = openssl_pkey_get_private($plainKey);
|
||||||
|
if (is_resource($res)) {
|
||||||
|
$sslInfo = openssl_pkey_get_details($res);
|
||||||
|
if (!isset($sslInfo['key'])) {
|
||||||
|
$plainKey = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$plainKey = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $plainKey;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Creates symmetric keyfile content using a generated key
|
* @brief Creates symmetric keyfile content using a generated key
|
||||||
* @param string $plainContent content to be encrypted
|
* @param string $plainContent content to be encrypted
|
||||||
|
@ -452,7 +479,7 @@ class Crypt {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
\OCP\Util::writeLog('Encryption library', 'Decryption (asymmetric) of sealed content failed', \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', 'Decryption (asymmetric) of sealed content with share-key "'.$shareKey.'" failed', \OCP\Util::ERROR);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -608,7 +635,7 @@ class Crypt {
|
||||||
*
|
*
|
||||||
* This function decrypts an content
|
* This function decrypts an content
|
||||||
*/
|
*/
|
||||||
private static function legacyDecrypt($content, $passphrase = '') {
|
public static function legacyDecrypt($content, $passphrase = '') {
|
||||||
|
|
||||||
$bf = self::getBlowfish($passphrase);
|
$bf = self::getBlowfish($passphrase);
|
||||||
|
|
||||||
|
@ -637,28 +664,4 @@ class Crypt {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $legacyEncryptedContent
|
|
||||||
* @param $legacyPassphrase
|
|
||||||
* @param $publicKeys
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public static function legacyKeyRecryptKeyfile($legacyEncryptedContent, $legacyPassphrase, $publicKeys) {
|
|
||||||
|
|
||||||
$decrypted = self::legacyBlockDecrypt($legacyEncryptedContent, $legacyPassphrase);
|
|
||||||
|
|
||||||
// Encrypt plain data, generate keyfile & encrypted file
|
|
||||||
$cryptedData = self::symmetricEncryptFileContentKeyfile($decrypted);
|
|
||||||
|
|
||||||
// Encrypt plain keyfile to multiple sharefiles
|
|
||||||
$multiEncrypted = Crypt::multiKeyEncrypt($cryptedData['key'], $publicKeys);
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'data' => $cryptedData['encrypted'],
|
|
||||||
'filekey' => $multiEncrypted['data'],
|
|
||||||
'sharekeys' => $multiEncrypted['keys']
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -48,6 +48,7 @@ class Helper {
|
||||||
|
|
||||||
\OCP\Util::connectHook('OC_User', 'post_login', 'OCA\Encryption\Hooks', 'login');
|
\OCP\Util::connectHook('OC_User', 'post_login', 'OCA\Encryption\Hooks', 'login');
|
||||||
\OCP\Util::connectHook('OC_User', 'post_setPassword', 'OCA\Encryption\Hooks', 'setPassphrase');
|
\OCP\Util::connectHook('OC_User', 'post_setPassword', 'OCA\Encryption\Hooks', 'setPassphrase');
|
||||||
|
\OCP\Util::connectHook('OC_User', 'pre_setPassword', 'OCA\Encryption\Hooks', 'preSetPassphrase');
|
||||||
\OCP\Util::connectHook('OC_User', 'post_createUser', 'OCA\Encryption\Hooks', 'postCreateUser');
|
\OCP\Util::connectHook('OC_User', 'post_createUser', 'OCA\Encryption\Hooks', 'postCreateUser');
|
||||||
\OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OCA\Encryption\Hooks', 'postDeleteUser');
|
\OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OCA\Encryption\Hooks', 'postDeleteUser');
|
||||||
}
|
}
|
||||||
|
@ -93,6 +94,7 @@ class Helper {
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function adminEnableRecovery($recoveryKeyId, $recoveryPassword) {
|
public static function adminEnableRecovery($recoveryKeyId, $recoveryPassword) {
|
||||||
|
|
||||||
$view = new \OC\Files\View('/');
|
$view = new \OC\Files\View('/');
|
||||||
|
|
||||||
if ($recoveryKeyId === null) {
|
if ($recoveryKeyId === null) {
|
||||||
|
@ -127,13 +129,6 @@ class Helper {
|
||||||
// Save private key
|
// Save private key
|
||||||
$view->file_put_contents('/owncloud_private_key/' . $recoveryKeyId . '.private.key', $encryptedPrivateKey);
|
$view->file_put_contents('/owncloud_private_key/' . $recoveryKeyId . '.private.key', $encryptedPrivateKey);
|
||||||
|
|
||||||
// create control file which let us check later on if the entered password was correct.
|
|
||||||
$encryptedControlData = \OCA\Encryption\Crypt::keyEncrypt("ownCloud", $keypair['publicKey']);
|
|
||||||
if (!$view->is_dir('/control-file')) {
|
|
||||||
$view->mkdir('/control-file');
|
|
||||||
}
|
|
||||||
$view->file_put_contents('/control-file/controlfile.enc', $encryptedControlData);
|
|
||||||
|
|
||||||
\OC_FileProxy::$enabled = true;
|
\OC_FileProxy::$enabled = true;
|
||||||
|
|
||||||
// Set recoveryAdmin as enabled
|
// Set recoveryAdmin as enabled
|
||||||
|
@ -200,4 +195,17 @@ class Helper {
|
||||||
|
|
||||||
return $relPath;
|
return $relPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief redirect to a error page
|
||||||
|
*/
|
||||||
|
public static function redirectToErrorPage() {
|
||||||
|
$location = \OC_Helper::linkToAbsolute('apps/files_encryption/files', 'error.php');
|
||||||
|
$post = 0;
|
||||||
|
if(count($_POST) > 0) {
|
||||||
|
$post = 1;
|
||||||
|
}
|
||||||
|
header('Location: ' . $location . '?p=' . $post);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -256,6 +256,8 @@ class Proxy extends \OC_FileProxy {
|
||||||
*/
|
*/
|
||||||
public function postFopen($path, &$result) {
|
public function postFopen($path, &$result) {
|
||||||
|
|
||||||
|
$path = \OC\Files\Filesystem::normalizePath($path);
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
|
|
@ -88,9 +88,10 @@ class Session {
|
||||||
$proxyStatus = \OC_FileProxy::$enabled;
|
$proxyStatus = \OC_FileProxy::$enabled;
|
||||||
\OC_FileProxy::$enabled = false;
|
\OC_FileProxy::$enabled = false;
|
||||||
|
|
||||||
$encryptedKey = $this->view->file_get_contents( '/owncloud_private_key/' . $publicShareKeyId . '.private.key' );
|
$encryptedKey = $this->view->file_get_contents(
|
||||||
$privateKey = Crypt::symmetricDecryptFileContent( $encryptedKey, '' );
|
'/owncloud_private_key/' . $publicShareKeyId . '.private.key');
|
||||||
$this->setPublicSharePrivateKey( $privateKey );
|
$privateKey = Crypt::decryptPrivateKey($encryptedKey, '');
|
||||||
|
$this->setPublicSharePrivateKey($privateKey);
|
||||||
|
|
||||||
\OC_FileProxy::$enabled = $proxyStatus;
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
}
|
}
|
||||||
|
@ -121,7 +122,7 @@ class Session {
|
||||||
if (\OCA\Encryption\Helper::isPublicAccess()) {
|
if (\OCA\Encryption\Helper::isPublicAccess()) {
|
||||||
return $this->getPublicSharePrivateKey();
|
return $this->getPublicSharePrivateKey();
|
||||||
} else {
|
} else {
|
||||||
if (!is_null( \OC::$session->get('privateKey') )) {
|
if (!is_null(\OC::$session->get('privateKey'))) {
|
||||||
return \OC::$session->get('privateKey');
|
return \OC::$session->get('privateKey');
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -149,7 +150,7 @@ class Session {
|
||||||
*/
|
*/
|
||||||
public function getPublicSharePrivateKey() {
|
public function getPublicSharePrivateKey() {
|
||||||
|
|
||||||
if (!is_null( \OC::$session->get('publicSharePrivateKey') )) {
|
if (!is_null(\OC::$session->get('publicSharePrivateKey'))) {
|
||||||
return \OC::$session->get('publicSharePrivateKey');
|
return \OC::$session->get('publicSharePrivateKey');
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -176,7 +177,7 @@ class Session {
|
||||||
*/
|
*/
|
||||||
public function getLegacyKey() {
|
public function getLegacyKey() {
|
||||||
|
|
||||||
if ( !is_null( \OC::$session->get('legacyKey') ) ) {
|
if (!is_null(\OC::$session->get('legacyKey'))) {
|
||||||
|
|
||||||
return \OC::$session->get('legacyKey');
|
return \OC::$session->get('legacyKey');
|
||||||
|
|
||||||
|
|
|
@ -56,18 +56,21 @@ class Stream {
|
||||||
private $relPath; // rel path to users file dir
|
private $relPath; // rel path to users file dir
|
||||||
private $userId;
|
private $userId;
|
||||||
private $handle; // Resource returned by fopen
|
private $handle; // Resource returned by fopen
|
||||||
private $path;
|
|
||||||
private $readBuffer; // For streams that dont support seeking
|
|
||||||
private $meta = array(); // Header / meta for source stream
|
private $meta = array(); // Header / meta for source stream
|
||||||
private $count;
|
|
||||||
private $writeCache;
|
private $writeCache;
|
||||||
private $size;
|
private $size;
|
||||||
private $unencryptedSize;
|
private $unencryptedSize;
|
||||||
private $publicKey;
|
private $publicKey;
|
||||||
private $keyfile;
|
|
||||||
private $encKeyfile;
|
private $encKeyfile;
|
||||||
private static $view; // a fsview object set to user dir
|
/**
|
||||||
|
* @var \OC\Files\View
|
||||||
|
*/
|
||||||
private $rootView; // a fsview object set to '/'
|
private $rootView; // a fsview object set to '/'
|
||||||
|
/**
|
||||||
|
* @var \OCA\Encryption\Session
|
||||||
|
*/
|
||||||
|
private $session;
|
||||||
|
private $privateKey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $path
|
* @param $path
|
||||||
|
@ -82,6 +85,10 @@ class Stream {
|
||||||
$this->rootView = new \OC_FilesystemView('/');
|
$this->rootView = new \OC_FilesystemView('/');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->session = new \OCA\Encryption\Session($this->rootView);
|
||||||
|
|
||||||
|
$this->privateKey = $this->session->getPrivateKey($this->userId);
|
||||||
|
|
||||||
$util = new Util($this->rootView, \OCP\USER::getUser());
|
$util = new Util($this->rootView, \OCP\USER::getUser());
|
||||||
|
|
||||||
$this->userId = $util->getUserId();
|
$this->userId = $util->getUserId();
|
||||||
|
@ -109,6 +116,11 @@ class Stream {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
if($this->privateKey === false) {
|
||||||
|
// if private key is not valid redirect user to a error page
|
||||||
|
\OCA\Encryption\Helper::redirectToErrorPage();
|
||||||
|
}
|
||||||
|
|
||||||
$this->size = $this->rootView->filesize($this->rawPath, $mode);
|
$this->size = $this->rootView->filesize($this->rawPath, $mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +130,7 @@ class Stream {
|
||||||
|
|
||||||
if (!is_resource($this->handle)) {
|
if (!is_resource($this->handle)) {
|
||||||
|
|
||||||
\OCP\Util::writeLog('files_encryption', 'failed to open file "' . $this->rawPath . '"', \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', 'failed to open file "' . $this->rawPath . '"', \OCP\Util::ERROR);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
@ -156,7 +168,7 @@ class Stream {
|
||||||
|
|
||||||
// $count will always be 8192 https://bugs.php.net/bug.php?id=21641
|
// $count will always be 8192 https://bugs.php.net/bug.php?id=21641
|
||||||
// This makes this function a lot simpler, but will break this class if the above 'bug' gets 'fixed'
|
// This makes this function a lot simpler, but will break this class if the above 'bug' gets 'fixed'
|
||||||
\OCP\Util::writeLog('files_encryption', 'PHP "bug" 21641 no longer holds, decryption system requires refactoring', \OCP\Util::FATAL);
|
\OCP\Util::writeLog('Encryption library', 'PHP "bug" 21641 no longer holds, decryption system requires refactoring', \OCP\Util::FATAL);
|
||||||
|
|
||||||
die();
|
die();
|
||||||
|
|
||||||
|
@ -165,7 +177,7 @@ class Stream {
|
||||||
// Get the data from the file handle
|
// Get the data from the file handle
|
||||||
$data = fread($this->handle, 8192);
|
$data = fread($this->handle, 8192);
|
||||||
|
|
||||||
$result = '';
|
$result = null;
|
||||||
|
|
||||||
if (strlen($data)) {
|
if (strlen($data)) {
|
||||||
|
|
||||||
|
@ -175,10 +187,11 @@ class Stream {
|
||||||
throw new \Exception(
|
throw new \Exception(
|
||||||
'Encryption key not found for "' . $this->rawPath . '" during attempted read via stream');
|
'Encryption key not found for "' . $this->rawPath . '" during attempted read via stream');
|
||||||
|
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// Decrypt data
|
// Decrypt data
|
||||||
$result = Crypt::symmetricDecryptFileContent($data, $this->plainKey);
|
$result = Crypt::symmetricDecryptFileContent($data, $this->plainKey);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,13 +241,18 @@ class Stream {
|
||||||
// If a keyfile already exists
|
// If a keyfile already exists
|
||||||
if ($this->encKeyfile) {
|
if ($this->encKeyfile) {
|
||||||
|
|
||||||
$session = new \OCA\Encryption\Session( $this->rootView );
|
// if there is no valid private key return false
|
||||||
|
if ($this->privateKey === false) {
|
||||||
|
|
||||||
$privateKey = $session->getPrivateKey($this->userId);
|
// if private key is not valid redirect user to a error page
|
||||||
|
\OCA\Encryption\Helper::redirectToErrorPage();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$shareKey = Keymanager::getShareKey($this->rootView, $this->userId, $this->relPath);
|
$shareKey = Keymanager::getShareKey($this->rootView, $this->userId, $this->relPath);
|
||||||
|
|
||||||
$this->plainKey = Crypt::multiKeyDecrypt($this->encKeyfile, $shareKey, $privateKey);
|
$this->plainKey = Crypt::multiKeyDecrypt($this->encKeyfile, $shareKey, $this->privateKey);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -257,6 +275,12 @@ class Stream {
|
||||||
*/
|
*/
|
||||||
public function stream_write($data) {
|
public function stream_write($data) {
|
||||||
|
|
||||||
|
// if there is no valid private key return false
|
||||||
|
if ($this->privateKey === false) {
|
||||||
|
$this->size = 0;
|
||||||
|
return strlen($data);
|
||||||
|
}
|
||||||
|
|
||||||
// Disable the file proxies so that encryption is not
|
// Disable the file proxies so that encryption is not
|
||||||
// automatically attempted when the file is written to disk -
|
// automatically attempted when the file is written to disk -
|
||||||
// we are handling that separately here and we don't want to
|
// we are handling that separately here and we don't want to
|
||||||
|
@ -424,6 +448,28 @@ class Stream {
|
||||||
|
|
||||||
$this->flush();
|
$this->flush();
|
||||||
|
|
||||||
|
// if there is no valid private key return false
|
||||||
|
if ($this->privateKey === false) {
|
||||||
|
|
||||||
|
// cleanup
|
||||||
|
if ($this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb') {
|
||||||
|
|
||||||
|
// Disable encryption proxy to prevent recursive calls
|
||||||
|
$proxyStatus = \OC_FileProxy::$enabled;
|
||||||
|
\OC_FileProxy::$enabled = false;
|
||||||
|
|
||||||
|
if ($this->rootView->file_exists($this->rawPath) && $this->size === 0) {
|
||||||
|
$this->rootView->unlink($this->rawPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re-enable proxy - our work is done
|
||||||
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if private key is not valid redirect user to a error page
|
||||||
|
\OCA\Encryption\Helper::redirectToErrorPage();
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
$this->meta['mode'] !== 'r'
|
$this->meta['mode'] !== 'r'
|
||||||
and $this->meta['mode'] !== 'rb'
|
and $this->meta['mode'] !== 'rb'
|
||||||
|
@ -450,16 +496,14 @@ class Stream {
|
||||||
// Encrypt enc key for all sharing users
|
// Encrypt enc key for all sharing users
|
||||||
$this->encKeyfiles = Crypt::multiKeyEncrypt($this->plainKey, $publicKeys);
|
$this->encKeyfiles = Crypt::multiKeyEncrypt($this->plainKey, $publicKeys);
|
||||||
|
|
||||||
$view = new \OC_FilesystemView('/');
|
|
||||||
|
|
||||||
// Save the new encrypted file key
|
// Save the new encrypted file key
|
||||||
Keymanager::setFileKey($this->rootView, $this->relPath, $this->userId, $this->encKeyfiles['data']);
|
Keymanager::setFileKey($this->rootView, $this->relPath, $this->userId, $this->encKeyfiles['data']);
|
||||||
|
|
||||||
// Save the sharekeys
|
// Save the sharekeys
|
||||||
Keymanager::setShareKeys($view, $this->relPath, $this->encKeyfiles['keys']);
|
Keymanager::setShareKeys($this->rootView, $this->relPath, $this->encKeyfiles['keys']);
|
||||||
|
|
||||||
// get file info
|
// get file info
|
||||||
$fileInfo = $view->getFileInfo($this->rawPath);
|
$fileInfo = $this->rootView->getFileInfo($this->rawPath);
|
||||||
if (!is_array($fileInfo)) {
|
if (!is_array($fileInfo)) {
|
||||||
$fileInfo = array();
|
$fileInfo = array();
|
||||||
}
|
}
|
||||||
|
@ -473,7 +517,7 @@ class Stream {
|
||||||
$fileInfo['unencrypted_size'] = $this->unencryptedSize;
|
$fileInfo['unencrypted_size'] = $this->unencryptedSize;
|
||||||
|
|
||||||
// set fileinfo
|
// set fileinfo
|
||||||
$view->putFileInfo($this->rawPath, $fileInfo);
|
$this->rootView->putFileInfo($this->rawPath, $fileInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
return fclose($this->handle);
|
return fclose($this->handle);
|
||||||
|
|
|
@ -96,10 +96,13 @@ class Util {
|
||||||
//// DONE: test new encryption with sharing
|
//// DONE: test new encryption with sharing
|
||||||
//// TODO: test new encryption with proxies
|
//// TODO: test new encryption with proxies
|
||||||
|
|
||||||
|
const MIGRATION_COMPLETED = 1; // migration to new encryption completed
|
||||||
|
const MIGRATION_IN_PROGRESS = -1; // migration is running
|
||||||
|
const MIGRATION_OPEN = 0; // user still needs to be migrated
|
||||||
|
|
||||||
|
|
||||||
private $view; // OC_FilesystemView object for filesystem operations
|
private $view; // OC_FilesystemView object for filesystem operations
|
||||||
private $userId; // ID of the currently logged-in user
|
private $userId; // ID of the currently logged-in user
|
||||||
private $pwd; // User Password
|
|
||||||
private $client; // Client side encryption mode flag
|
private $client; // Client side encryption mode flag
|
||||||
private $publicKeyDir; // Dir containing all public user keys
|
private $publicKeyDir; // Dir containing all public user keys
|
||||||
private $encryptionDir; // Dir containing user's files_encryption
|
private $encryptionDir; // Dir containing user's files_encryption
|
||||||
|
@ -225,18 +228,21 @@ class Util {
|
||||||
// Generate keypair
|
// Generate keypair
|
||||||
$keypair = Crypt::createKeypair();
|
$keypair = Crypt::createKeypair();
|
||||||
|
|
||||||
\OC_FileProxy::$enabled = false;
|
if ($keypair) {
|
||||||
|
|
||||||
// Save public key
|
\OC_FileProxy::$enabled = false;
|
||||||
$this->view->file_put_contents($this->publicKeyPath, $keypair['publicKey']);
|
|
||||||
|
|
||||||
// Encrypt private key with user pwd as passphrase
|
// Encrypt private key with user pwd as passphrase
|
||||||
$encryptedPrivateKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], $passphrase);
|
$encryptedPrivateKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], $passphrase);
|
||||||
|
|
||||||
// Save private key
|
// Save key-pair
|
||||||
|
if ($encryptedPrivateKey) {
|
||||||
$this->view->file_put_contents($this->privateKeyPath, $encryptedPrivateKey);
|
$this->view->file_put_contents($this->privateKeyPath, $encryptedPrivateKey);
|
||||||
|
$this->view->file_put_contents($this->publicKeyPath, $keypair['publicKey']);
|
||||||
|
}
|
||||||
|
|
||||||
\OC_FileProxy::$enabled = true;
|
\OC_FileProxy::$enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// check if public-key exists but private-key is missing
|
// check if public-key exists but private-key is missing
|
||||||
|
@ -289,7 +295,7 @@ class Util {
|
||||||
*/
|
*/
|
||||||
public function recoveryEnabledForUser() {
|
public function recoveryEnabledForUser() {
|
||||||
|
|
||||||
$sql = 'SELECT `recovery_enabled` FROM `*PREFIX*encryption` WHERE uid = ?';
|
$sql = 'SELECT `recovery_enabled` FROM `*PREFIX*encryption` WHERE `uid` = ?';
|
||||||
|
|
||||||
$args = array($this->userId);
|
$args = array($this->userId);
|
||||||
|
|
||||||
|
@ -302,7 +308,7 @@ class Util {
|
||||||
if (\OCP\DB::isError($result)) {
|
if (\OCP\DB::isError($result)) {
|
||||||
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
||||||
} else {
|
} else {
|
||||||
if($result->numRows() > 0) {
|
if ($result->numRows() > 0) {
|
||||||
$row = $result->fetchRow();
|
$row = $result->fetchRow();
|
||||||
if (isset($row['recovery_enabled'])) {
|
if (isset($row['recovery_enabled'])) {
|
||||||
$recoveryEnabled[] = $row['recovery_enabled'];
|
$recoveryEnabled[] = $row['recovery_enabled'];
|
||||||
|
@ -347,7 +353,7 @@ class Util {
|
||||||
// Create a new record instead
|
// Create a new record instead
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$sql = 'UPDATE `*PREFIX*encryption` SET recovery_enabled = ? WHERE uid = ?';
|
$sql = 'UPDATE `*PREFIX*encryption` SET `recovery_enabled` = ? WHERE `uid` = ?';
|
||||||
|
|
||||||
$args = array(
|
$args = array(
|
||||||
$enabled,
|
$enabled,
|
||||||
|
@ -421,8 +427,7 @@ class Util {
|
||||||
// where they got re-enabled :/
|
// where they got re-enabled :/
|
||||||
\OC_FileProxy::$enabled = false;
|
\OC_FileProxy::$enabled = false;
|
||||||
|
|
||||||
$data = $this->view->file_get_contents($filePath);
|
$isEncryptedPath = $this->isEncryptedPath($filePath);
|
||||||
|
|
||||||
// If the file is encrypted
|
// If the file is encrypted
|
||||||
// NOTE: If the userId is
|
// NOTE: If the userId is
|
||||||
// empty or not set, file will
|
// empty or not set, file will
|
||||||
|
@ -432,7 +437,7 @@ class Util {
|
||||||
// will eat server resources :(
|
// will eat server resources :(
|
||||||
if (
|
if (
|
||||||
Keymanager::getFileKey($this->view, $this->userId, $relPath)
|
Keymanager::getFileKey($this->view, $this->userId, $relPath)
|
||||||
&& Crypt::isCatfileContent($data)
|
&& $isEncryptedPath
|
||||||
) {
|
) {
|
||||||
|
|
||||||
$found['encrypted'][] = array(
|
$found['encrypted'][] = array(
|
||||||
|
@ -442,7 +447,7 @@ class Util {
|
||||||
|
|
||||||
// If the file uses old
|
// If the file uses old
|
||||||
// encryption system
|
// encryption system
|
||||||
} elseif ( Crypt::isLegacyEncryptedContent( $data, $relPath ) ) {
|
} elseif (Crypt::isLegacyEncryptedContent($isEncryptedPath, $relPath)) {
|
||||||
|
|
||||||
$found['legacy'][] = array(
|
$found['legacy'][] = array(
|
||||||
'name' => $file,
|
'name' => $file,
|
||||||
|
@ -573,7 +578,9 @@ class Util {
|
||||||
// get relative path
|
// get relative path
|
||||||
$relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
|
$relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
|
||||||
|
|
||||||
if (isset($pathParts[2]) && $pathParts[2] === 'files' && $this->view->file_exists($path) && $this->isEncryptedPath($path)) {
|
if (isset($pathParts[2]) && $pathParts[2] === 'files' && $this->view->file_exists($path)
|
||||||
|
&& $this->isEncryptedPath($path)
|
||||||
|
) {
|
||||||
|
|
||||||
// get the size from filesystem
|
// get the size from filesystem
|
||||||
$fullPath = $this->view->getLocalFile($path);
|
$fullPath = $this->view->getLocalFile($path);
|
||||||
|
@ -687,28 +694,32 @@ class Util {
|
||||||
$relPath = $plainFile['path'];
|
$relPath = $plainFile['path'];
|
||||||
|
|
||||||
//relative to /data
|
//relative to /data
|
||||||
$rawPath = '/'.$this->userId . '/files/' . $plainFile['path'];
|
$rawPath = '/' . $this->userId . '/files/' . $plainFile['path'];
|
||||||
|
|
||||||
// Open plain file handle for binary reading
|
// Open plain file handle for binary reading
|
||||||
$plainHandle = $this->view->fopen( $rawPath, 'rb' );
|
$plainHandle = $this->view->fopen($rawPath, 'rb');
|
||||||
|
|
||||||
// Open enc file handle for binary writing, with same filename as original plain file
|
// Open enc file handle for binary writing, with same filename as original plain file
|
||||||
$encHandle = fopen( 'crypt://' . $relPath.'.tmp', 'wb' );
|
$encHandle = fopen('crypt://' . $relPath . '.part', 'wb');
|
||||||
|
|
||||||
// Move plain file to a temporary location
|
// Move plain file to a temporary location
|
||||||
$size = stream_copy_to_stream( $plainHandle, $encHandle );
|
$size = stream_copy_to_stream($plainHandle, $encHandle);
|
||||||
|
|
||||||
fclose($encHandle);
|
fclose($encHandle);
|
||||||
|
|
||||||
$fakeRoot = $this->view->getRoot();
|
$fakeRoot = $this->view->getRoot();
|
||||||
$this->view->chroot('/'.$this->userId.'/files');
|
$this->view->chroot('/' . $this->userId . '/files');
|
||||||
|
|
||||||
$this->view->rename($relPath . '.tmp', $relPath);
|
$this->view->rename($relPath . '.part', $relPath);
|
||||||
|
|
||||||
$this->view->chroot($fakeRoot);
|
$this->view->chroot($fakeRoot);
|
||||||
|
|
||||||
// Add the file to the cache
|
// Add the file to the cache
|
||||||
\OC\Files\Filesystem::putFileInfo( $relPath, array( 'encrypted' => true, 'size' => $size, 'unencrypted_size' => $size ) );
|
\OC\Files\Filesystem::putFileInfo($relPath, array(
|
||||||
|
'encrypted' => true,
|
||||||
|
'size' => $size,
|
||||||
|
'unencrypted_size' => $size
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Encrypt legacy encrypted files
|
// Encrypt legacy encrypted files
|
||||||
|
@ -722,40 +733,28 @@ class Util {
|
||||||
// Fetch data from file
|
// Fetch data from file
|
||||||
$legacyData = $this->view->file_get_contents($legacyFile['path']);
|
$legacyData = $this->view->file_get_contents($legacyFile['path']);
|
||||||
|
|
||||||
$sharingEnabled = \OCP\Share::isEnabled();
|
// decrypt data, generate catfile
|
||||||
|
$decrypted = Crypt::legacyBlockDecrypt($legacyData, $legacyPassphrase);
|
||||||
// if file exists try to get sharing users
|
|
||||||
if ($this->view->file_exists($legacyFile['path'])) {
|
|
||||||
$uniqueUserIds = $this->getSharingUsersArray($sharingEnabled, $legacyFile['path'], $this->userId);
|
|
||||||
} else {
|
|
||||||
$uniqueUserIds[] = $this->userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fetch public keys for all users who will share the file
|
|
||||||
$publicKeys = Keymanager::getPublicKeys($this->view, $uniqueUserIds);
|
|
||||||
|
|
||||||
// Recrypt data, generate catfile
|
|
||||||
$recrypted = Crypt::legacyKeyRecryptKeyfile( $legacyData, $legacyPassphrase, $publicKeys );
|
|
||||||
|
|
||||||
$rawPath = $legacyFile['path'];
|
$rawPath = $legacyFile['path'];
|
||||||
$relPath = \OCA\Encryption\Helper::stripUserFilesPath($rawPath);
|
|
||||||
|
|
||||||
// Save keyfile
|
// enable proxy the ensure encryption is handled
|
||||||
Keymanager::setFileKey($this->view, $relPath, $this->userId, $recrypted['filekey']);
|
\OC_FileProxy::$enabled = true;
|
||||||
|
|
||||||
// Save sharekeys to user folders
|
// Open enc file handle for binary writing, with same filename as original plain file
|
||||||
Keymanager::setShareKeys($this->view, $relPath, $recrypted['sharekeys']);
|
$encHandle = $this->view->fopen( $rawPath, 'wb' );
|
||||||
|
|
||||||
// Overwrite the existing file with the encrypted one
|
if (is_resource($encHandle)) {
|
||||||
$this->view->file_put_contents($rawPath, $recrypted['data']);
|
|
||||||
|
|
||||||
$size = strlen($recrypted['data']);
|
// write data to stream
|
||||||
|
fwrite($encHandle, $decrypted);
|
||||||
|
|
||||||
// Add the file to the cache
|
// close stream
|
||||||
\OC\Files\Filesystem::putFileInfo($rawPath, array(
|
fclose($encHandle);
|
||||||
'encrypted' => true,
|
}
|
||||||
'size' => $size
|
|
||||||
), '');
|
// disable proxy to prevent file being encrypted twice
|
||||||
|
\OC_FileProxy::$enabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -831,7 +830,7 @@ class Util {
|
||||||
if (\OCP\DB::isError($result)) {
|
if (\OCP\DB::isError($result)) {
|
||||||
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
||||||
} else {
|
} else {
|
||||||
if($result->numRows() > 0) {
|
if ($result->numRows() > 0) {
|
||||||
$row = $result->fetchRow();
|
$row = $result->fetchRow();
|
||||||
$path = substr($row['path'], strlen('files'));
|
$path = substr($row['path'], strlen('files'));
|
||||||
}
|
}
|
||||||
|
@ -1054,42 +1053,62 @@ class Util {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set file migration status for user
|
* @brief start migration mode to initially encrypt users data
|
||||||
* @param $status
|
* @return boolean
|
||||||
* @return bool
|
|
||||||
*/
|
*/
|
||||||
public function setMigrationStatus($status) {
|
public function beginMigration() {
|
||||||
|
|
||||||
$sql = 'UPDATE `*PREFIX*encryption` SET migration_status = ? WHERE uid = ?';
|
$return = false;
|
||||||
|
|
||||||
$args = array(
|
|
||||||
$status,
|
|
||||||
$this->userId
|
|
||||||
);
|
|
||||||
|
|
||||||
|
$sql = 'UPDATE `*PREFIX*encryption` SET `migration_status` = ? WHERE `uid` = ? and `migration_status` = ?';
|
||||||
|
$args = array(self::MIGRATION_IN_PROGRESS, $this->userId, self::MIGRATION_OPEN);
|
||||||
$query = \OCP\DB::prepare($sql);
|
$query = \OCP\DB::prepare($sql);
|
||||||
|
$result = $query->execute($args);
|
||||||
|
$manipulatedRows = $result->numRows();
|
||||||
|
|
||||||
if ($query->execute($args)) {
|
if ($manipulatedRows === 1) {
|
||||||
|
$return = true;
|
||||||
return true;
|
\OCP\Util::writeLog('Encryption library', "Start migration to encryption mode for " . $this->userId, \OCP\Util::INFO);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
\OCP\Util::writeLog('Encryption library', "Could not activate migration mode for " . $this->userId . ". Probably another process already started the initial encryption", \OCP\Util::WARN);
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Check whether pwd recovery is enabled for a given user
|
* @brief close migration mode after users data has been encrypted successfully
|
||||||
* @return bool 1 = yes, 0 = no, false = no record
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function finishMigration() {
|
||||||
|
|
||||||
|
$return = false;
|
||||||
|
|
||||||
|
$sql = 'UPDATE `*PREFIX*encryption` SET `migration_status` = ? WHERE `uid` = ? and `migration_status` = ?';
|
||||||
|
$args = array(self::MIGRATION_COMPLETED, $this->userId, self::MIGRATION_IN_PROGRESS);
|
||||||
|
$query = \OCP\DB::prepare($sql);
|
||||||
|
$result = $query->execute($args);
|
||||||
|
$manipulatedRows = $result->numRows();
|
||||||
|
|
||||||
|
if ($manipulatedRows === 1) {
|
||||||
|
$return = true;
|
||||||
|
\OCP\Util::writeLog('Encryption library', "Finish migration successfully for " . $this->userId, \OCP\Util::INFO);
|
||||||
|
} else {
|
||||||
|
\OCP\Util::writeLog('Encryption library', "Could not deactivate migration mode for " . $this->userId, \OCP\Util::WARN);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief check if files are already migrated to the encryption system
|
||||||
|
* @return migration status, false = in case of no record
|
||||||
* @note If records are not being returned, check for a hidden space
|
* @note If records are not being returned, check for a hidden space
|
||||||
* at the start of the uid in db
|
* at the start of the uid in db
|
||||||
*/
|
*/
|
||||||
public function getMigrationStatus() {
|
public function getMigrationStatus() {
|
||||||
|
|
||||||
$sql = 'SELECT `migration_status` FROM `*PREFIX*encryption` WHERE uid = ?';
|
$sql = 'SELECT `migration_status` FROM `*PREFIX*encryption` WHERE `uid` = ?';
|
||||||
|
|
||||||
$args = array($this->userId);
|
$args = array($this->userId);
|
||||||
|
|
||||||
|
@ -1102,7 +1121,7 @@ class Util {
|
||||||
if (\OCP\DB::isError($result)) {
|
if (\OCP\DB::isError($result)) {
|
||||||
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
||||||
} else {
|
} else {
|
||||||
if($result->numRows() > 0) {
|
if ($result->numRows() > 0) {
|
||||||
$row = $result->fetchRow();
|
$row = $result->fetchRow();
|
||||||
if (isset($row['migration_status'])) {
|
if (isset($row['migration_status'])) {
|
||||||
$migrationStatus[] = $row['migration_status'];
|
$migrationStatus[] = $row['migration_status'];
|
||||||
|
@ -1112,14 +1131,11 @@ class Util {
|
||||||
|
|
||||||
// If no record is found
|
// If no record is found
|
||||||
if (empty($migrationStatus)) {
|
if (empty($migrationStatus)) {
|
||||||
|
\OCP\Util::writeLog('Encryption library', "Could not get migration status for " . $this->userId . ", no record found", \OCP\Util::ERROR);
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// If a record is found
|
// If a record is found
|
||||||
} else {
|
} else {
|
||||||
|
return (int)$migrationStatus[0];
|
||||||
return $migrationStatus[0];
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1191,7 +1207,8 @@ class Util {
|
||||||
|
|
||||||
$result = array();
|
$result = array();
|
||||||
|
|
||||||
$content = $this->view->getDirectoryContent(\OC\Files\Filesystem::normalizePath($this->userFilesDir . '/' . $dir));
|
$content = $this->view->getDirectoryContent(\OC\Files\Filesystem::normalizePath(
|
||||||
|
$this->userFilesDir . '/' . $dir));
|
||||||
|
|
||||||
// handling for re shared folders
|
// handling for re shared folders
|
||||||
$pathSplit = explode('/', $dir);
|
$pathSplit = explode('/', $dir);
|
||||||
|
@ -1252,7 +1269,7 @@ class Util {
|
||||||
if (\OCP\DB::isError($result)) {
|
if (\OCP\DB::isError($result)) {
|
||||||
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
||||||
} else {
|
} else {
|
||||||
if($result->numRows() > 0) {
|
if ($result->numRows() > 0) {
|
||||||
$row = $result->fetchRow();
|
$row = $result->fetchRow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1278,7 +1295,7 @@ class Util {
|
||||||
if (\OCP\DB::isError($result)) {
|
if (\OCP\DB::isError($result)) {
|
||||||
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
||||||
} else {
|
} else {
|
||||||
if($result->numRows() > 0) {
|
if ($result->numRows() > 0) {
|
||||||
$row = $result->fetchRow();
|
$row = $result->fetchRow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1303,7 +1320,7 @@ class Util {
|
||||||
if (\OCP\DB::isError($result)) {
|
if (\OCP\DB::isError($result)) {
|
||||||
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
||||||
} else {
|
} else {
|
||||||
if($result->numRows() > 0) {
|
if ($result->numRows() > 0) {
|
||||||
$source = $result->fetchRow();
|
$source = $result->fetchRow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1324,7 +1341,7 @@ class Util {
|
||||||
if (\OCP\DB::isError($result)) {
|
if (\OCP\DB::isError($result)) {
|
||||||
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
|
||||||
} else {
|
} else {
|
||||||
if($result->numRows() > 0) {
|
if ($result->numRows() > 0) {
|
||||||
$item = $result->fetchRow();
|
$item = $result->fetchRow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1372,26 +1389,24 @@ class Util {
|
||||||
*/
|
*/
|
||||||
public function checkRecoveryPassword($password) {
|
public function checkRecoveryPassword($password) {
|
||||||
|
|
||||||
|
$result = false;
|
||||||
$pathKey = '/owncloud_private_key/' . $this->recoveryKeyId . ".private.key";
|
$pathKey = '/owncloud_private_key/' . $this->recoveryKeyId . ".private.key";
|
||||||
$pathControlData = '/control-file/controlfile.enc';
|
|
||||||
|
|
||||||
$proxyStatus = \OC_FileProxy::$enabled;
|
$proxyStatus = \OC_FileProxy::$enabled;
|
||||||
\OC_FileProxy::$enabled = false;
|
\OC_FileProxy::$enabled = false;
|
||||||
|
|
||||||
$recoveryKey = $this->view->file_get_contents($pathKey);
|
$recoveryKey = $this->view->file_get_contents($pathKey);
|
||||||
|
|
||||||
$decryptedRecoveryKey = Crypt::symmetricDecryptFileContent($recoveryKey, $password);
|
$decryptedRecoveryKey = Crypt::decryptPrivateKey($recoveryKey, $password);
|
||||||
|
|
||||||
$controlData = $this->view->file_get_contents($pathControlData);
|
if ($decryptedRecoveryKey) {
|
||||||
$decryptedControlData = Crypt::keyDecrypt($controlData, $decryptedRecoveryKey);
|
$result = true;
|
||||||
|
}
|
||||||
|
|
||||||
\OC_FileProxy::$enabled = $proxyStatus;
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
|
|
||||||
if ($decryptedControlData === 'ownCloud') {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1520,7 +1535,7 @@ class Util {
|
||||||
|
|
||||||
$encryptedKey = $this->view->file_get_contents(
|
$encryptedKey = $this->view->file_get_contents(
|
||||||
'/owncloud_private_key/' . $this->recoveryKeyId . '.private.key');
|
'/owncloud_private_key/' . $this->recoveryKeyId . '.private.key');
|
||||||
$privateKey = Crypt::symmetricDecryptFileContent($encryptedKey, $recoveryPassword);
|
$privateKey = Crypt::decryptPrivateKey($encryptedKey, $recoveryPassword);
|
||||||
|
|
||||||
\OC_FileProxy::$enabled = $proxyStatus;
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
|
|
||||||
|
@ -1536,7 +1551,7 @@ class Util {
|
||||||
list($storage, $internalPath) = \OC\Files\Cache\Cache::getById($id);
|
list($storage, $internalPath) = \OC\Files\Cache\Cache::getById($id);
|
||||||
$mount = \OC\Files\Filesystem::getMountByStorageId($storage);
|
$mount = \OC\Files\Filesystem::getMountByStorageId($storage);
|
||||||
$mountPoint = $mount[0]->getMountPoint();
|
$mountPoint = $mount[0]->getMountPoint();
|
||||||
$path = \OC\Files\Filesystem::normalizePath($mountPoint.'/'.$internalPath);
|
$path = \OC\Files\Filesystem::normalizePath($mountPoint . '/' . $internalPath);
|
||||||
|
|
||||||
// reformat the path to be relative e.g. /user/files/folder becomes /folder/
|
// reformat the path to be relative e.g. /user/files/folder becomes /folder/
|
||||||
$relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
|
$relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
|
||||||
|
|
|
@ -14,15 +14,26 @@ $tmpl = new OCP\Template('files_encryption', 'settings-personal');
|
||||||
$user = \OCP\USER::getUser();
|
$user = \OCP\USER::getUser();
|
||||||
$view = new \OC_FilesystemView('/');
|
$view = new \OC_FilesystemView('/');
|
||||||
$util = new \OCA\Encryption\Util($view, $user);
|
$util = new \OCA\Encryption\Util($view, $user);
|
||||||
|
$session = new \OCA\Encryption\Session($view);
|
||||||
|
|
||||||
|
$privateKeySet = ($session->getPrivateKey() !== false) ? true : false;
|
||||||
|
|
||||||
$recoveryAdminEnabled = OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');
|
$recoveryAdminEnabled = OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');
|
||||||
$recoveryEnabledForUser = $util->recoveryEnabledForUser();
|
$recoveryEnabledForUser = $util->recoveryEnabledForUser();
|
||||||
|
|
||||||
\OCP\Util::addscript('files_encryption', 'settings-personal');
|
$result = false;
|
||||||
\OCP\Util::addScript('settings', 'personal');
|
|
||||||
|
|
||||||
$tmpl->assign('recoveryEnabled', $recoveryAdminEnabled);
|
if ($recoveryAdminEnabled || !$privateKeySet) {
|
||||||
$tmpl->assign('recoveryEnabledForUser', $recoveryEnabledForUser);
|
|
||||||
|
|
||||||
return $tmpl->fetchPage();
|
\OCP\Util::addscript('files_encryption', 'settings-personal');
|
||||||
|
\OCP\Util::addScript('settings', 'personal');
|
||||||
|
|
||||||
|
$tmpl->assign('recoveryEnabled', $recoveryAdminEnabled);
|
||||||
|
$tmpl->assign('recoveryEnabledForUser', $recoveryEnabledForUser);
|
||||||
|
$tmpl->assign('privateKeySet', $privateKeySet);
|
||||||
|
|
||||||
|
$result = $tmpl->fetchPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<ul>
|
||||||
|
<li class='error'>
|
||||||
|
<?php $location = \OC_Helper::linkToRoute( "settings_personal" ).'#changePKPasswd' ?>
|
||||||
|
|
||||||
|
<?php p($l->t('Your private key is not valid! Maybe the your password was changed from outside.')); ?>
|
||||||
|
<br/>
|
||||||
|
<?php p($l->t('You can unlock your private key in your ')); ?> <a href="<?php echo $location?>"><?php p($l->t('personal settings')); ?>.</a>
|
||||||
|
<br/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
|
@ -2,53 +2,55 @@
|
||||||
<fieldset class="personalblock">
|
<fieldset class="personalblock">
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<strong><?php p($l->t( 'Encryption' )); ?></strong>
|
<strong><?php p($l->t('Encryption')); ?></strong>
|
||||||
<br />
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<?php p($l->t( "Enable encryption passwords recovery key (allow sharing to recovery key):" )); ?>
|
<?php p($l->t("Enable recovery key (allow to recover users files in case of password loss):")); ?>
|
||||||
<br />
|
<br/>
|
||||||
<br />
|
<br/>
|
||||||
<input type="password" name="recoveryPassword" id="recoveryPassword" />
|
<input type="password" name="recoveryPassword" id="recoveryPassword"/>
|
||||||
<label for="recoveryPassword"><?php p($l->t( "Recovery account password" )); ?></label>
|
<label for="recoveryPassword"><?php p($l->t("Recovery key password")); ?></label>
|
||||||
<br />
|
<br/>
|
||||||
<input
|
<input
|
||||||
type='radio'
|
type='radio'
|
||||||
name='adminEnableRecovery'
|
name='adminEnableRecovery'
|
||||||
value='1'
|
value='1'
|
||||||
<?php echo ( $_["recoveryEnabled"] == 1 ? 'checked="checked"' : 'disabled' ); ?> />
|
<?php echo($_["recoveryEnabled"] == 1 ? 'checked="checked"' : 'disabled'); ?> />
|
||||||
<?php p($l->t( "Enabled" )); ?>
|
<?php p($l->t("Enabled")); ?>
|
||||||
<br />
|
<br/>
|
||||||
|
|
||||||
<input
|
<input
|
||||||
type='radio'
|
type='radio'
|
||||||
name='adminEnableRecovery'
|
name='adminEnableRecovery'
|
||||||
value='0'
|
value='0'
|
||||||
<?php echo ( $_["recoveryEnabled"] == 0 ? 'checked="checked"' : 'disabled' ); ?> />
|
<?php echo($_["recoveryEnabled"] == 0 ? 'checked="checked"' : 'disabled'); ?> />
|
||||||
<?php p($l->t( "Disabled" )); ?>
|
<?php p($l->t("Disabled")); ?>
|
||||||
</p>
|
</p>
|
||||||
<br /><br />
|
<br/><br/>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<strong><?php p($l->t( "Change encryption passwords recovery key:" )); ?></strong>
|
<strong><?php p($l->t("Change recovery key password:")); ?></strong>
|
||||||
<br /><br />
|
<br/><br/>
|
||||||
<input
|
<input
|
||||||
type="password"
|
type="password"
|
||||||
name="changeRecoveryPassword"
|
name="changeRecoveryPassword"
|
||||||
id="oldRecoveryPassword"
|
id="oldRecoveryPassword"
|
||||||
<?php echo ( $_["recoveryEnabled"] == 0 ? 'disabled' : '' ); ?> />
|
<?php echo($_["recoveryEnabled"] == 0 ? 'disabled' : ''); ?> />
|
||||||
<label for="oldRecoveryPassword"><?php p($l->t( "Old Recovery account password" )); ?></label>
|
<label for="oldRecoveryPassword"><?php p($l->t("Old Recovery key password")); ?></label>
|
||||||
<br />
|
<br/>
|
||||||
<input
|
<input
|
||||||
type="password"
|
type="password"
|
||||||
name="changeRecoveryPassword"
|
name="changeRecoveryPassword"
|
||||||
id="newRecoveryPassword"
|
id="newRecoveryPassword"
|
||||||
<?php echo ( $_["recoveryEnabled"] == 0 ? 'disabled' : '' ); ?> />
|
<?php echo($_["recoveryEnabled"] == 0 ? 'disabled' : ''); ?> />
|
||||||
<label for="newRecoveryPassword"><?php p($l->t( "New Recovery account password" )); ?></label>
|
<label for="newRecoveryPassword"><?php p($l->t("New Recovery key password")); ?></label>
|
||||||
<br />
|
<br/>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
name="submitChangeRecoveryKey"
|
name="submitChangeRecoveryKey"
|
||||||
disabled><?php p($l->t( "Change Password" )); ?>
|
disabled><?php p($l->t("Change Password")); ?>
|
||||||
</button>
|
</button>
|
||||||
<span class="msg"></span>
|
<span class="msg"></span>
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -4,11 +4,47 @@
|
||||||
<?php p( $l->t( 'Encryption' ) ); ?>
|
<?php p( $l->t( 'Encryption' ) ); ?>
|
||||||
</legend>
|
</legend>
|
||||||
|
|
||||||
<?php if ( $_["recoveryEnabled"] ): ?>
|
<?php if ( ! $_["privateKeySet"] ): ?>
|
||||||
<p>
|
<p>
|
||||||
<label for="userEnableRecovery"><?php p( $l->t( "Enable password recovery by sharing all files with your administrator:" ) ); ?></label>
|
<a name="changePKPasswd" />
|
||||||
|
<label for="changePrivateKeyPasswd">
|
||||||
|
<?php p( $l->t( "Your private key password no longer match your log-in password:" ) ); ?>
|
||||||
|
</label>
|
||||||
<br />
|
<br />
|
||||||
<em><?php p( $l->t( "Enabling this option will allow you to reobtain access to your encrypted files if your password is lost" ) ); ?></em>
|
<em><?php p( $l->t( "Set your old private key password to your current log-in password." ) ); ?>
|
||||||
|
<?php if ( $_["recoveryEnabledForUser"] ):
|
||||||
|
p( $l->t( " If you don't remember your old password you can ask your administrator to recover your files." ) );
|
||||||
|
endif; ?>
|
||||||
|
</em>
|
||||||
|
<br />
|
||||||
|
<input
|
||||||
|
type="password"
|
||||||
|
name="changePrivateKeyPassword"
|
||||||
|
id="oldPrivateKeyPassword" />
|
||||||
|
<label for="oldPrivateKeyPassword"><?php p($l->t( "Old log-in password" )); ?></label>
|
||||||
|
<br />
|
||||||
|
<input
|
||||||
|
type="password"
|
||||||
|
name="changePrivateKeyPassword"
|
||||||
|
id="newPrivateKeyPassword" />
|
||||||
|
<label for="newRecoveryPassword"><?php p($l->t( "Current log-in password" )); ?></label>
|
||||||
|
<br />
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
name="submitChangePrivateKeyPassword"
|
||||||
|
disabled><?php p($l->t( "Update Private Key Password" )); ?>
|
||||||
|
</button>
|
||||||
|
<span class="msg"></span>
|
||||||
|
</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<?php if ( $_["recoveryEnabled"] && $_["privateKeySet"] ): ?>
|
||||||
|
<p>
|
||||||
|
<label for="userEnableRecovery"><?php p( $l->t( "Enable password recovery:" ) ); ?></label>
|
||||||
|
<br />
|
||||||
|
<em><?php p( $l->t( "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" ) ); ?></em>
|
||||||
<br />
|
<br />
|
||||||
<input
|
<input
|
||||||
type='radio'
|
type='radio'
|
||||||
|
@ -28,6 +64,7 @@
|
||||||
<div id="recoveryEnabledError"><?php p( $l->t( 'Could not update file recovery' ) ); ?></div>
|
<div id="recoveryEnabledError"><?php p( $l->t( 'Could not update file recovery' ) ); ?></div>
|
||||||
</p>
|
</p>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -92,8 +92,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
// reset app files_trashbin
|
// reset app files_trashbin
|
||||||
if ($this->stateFilesTrashbin) {
|
if ($this->stateFilesTrashbin) {
|
||||||
OC_App::enable('files_trashbin');
|
OC_App::enable('files_trashbin');
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
OC_App::disable('files_trashbin');
|
OC_App::disable('files_trashbin');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,6 +102,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
\OC_User::deleteUser(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
|
\OC_User::deleteUser(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testGenerateKey() {
|
function testGenerateKey() {
|
||||||
|
|
||||||
# TODO: use more accurate (larger) string length for test confirmation
|
# TODO: use more accurate (larger) string length for test confirmation
|
||||||
|
@ -114,6 +116,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @large
|
||||||
* @return String
|
* @return String
|
||||||
*/
|
*/
|
||||||
function testGenerateIv() {
|
function testGenerateIv() {
|
||||||
|
@ -127,6 +130,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @large
|
||||||
* @depends testGenerateIv
|
* @depends testGenerateIv
|
||||||
*/
|
*/
|
||||||
function testConcatIv($iv) {
|
function testConcatIv($iv) {
|
||||||
|
@ -159,6 +163,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @depends testConcatIv
|
* @depends testConcatIv
|
||||||
*/
|
*/
|
||||||
function testSplitIv($testConcatIv) {
|
function testSplitIv($testConcatIv) {
|
||||||
|
@ -175,6 +180,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @return string padded
|
* @return string padded
|
||||||
*/
|
*/
|
||||||
function testAddPadding() {
|
function testAddPadding() {
|
||||||
|
@ -190,6 +196,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @depends testAddPadding
|
* @depends testAddPadding
|
||||||
*/
|
*/
|
||||||
function testRemovePadding($padded) {
|
function testRemovePadding($padded) {
|
||||||
|
@ -200,6 +207,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testEncrypt() {
|
function testEncrypt() {
|
||||||
|
|
||||||
$random = openssl_random_pseudo_bytes(13);
|
$random = openssl_random_pseudo_bytes(13);
|
||||||
|
@ -212,6 +222,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testDecrypt() {
|
function testDecrypt() {
|
||||||
|
|
||||||
$random = openssl_random_pseudo_bytes(13);
|
$random = openssl_random_pseudo_bytes(13);
|
||||||
|
@ -226,6 +239,26 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testDecryptPrivateKey() {
|
||||||
|
|
||||||
|
// test successful decrypt
|
||||||
|
$crypted = Encryption\Crypt::symmetricEncryptFileContent($this->genPrivateKey, 'hat');
|
||||||
|
|
||||||
|
$decrypted = Encryption\Crypt::decryptPrivateKey($crypted, 'hat');
|
||||||
|
|
||||||
|
$this->assertEquals($this->genPrivateKey, $decrypted);
|
||||||
|
|
||||||
|
//test private key decrypt with wrong password
|
||||||
|
$wrongPasswd = Encryption\Crypt::decryptPrivateKey($crypted, 'hat2');
|
||||||
|
|
||||||
|
$this->assertEquals(false, $wrongPasswd);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testSymmetricEncryptFileContent() {
|
function testSymmetricEncryptFileContent() {
|
||||||
|
|
||||||
# TODO: search in keyfile for actual content as IV will ensure this test always passes
|
# TODO: search in keyfile for actual content as IV will ensure this test always passes
|
||||||
|
@ -241,6 +274,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testSymmetricStreamEncryptShortFileContent() {
|
function testSymmetricStreamEncryptShortFileContent() {
|
||||||
|
|
||||||
$filename = 'tmp-' . time() . '.test';
|
$filename = 'tmp-' . time() . '.test';
|
||||||
|
@ -291,6 +327,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief Test that data that is written by the crypto stream wrapper
|
* @brief Test that data that is written by the crypto stream wrapper
|
||||||
* @note Encrypted data is manually prepared and decrypted here to avoid dependency on success of stream_read
|
* @note Encrypted data is manually prepared and decrypted here to avoid dependency on success of stream_read
|
||||||
* @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
|
* @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
|
||||||
|
@ -377,6 +414,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief Test that data that is read by the crypto stream wrapper
|
* @brief Test that data that is read by the crypto stream wrapper
|
||||||
*/
|
*/
|
||||||
function testSymmetricStreamDecryptShortFileContent() {
|
function testSymmetricStreamDecryptShortFileContent() {
|
||||||
|
@ -406,6 +444,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$this->view->unlink($this->userId . '/files/' . $filename);
|
$this->view->unlink($this->userId . '/files/' . $filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testSymmetricStreamDecryptLongFileContent() {
|
function testSymmetricStreamDecryptLongFileContent() {
|
||||||
|
|
||||||
$filename = 'tmp-' . time();
|
$filename = 'tmp-' . time();
|
||||||
|
@ -425,6 +466,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$this->view->unlink($this->userId . '/files/' . $filename);
|
$this->view->unlink($this->userId . '/files/' . $filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testSymmetricEncryptFileContentKeyfile() {
|
function testSymmetricEncryptFileContentKeyfile() {
|
||||||
|
|
||||||
# TODO: search in keyfile for actual content as IV will ensure this test always passes
|
# TODO: search in keyfile for actual content as IV will ensure this test always passes
|
||||||
|
@ -440,6 +484,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testIsEncryptedContent() {
|
function testIsEncryptedContent() {
|
||||||
|
|
||||||
$this->assertFalse(Encryption\Crypt::isCatfileContent($this->dataUrl));
|
$this->assertFalse(Encryption\Crypt::isCatfileContent($this->dataUrl));
|
||||||
|
@ -452,6 +499,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @large
|
||||||
|
*/
|
||||||
function testMultiKeyEncrypt() {
|
function testMultiKeyEncrypt() {
|
||||||
|
|
||||||
# TODO: search in keyfile for actual content as IV will ensure this test always passes
|
# TODO: search in keyfile for actual content as IV will ensure this test always passes
|
||||||
|
@ -476,6 +526,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testKeyEncrypt() {
|
function testKeyEncrypt() {
|
||||||
|
|
||||||
// Generate keypair
|
// Generate keypair
|
||||||
|
@ -494,6 +547,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test encryption using legacy blowfish method
|
* @brief test encryption using legacy blowfish method
|
||||||
*/
|
*/
|
||||||
function testLegacyEncryptShort() {
|
function testLegacyEncryptShort() {
|
||||||
|
@ -510,6 +564,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test decryption using legacy blowfish method
|
* @brief test decryption using legacy blowfish method
|
||||||
* @depends testLegacyEncryptShort
|
* @depends testLegacyEncryptShort
|
||||||
*/
|
*/
|
||||||
|
@ -522,6 +577,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test encryption using legacy blowfish method
|
* @brief test encryption using legacy blowfish method
|
||||||
*/
|
*/
|
||||||
function testLegacyEncryptLong() {
|
function testLegacyEncryptLong() {
|
||||||
|
@ -538,6 +594,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test decryption using legacy blowfish method
|
* @brief test decryption using legacy blowfish method
|
||||||
* @depends testLegacyEncryptLong
|
* @depends testLegacyEncryptLong
|
||||||
*/
|
*/
|
||||||
|
@ -551,6 +608,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test generation of legacy encryption key
|
* @brief test generation of legacy encryption key
|
||||||
* @depends testLegacyDecryptShort
|
* @depends testLegacyDecryptShort
|
||||||
*/
|
*/
|
||||||
|
@ -570,22 +628,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief test decryption using legacy blowfish method
|
* @medium
|
||||||
* @depends testLegacyEncryptLong
|
|
||||||
*/
|
*/
|
||||||
function testLegacyKeyRecryptKeyfileEncrypt($crypted) {
|
|
||||||
|
|
||||||
$recrypted = Encryption\Crypt::LegacyKeyRecryptKeyfile($crypted, $this->pass, array($this->genPublicKey));
|
|
||||||
|
|
||||||
$this->assertNotEquals($this->dataLong, $recrypted['data']);
|
|
||||||
|
|
||||||
return $recrypted;
|
|
||||||
|
|
||||||
# TODO: search inencrypted text for actual content to ensure it
|
|
||||||
# genuine transformation
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function testRenameFile() {
|
function testRenameFile() {
|
||||||
|
|
||||||
$filename = 'tmp-' . time();
|
$filename = 'tmp-' . time();
|
||||||
|
@ -614,6 +658,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$view->unlink($newFilename);
|
$view->unlink($newFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testMoveFileIntoFolder() {
|
function testMoveFileIntoFolder() {
|
||||||
|
|
||||||
$filename = 'tmp-' . time();
|
$filename = 'tmp-' . time();
|
||||||
|
@ -644,6 +691,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$view->unlink($newFolder);
|
$view->unlink($newFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testMoveFolder() {
|
function testMoveFolder() {
|
||||||
|
|
||||||
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
||||||
|
@ -679,6 +729,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$view->unlink('/newfolder');
|
$view->unlink('/newfolder');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testChangePassphrase() {
|
function testChangePassphrase() {
|
||||||
$filename = 'tmp-' . time();
|
$filename = 'tmp-' . time();
|
||||||
|
|
||||||
|
@ -713,6 +766,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$view->unlink($filename);
|
$view->unlink($filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testViewFilePutAndGetContents() {
|
function testViewFilePutAndGetContents() {
|
||||||
|
|
||||||
$filename = '/tmp-' . time();
|
$filename = '/tmp-' . time();
|
||||||
|
@ -744,6 +800,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$view->unlink($filename);
|
$view->unlink($filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @large
|
||||||
|
*/
|
||||||
function testTouchExistingFile() {
|
function testTouchExistingFile() {
|
||||||
$filename = '/tmp-' . time();
|
$filename = '/tmp-' . time();
|
||||||
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
||||||
|
@ -765,6 +824,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$view->unlink($filename);
|
$view->unlink($filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testTouchFile() {
|
function testTouchFile() {
|
||||||
$filename = '/tmp-' . time();
|
$filename = '/tmp-' . time();
|
||||||
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
||||||
|
@ -786,6 +848,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
|
||||||
$view->unlink($filename);
|
$view->unlink($filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testFopenFile() {
|
function testFopenFile() {
|
||||||
$filename = '/tmp-' . time();
|
$filename = '/tmp-' . time();
|
||||||
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
||||||
|
|
|
@ -103,6 +103,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
|
||||||
\OC_FileProxy::$enabled = true;
|
\OC_FileProxy::$enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testGetPrivateKey() {
|
function testGetPrivateKey() {
|
||||||
|
|
||||||
$key = Encryption\Keymanager::getPrivateKey($this->view, $this->userId);
|
$key = Encryption\Keymanager::getPrivateKey($this->view, $this->userId);
|
||||||
|
@ -119,6 +122,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testGetPublicKey() {
|
function testGetPublicKey() {
|
||||||
|
|
||||||
$publiceKey = Encryption\Keymanager::getPublicKey($this->view, $this->userId);
|
$publiceKey = Encryption\Keymanager::getPublicKey($this->view, $this->userId);
|
||||||
|
@ -132,6 +138,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertArrayHasKey('key', $sslInfo);
|
$this->assertArrayHasKey('key', $sslInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testSetFileKey() {
|
function testSetFileKey() {
|
||||||
|
|
||||||
# NOTE: This cannot be tested until we are able to break out
|
# NOTE: This cannot be tested until we are able to break out
|
||||||
|
@ -165,6 +174,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testGetUserKeys() {
|
function testGetUserKeys() {
|
||||||
|
|
||||||
$keys = Encryption\Keymanager::getUserKeys($this->view, $this->userId);
|
$keys = Encryption\Keymanager::getUserKeys($this->view, $this->userId);
|
||||||
|
@ -188,6 +200,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertArrayHasKey('key', $sslInfoPrivate);
|
$this->assertArrayHasKey('key', $sslInfoPrivate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testFixPartialFilePath() {
|
function testFixPartialFilePath() {
|
||||||
|
|
||||||
$partFilename = 'testfile.txt.part';
|
$partFilename = 'testfile.txt.part';
|
||||||
|
@ -202,6 +217,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($filename));
|
$this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testRecursiveDelShareKeys() {
|
function testRecursiveDelShareKeys() {
|
||||||
|
|
||||||
// generate filename
|
// generate filename
|
||||||
|
|
|
@ -111,8 +111,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
// reset app files_trashbin
|
// reset app files_trashbin
|
||||||
if ($this->stateFilesTrashbin) {
|
if ($this->stateFilesTrashbin) {
|
||||||
OC_App::enable('files_trashbin');
|
OC_App::enable('files_trashbin');
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
OC_App::disable('files_trashbin');
|
OC_App::disable('files_trashbin');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,6 +128,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @param bool $withTeardown
|
* @param bool $withTeardown
|
||||||
*/
|
*/
|
||||||
function testShareFile($withTeardown = true) {
|
function testShareFile($withTeardown = true) {
|
||||||
|
@ -205,6 +205,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @param bool $withTeardown
|
* @param bool $withTeardown
|
||||||
*/
|
*/
|
||||||
function testReShareFile($withTeardown = true) {
|
function testReShareFile($withTeardown = true) {
|
||||||
|
@ -275,6 +276,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @param bool $withTeardown
|
* @param bool $withTeardown
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
@ -363,6 +365,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @param bool $withTeardown
|
* @param bool $withTeardown
|
||||||
*/
|
*/
|
||||||
function testReShareFolder($withTeardown = true) {
|
function testReShareFolder($withTeardown = true) {
|
||||||
|
@ -564,6 +567,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
. $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
|
. $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testShareFileWithGroup() {
|
function testShareFileWithGroup() {
|
||||||
// login as admin
|
// login as admin
|
||||||
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
||||||
|
@ -639,6 +645,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @large
|
||||||
|
*/
|
||||||
function testRecoveryFile() {
|
function testRecoveryFile() {
|
||||||
// login as admin
|
// login as admin
|
||||||
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
||||||
|
@ -646,9 +655,6 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
|
\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
|
||||||
$recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
|
$recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
|
||||||
|
|
||||||
// check if control file created
|
|
||||||
$this->assertTrue($this->view->file_exists('/control-file/controlfile.enc'));
|
|
||||||
|
|
||||||
// login as admin
|
// login as admin
|
||||||
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
||||||
|
|
||||||
|
@ -741,6 +747,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertEquals(0, \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled'));
|
$this->assertEquals(0, \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @large
|
||||||
|
*/
|
||||||
function testRecoveryForUser() {
|
function testRecoveryForUser() {
|
||||||
// login as admin
|
// login as admin
|
||||||
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
||||||
|
@ -748,9 +757,6 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
|
\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
|
||||||
$recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
|
$recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
|
||||||
|
|
||||||
// check if control file created
|
|
||||||
$this->assertTrue($this->view->file_exists('/control-file/controlfile.enc'));
|
|
||||||
|
|
||||||
// login as user1
|
// login as user1
|
||||||
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
|
||||||
|
|
||||||
|
@ -837,6 +843,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertEquals(0, \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled'));
|
$this->assertEquals(0, \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testFailShareFile() {
|
function testFailShareFile() {
|
||||||
// login as admin
|
// login as admin
|
||||||
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
|
||||||
|
|
|
@ -140,6 +140,9 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
|
||||||
$view->unlink($filename);
|
$view->unlink($filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testStreamSetTimeout() {
|
function testStreamSetTimeout() {
|
||||||
$filename = '/tmp-' . time();
|
$filename = '/tmp-' . time();
|
||||||
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
||||||
|
|
|
@ -113,6 +113,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test delete file
|
* @brief test delete file
|
||||||
*/
|
*/
|
||||||
function testDeleteFile() {
|
function testDeleteFile() {
|
||||||
|
@ -184,6 +185,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test restore file
|
* @brief test restore file
|
||||||
*
|
*
|
||||||
* @depends testDeleteFile
|
* @depends testDeleteFile
|
||||||
|
@ -215,6 +217,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test delete file forever
|
* @brief test delete file forever
|
||||||
*/
|
*/
|
||||||
function testPermanentDeleteFile() {
|
function testPermanentDeleteFile() {
|
||||||
|
|
|
@ -75,7 +75,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
$this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt');
|
$this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt');
|
||||||
$this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt');
|
$this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt');
|
||||||
$this->legacyEncryptedDataKey = realpath(dirname(__FILE__) . '/encryption.key');
|
$this->legacyEncryptedDataKey = realpath(dirname(__FILE__) . '/encryption.key');
|
||||||
$this->legacyKey = '30943623843030686906';
|
$this->legacyKey = "30943623843030686906\0\0\0\0";
|
||||||
|
|
||||||
$keypair = Encryption\Crypt::createKeypair();
|
$keypair = Encryption\Crypt::createKeypair();
|
||||||
|
|
||||||
|
@ -118,6 +118,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test that paths set during User construction are correct
|
* @brief test that paths set during User construction are correct
|
||||||
*/
|
*/
|
||||||
function testKeyPaths() {
|
function testKeyPaths() {
|
||||||
|
@ -132,6 +133,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test setup of encryption directories
|
* @brief test setup of encryption directories
|
||||||
*/
|
*/
|
||||||
function testSetupServerSide() {
|
function testSetupServerSide() {
|
||||||
|
@ -139,6 +141,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test checking whether account is ready for encryption,
|
* @brief test checking whether account is ready for encryption,
|
||||||
*/
|
*/
|
||||||
function testUserIsReady() {
|
function testUserIsReady() {
|
||||||
|
@ -159,6 +162,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @medium
|
||||||
* @brief test checking whether account is not ready for encryption,
|
* @brief test checking whether account is not ready for encryption,
|
||||||
*/
|
*/
|
||||||
function testIsLegacyUser() {
|
function testIsLegacyUser() {
|
||||||
|
@ -178,14 +182,16 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
$params['uid'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER;
|
$params['uid'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER;
|
||||||
$params['password'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER;
|
$params['password'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER;
|
||||||
|
|
||||||
$util = new Encryption\Util($this->view, \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
|
$this->setMigrationStatus(0, \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
|
||||||
$util->setMigrationStatus(0);
|
|
||||||
|
|
||||||
$this->assertTrue(OCA\Encryption\Hooks::login($params));
|
$this->assertTrue(OCA\Encryption\Hooks::login($params));
|
||||||
|
|
||||||
$this->assertEquals($this->legacyKey, \OC::$session->get('legacyKey'));
|
$this->assertEquals($this->legacyKey, \OC::$session->get('legacyKey'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testRecoveryEnabledForUser() {
|
function testRecoveryEnabledForUser() {
|
||||||
|
|
||||||
$util = new Encryption\Util($this->view, $this->userId);
|
$util = new Encryption\Util($this->view, $this->userId);
|
||||||
|
@ -206,6 +212,9 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testGetUidAndFilename() {
|
function testGetUidAndFilename() {
|
||||||
|
|
||||||
\OC_User::setUserId(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
|
\OC_User::setUserId(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
|
||||||
|
@ -232,6 +241,9 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
$this->view->unlink($this->userId . '/files/' . $filename);
|
$this->view->unlink($this->userId . '/files/' . $filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @medium
|
||||||
|
*/
|
||||||
function testIsSharedPath() {
|
function testIsSharedPath() {
|
||||||
$sharedPath = '/user1/files/Shared/test';
|
$sharedPath = '/user1/files/Shared/test';
|
||||||
$path = '/user1/files/test';
|
$path = '/user1/files/test';
|
||||||
|
@ -241,6 +253,9 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertFalse($this->util->isSharedPath($path));
|
$this->assertFalse($this->util->isSharedPath($path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @large
|
||||||
|
*/
|
||||||
function testEncryptLegacyFiles() {
|
function testEncryptLegacyFiles() {
|
||||||
\Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
|
||||||
|
|
||||||
|
@ -269,7 +284,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
$params['password'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER;
|
$params['password'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER;
|
||||||
|
|
||||||
$util = new Encryption\Util($this->view, \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
|
$util = new Encryption\Util($this->view, \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
|
||||||
$util->setMigrationStatus(0);
|
$this->setMigrationStatus(0, \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
|
||||||
|
|
||||||
$this->assertTrue(OCA\Encryption\Hooks::login($params));
|
$this->assertTrue(OCA\Encryption\Hooks::login($params));
|
||||||
|
|
||||||
|
@ -314,4 +329,28 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
$params['password'] = $password;
|
$params['password'] = $password;
|
||||||
OCA\Encryption\Hooks::login($params);
|
OCA\Encryption\Hooks::login($params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function to set migration status to the right value
|
||||||
|
* to be able to test the migration path
|
||||||
|
*
|
||||||
|
* @param $status needed migration status for test
|
||||||
|
* @param $user for which user the status should be set
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
private function setMigrationStatus($status, $user) {
|
||||||
|
$sql = 'UPDATE `*PREFIX*encryption` SET `migration_status` = ? WHERE `uid` = ?';
|
||||||
|
$args = array(
|
||||||
|
$status,
|
||||||
|
$user
|
||||||
|
);
|
||||||
|
|
||||||
|
$query = \OCP\DB::prepare($sql);
|
||||||
|
if ($query->execute($args)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,12 @@ if ($isValid == false) {
|
||||||
|
|
||||||
// add the certificate if it could be verified
|
// add the certificate if it could be verified
|
||||||
if ( $isValid ) {
|
if ( $isValid ) {
|
||||||
|
// disable proxy to prevent multiple fopen calls
|
||||||
|
$proxyStatus = \OC_FileProxy::$enabled;
|
||||||
|
\OC_FileProxy::$enabled = false;
|
||||||
$view->file_put_contents($filename, $data);
|
$view->file_put_contents($filename, $data);
|
||||||
OC_Mount_Config::createCertificateBundle();
|
OC_Mount_Config::createCertificateBundle();
|
||||||
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
} else {
|
} else {
|
||||||
OCP\Util::writeLog('files_external',
|
OCP\Util::writeLog('files_external',
|
||||||
'Couldn\'t import SSL root certificate ('.$filename.'), allowed formats: PEM and DER',
|
'Couldn\'t import SSL root certificate ('.$filename.'), allowed formats: PEM and DER',
|
||||||
|
|
|
@ -88,7 +88,7 @@ OC.MountConfig={
|
||||||
url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'),
|
url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'),
|
||||||
data: {
|
data: {
|
||||||
mountPoint: mountPoint,
|
mountPoint: mountPoint,
|
||||||
class: backendClass,
|
'class': backendClass,
|
||||||
classOptions: classOptions,
|
classOptions: classOptions,
|
||||||
mountType: mountType,
|
mountType: mountType,
|
||||||
applicable: applicable,
|
applicable: applicable,
|
||||||
|
@ -103,7 +103,7 @@ OC.MountConfig={
|
||||||
url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'),
|
url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'),
|
||||||
data: {
|
data: {
|
||||||
mountPoint: mountPoint,
|
mountPoint: mountPoint,
|
||||||
class: backendClass,
|
'class': backendClass,
|
||||||
classOptions: classOptions,
|
classOptions: classOptions,
|
||||||
mountType: mountType,
|
mountType: mountType,
|
||||||
applicable: applicable,
|
applicable: applicable,
|
||||||
|
@ -247,15 +247,18 @@ $(document).ready(function() {
|
||||||
OC.MountConfig.saveStorage($(this).parent().parent());
|
OC.MountConfig.saveStorage($(this).parent().parent());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#sslCertificate').on('click', 'td.remove>img', function() {
|
||||||
|
var $tr = $(this).parent().parent();
|
||||||
|
var row = this.parentNode.parentNode;
|
||||||
|
$.post(OC.filePath('files_external', 'ajax', 'removeRootCertificate.php'), {cert: row.id});
|
||||||
|
$tr.remove();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
$('#externalStorage').on('click', 'td.remove>img', function() {
|
$('#externalStorage').on('click', 'td.remove>img', function() {
|
||||||
var tr = $(this).parent().parent();
|
var tr = $(this).parent().parent();
|
||||||
var mountPoint = $(tr).find('.mountPoint input').val();
|
var mountPoint = $(tr).find('.mountPoint input').val();
|
||||||
if ( ! mountPoint) {
|
|
||||||
var row=this.parentNode.parentNode;
|
|
||||||
$.post(OC.filePath('files_external', 'ajax', 'removeRootCertificate.php'), { cert: row.id });
|
|
||||||
$(tr).remove();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ($('#externalStorage').data('admin') === true) {
|
if ($('#externalStorage').data('admin') === true) {
|
||||||
var isPersonal = false;
|
var isPersonal = false;
|
||||||
var multiselect = $(tr).find('.chzn-select').val();
|
var multiselect = $(tr).find('.chzn-select').val();
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
"Error configuring Google Drive storage" => "Error al configurar el almacenamiento de Google Drive",
|
"Error configuring Google Drive storage" => "Error al configurar el almacenamiento de Google Drive",
|
||||||
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Advertencia:</b> El cliente smb (smbclient) no se encuentra instalado. El montado de archivos o ficheros CIFS/SMB no es posible. Por favor pida al administrador de su sistema que lo instale.",
|
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Advertencia:</b> El cliente smb (smbclient) no se encuentra instalado. El montado de archivos o ficheros CIFS/SMB no es posible. Por favor pida al administrador de su sistema que lo instale.",
|
||||||
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Advertencia:</b> El soporte de FTP en PHP no se encuentra instalado. El montado de archivos o ficheros FTP no es posible. Por favor pida al administrador de su sistema que lo instale.",
|
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Advertencia:</b> El soporte de FTP en PHP no se encuentra instalado. El montado de archivos o ficheros FTP no es posible. Por favor pida al administrador de su sistema que lo instale.",
|
||||||
|
"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>Advertencia:</b> El soporte de Curl de PHP no está activado ni instalado. Montar servicios ownCloud, WebDAV y/o GoogleDrive no será posible. Pedile al administrador del sistema que lo instale.",
|
||||||
"External Storage" => "Almacenamiento externo",
|
"External Storage" => "Almacenamiento externo",
|
||||||
"Folder name" => "Nombre de la carpeta",
|
"Folder name" => "Nombre de la carpeta",
|
||||||
"External storage" => "Almacenamiento externo",
|
"External storage" => "Almacenamiento externo",
|
||||||
|
|
|
@ -6,11 +6,14 @@
|
||||||
"Error configuring Google Drive storage" => "Google 드라이브 저장소 설정 오류",
|
"Error configuring Google Drive storage" => "Google 드라이브 저장소 설정 오류",
|
||||||
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>경고:</b> \"smbclient\"가 설치되지 않았습니다. CIFS/SMB 공유 자원에 연결할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
|
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>경고:</b> \"smbclient\"가 설치되지 않았습니다. CIFS/SMB 공유 자원에 연결할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
|
||||||
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>경고:</b> PHP FTP 지원이 비활성화되어 있거나 설치되지 않았습니다. FTP 공유를 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
|
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>경고:</b> PHP FTP 지원이 비활성화되어 있거나 설치되지 않았습니다. FTP 공유를 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
|
||||||
|
"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>경고:</b> PHP Curl 지원이 비활성화되어 있거나 설치되지 않았습니다. 다른 ownCloud, WebDAV, Google 드라이브 공유를 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
|
||||||
"External Storage" => "외부 저장소",
|
"External Storage" => "외부 저장소",
|
||||||
"Folder name" => "폴더 이름",
|
"Folder name" => "폴더 이름",
|
||||||
|
"External storage" => "외부 저장소",
|
||||||
"Configuration" => "설정",
|
"Configuration" => "설정",
|
||||||
"Options" => "옵션",
|
"Options" => "옵션",
|
||||||
"Applicable" => "적용 가능",
|
"Applicable" => "적용 가능",
|
||||||
|
"Add storage" => "저장소 추가",
|
||||||
"None set" => "설정되지 않음",
|
"None set" => "설정되지 않음",
|
||||||
"All Users" => "모든 사용자",
|
"All Users" => "모든 사용자",
|
||||||
"Groups" => "그룹",
|
"Groups" => "그룹",
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
"Error configuring Google Drive storage" => "Fel vid konfigurering av Google Drive",
|
"Error configuring Google Drive storage" => "Fel vid konfigurering av Google Drive",
|
||||||
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Varning:</b> \"smb-klienten\" är inte installerad. Montering av CIFS/SMB delningar är inte möjligt. Kontakta din systemadministratör för att få den installerad.",
|
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Varning:</b> \"smb-klienten\" är inte installerad. Montering av CIFS/SMB delningar är inte möjligt. Kontakta din systemadministratör för att få den installerad.",
|
||||||
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Varning:</b> Stöd för FTP i PHP är inte aktiverat eller installerat. Montering av FTP-delningar är inte möjligt. Kontakta din systemadministratör för att få det installerat.",
|
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Varning:</b> Stöd för FTP i PHP är inte aktiverat eller installerat. Montering av FTP-delningar är inte möjligt. Kontakta din systemadministratör för att få det installerat.",
|
||||||
|
"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>Varning:<b> Curl-stöd i PHP är inte aktiverat eller installerat. Montering av ownCloud / WebDAV eller GoogleDrive är inte möjligt. Vänligen be din administratör att installera det.",
|
||||||
"External Storage" => "Extern lagring",
|
"External Storage" => "Extern lagring",
|
||||||
"Folder name" => "Mappnamn",
|
"Folder name" => "Mappnamn",
|
||||||
"External storage" => "Extern lagring",
|
"External storage" => "Extern lagring",
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
"Error configuring Google Drive storage" => "配置 Google Drive 存储失败",
|
"Error configuring Google Drive storage" => "配置 Google Drive 存储失败",
|
||||||
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>注意:</b>“SMB客户端”未安装。CIFS/SMB分享不可用。请向您的系统管理员请求安装该客户端。",
|
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>注意:</b>“SMB客户端”未安装。CIFS/SMB分享不可用。请向您的系统管理员请求安装该客户端。",
|
||||||
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>注意:</b>PHP的FTP支持尚未启用或未安装。FTP分享不可用。请向您的系统管理员请求安装。",
|
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>注意:</b>PHP的FTP支持尚未启用或未安装。FTP分享不可用。请向您的系统管理员请求安装。",
|
||||||
|
"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>警告:</b> PHP 的 Curl 支持没有安装或打开。挂载 ownCloud、WebDAV 或 Google Drive 的功能将不可用。请询问您的系统管理员去安装它。",
|
||||||
"External Storage" => "外部存储",
|
"External Storage" => "外部存储",
|
||||||
"Folder name" => "文件夹名",
|
"Folder name" => "文件夹名",
|
||||||
"External storage" => "外部存储",
|
"External storage" => "外部存储",
|
||||||
|
|
|
@ -1,4 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
// in case there are private configurations in the users home -> use them
|
||||||
|
$privateConfigFile = $_SERVER['HOME'] . '/owncloud-extfs-test-config.php';
|
||||||
|
if (file_exists($privateConfigFile)) {
|
||||||
|
$config = include($privateConfigFile);
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this is now more a template now for your private configurations
|
||||||
return array(
|
return array(
|
||||||
'ftp'=>array(
|
'ftp'=>array(
|
||||||
'run'=>false,
|
'run'=>false,
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
"Password" => "Wagwoord",
|
"Password" => "Wagwoord"
|
||||||
"web services under your control" => "webdienste onder jou beheer"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s شارك المجلد %s معك",
|
"%s shared the folder %s with you" => "%s شارك المجلد %s معك",
|
||||||
"%s shared the file %s with you" => "%s شارك الملف %s معك",
|
"%s shared the file %s with you" => "%s شارك الملف %s معك",
|
||||||
"Download" => "تحميل",
|
"Download" => "تحميل",
|
||||||
"No preview available for" => "لا يوجد عرض مسبق لـ",
|
"No preview available for" => "لا يوجد عرض مسبق لـ"
|
||||||
"web services under your control" => "خدمات الشبكة تحت سيطرتك"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s сподели папката %s с Вас",
|
"%s shared the folder %s with you" => "%s сподели папката %s с Вас",
|
||||||
"%s shared the file %s with you" => "%s сподели файла %s с Вас",
|
"%s shared the file %s with you" => "%s сподели файла %s с Вас",
|
||||||
"Download" => "Изтегляне",
|
"Download" => "Изтегляне",
|
||||||
"No preview available for" => "Няма наличен преглед за",
|
"No preview available for" => "Няма наличен преглед за"
|
||||||
"web services under your control" => "уеб услуги под Ваш контрол"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s আপনার সাথে %s ফোল্ডারটি ভাগাভাগি করেছেন",
|
"%s shared the folder %s with you" => "%s আপনার সাথে %s ফোল্ডারটি ভাগাভাগি করেছেন",
|
||||||
"%s shared the file %s with you" => "%s আপনার সাথে %s ফাইলটি ভাগাভাগি করেছেন",
|
"%s shared the file %s with you" => "%s আপনার সাথে %s ফাইলটি ভাগাভাগি করেছেন",
|
||||||
"Download" => "ডাউনলোড",
|
"Download" => "ডাউনলোড",
|
||||||
"No preview available for" => "এর জন্য কোন প্রাকবীক্ষণ সুলভ নয়",
|
"No preview available for" => "এর জন্য কোন প্রাকবীক্ষণ সুলভ নয়"
|
||||||
"web services under your control" => "ওয়েব সার্ভিস আপনার হাতের মুঠোয়"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s ha compartit la carpeta %s amb vós",
|
"%s shared the folder %s with you" => "%s ha compartit la carpeta %s amb vós",
|
||||||
"%s shared the file %s with you" => "%s ha compartit el fitxer %s amb vós",
|
"%s shared the file %s with you" => "%s ha compartit el fitxer %s amb vós",
|
||||||
"Download" => "Baixa",
|
"Download" => "Baixa",
|
||||||
"No preview available for" => "No hi ha vista prèvia disponible per a",
|
"No preview available for" => "No hi ha vista prèvia disponible per a"
|
||||||
"web services under your control" => "controleu els vostres serveis web"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s s Vámi sdílí složku %s",
|
"%s shared the folder %s with you" => "%s s Vámi sdílí složku %s",
|
||||||
"%s shared the file %s with you" => "%s s Vámi sdílí soubor %s",
|
"%s shared the file %s with you" => "%s s Vámi sdílí soubor %s",
|
||||||
"Download" => "Stáhnout",
|
"Download" => "Stáhnout",
|
||||||
"No preview available for" => "Náhled není dostupný pro",
|
"No preview available for" => "Náhled není dostupný pro"
|
||||||
"web services under your control" => "služby webu pod Vaší kontrolou"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "Rhannodd %s blygell %s â chi",
|
"%s shared the folder %s with you" => "Rhannodd %s blygell %s â chi",
|
||||||
"%s shared the file %s with you" => "Rhannodd %s ffeil %s â chi",
|
"%s shared the file %s with you" => "Rhannodd %s ffeil %s â chi",
|
||||||
"Download" => "Llwytho i lawr",
|
"Download" => "Llwytho i lawr",
|
||||||
"No preview available for" => "Does dim rhagolwg ar gael ar gyfer",
|
"No preview available for" => "Does dim rhagolwg ar gael ar gyfer"
|
||||||
"web services under your control" => "gwasanaethau gwe a reolir gennych"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s delte mappen %s med dig",
|
"%s shared the folder %s with you" => "%s delte mappen %s med dig",
|
||||||
"%s shared the file %s with you" => "%s delte filen %s med dig",
|
"%s shared the file %s with you" => "%s delte filen %s med dig",
|
||||||
"Download" => "Download",
|
"Download" => "Download",
|
||||||
"No preview available for" => "Forhåndsvisning ikke tilgængelig for",
|
"No preview available for" => "Forhåndsvisning ikke tilgængelig for"
|
||||||
"web services under your control" => "Webtjenester under din kontrol"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s hat den Ordner %s mit Dir geteilt",
|
"%s shared the folder %s with you" => "%s hat den Ordner %s mit Dir geteilt",
|
||||||
"%s shared the file %s with you" => "%s hat die Datei %s mit Dir geteilt",
|
"%s shared the file %s with you" => "%s hat die Datei %s mit Dir geteilt",
|
||||||
"Download" => "Download",
|
"Download" => "Download",
|
||||||
"No preview available for" => "Es ist keine Vorschau verfügbar für",
|
"No preview available for" => "Es ist keine Vorschau verfügbar für"
|
||||||
"web services under your control" => "Web-Services unter Deiner Kontrolle"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s hat den Ordner %s mit Ihnen geteilt",
|
"%s shared the folder %s with you" => "%s hat den Ordner %s mit Ihnen geteilt",
|
||||||
"%s shared the file %s with you" => "%s hat die Datei %s mit Ihnen geteilt",
|
"%s shared the file %s with you" => "%s hat die Datei %s mit Ihnen geteilt",
|
||||||
"Download" => "Herunterladen",
|
"Download" => "Herunterladen",
|
||||||
"No preview available for" => "Es ist keine Vorschau verfügbar für",
|
"No preview available for" => "Es ist keine Vorschau verfügbar für"
|
||||||
"web services under your control" => "Web-Services unter Ihrer Kontrolle"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s μοιράστηκε τον φάκελο %s μαζί σας",
|
"%s shared the folder %s with you" => "%s μοιράστηκε τον φάκελο %s μαζί σας",
|
||||||
"%s shared the file %s with you" => "%s μοιράστηκε το αρχείο %s μαζί σας",
|
"%s shared the file %s with you" => "%s μοιράστηκε το αρχείο %s μαζί σας",
|
||||||
"Download" => "Λήψη",
|
"Download" => "Λήψη",
|
||||||
"No preview available for" => "Δεν υπάρχει διαθέσιμη προεπισκόπηση για",
|
"No preview available for" => "Δεν υπάρχει διαθέσιμη προεπισκόπηση για"
|
||||||
"web services under your control" => "υπηρεσίες δικτύου υπό τον έλεγχό σας"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s shared the folder %s with you",
|
"%s shared the folder %s with you" => "%s shared the folder %s with you",
|
||||||
"%s shared the file %s with you" => "%s shared the file %s with you",
|
"%s shared the file %s with you" => "%s shared the file %s with you",
|
||||||
"Download" => "Download",
|
"Download" => "Download",
|
||||||
"No preview available for" => "No preview available for",
|
"No preview available for" => "No preview available for"
|
||||||
"web services under your control" => "web services under your control"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s kunhavigis la dosierujon %s kun vi",
|
"%s shared the folder %s with you" => "%s kunhavigis la dosierujon %s kun vi",
|
||||||
"%s shared the file %s with you" => "%s kunhavigis la dosieron %s kun vi",
|
"%s shared the file %s with you" => "%s kunhavigis la dosieron %s kun vi",
|
||||||
"Download" => "Elŝuti",
|
"Download" => "Elŝuti",
|
||||||
"No preview available for" => "Ne haveblas antaŭvido por",
|
"No preview available for" => "Ne haveblas antaŭvido por"
|
||||||
"web services under your control" => "TTT-servoj regataj de vi"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s compartió la carpeta %s contigo",
|
"%s shared the folder %s with you" => "%s compartió la carpeta %s contigo",
|
||||||
"%s shared the file %s with you" => "%s compartió el fichero %s contigo",
|
"%s shared the file %s with you" => "%s compartió el fichero %s contigo",
|
||||||
"Download" => "Descargar",
|
"Download" => "Descargar",
|
||||||
"No preview available for" => "No hay vista previa disponible para",
|
"No preview available for" => "No hay vista previa disponible para"
|
||||||
"web services under your control" => "Servicios web bajo su control"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s compartió la carpeta %s con vos",
|
"%s shared the folder %s with you" => "%s compartió la carpeta %s con vos",
|
||||||
"%s shared the file %s with you" => "%s compartió el archivo %s con vos",
|
"%s shared the file %s with you" => "%s compartió el archivo %s con vos",
|
||||||
"Download" => "Descargar",
|
"Download" => "Descargar",
|
||||||
"No preview available for" => "La vista preliminar no está disponible para",
|
"No preview available for" => "La vista preliminar no está disponible para"
|
||||||
"web services under your control" => "servicios web controlados por vos"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s jagas sinuga kausta %s",
|
"%s shared the folder %s with you" => "%s jagas sinuga kausta %s",
|
||||||
"%s shared the file %s with you" => "%s jagas sinuga faili %s",
|
"%s shared the file %s with you" => "%s jagas sinuga faili %s",
|
||||||
"Download" => "Lae alla",
|
"Download" => "Lae alla",
|
||||||
"No preview available for" => "Eelvaadet pole saadaval",
|
"No preview available for" => "Eelvaadet pole saadaval"
|
||||||
"web services under your control" => "veebitenused sinu kontrolli all"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%sk zurekin %s karpeta elkarbanatu du",
|
"%s shared the folder %s with you" => "%sk zurekin %s karpeta elkarbanatu du",
|
||||||
"%s shared the file %s with you" => "%sk zurekin %s fitxategia elkarbanatu du",
|
"%s shared the file %s with you" => "%sk zurekin %s fitxategia elkarbanatu du",
|
||||||
"Download" => "Deskargatu",
|
"Download" => "Deskargatu",
|
||||||
"No preview available for" => "Ez dago aurrebista eskuragarririk hauentzat ",
|
"No preview available for" => "Ez dago aurrebista eskuragarririk hauentzat "
|
||||||
"web services under your control" => "web zerbitzuak zure kontrolpean"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%sپوشه %s را با شما به اشتراک گذاشت",
|
"%s shared the folder %s with you" => "%sپوشه %s را با شما به اشتراک گذاشت",
|
||||||
"%s shared the file %s with you" => "%sفایل %s را با شما به اشتراک گذاشت",
|
"%s shared the file %s with you" => "%sفایل %s را با شما به اشتراک گذاشت",
|
||||||
"Download" => "دانلود",
|
"Download" => "دانلود",
|
||||||
"No preview available for" => "هیچگونه پیش نمایشی موجود نیست",
|
"No preview available for" => "هیچگونه پیش نمایشی موجود نیست"
|
||||||
"web services under your control" => "سرویس های تحت وب در کنترل شما"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s jakoi kansion %s kanssasi",
|
"%s shared the folder %s with you" => "%s jakoi kansion %s kanssasi",
|
||||||
"%s shared the file %s with you" => "%s jakoi tiedoston %s kanssasi",
|
"%s shared the file %s with you" => "%s jakoi tiedoston %s kanssasi",
|
||||||
"Download" => "Lataa",
|
"Download" => "Lataa",
|
||||||
"No preview available for" => "Ei esikatselua kohteelle",
|
"No preview available for" => "Ei esikatselua kohteelle"
|
||||||
"web services under your control" => "verkkopalvelut hallinnassasi"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s a partagé le répertoire %s avec vous",
|
"%s shared the folder %s with you" => "%s a partagé le répertoire %s avec vous",
|
||||||
"%s shared the file %s with you" => "%s a partagé le fichier %s avec vous",
|
"%s shared the file %s with you" => "%s a partagé le fichier %s avec vous",
|
||||||
"Download" => "Télécharger",
|
"Download" => "Télécharger",
|
||||||
"No preview available for" => "Pas d'aperçu disponible pour",
|
"No preview available for" => "Pas d'aperçu disponible pour"
|
||||||
"web services under your control" => "services web sous votre contrôle"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s compartiu o cartafol %s con vostede",
|
"%s shared the folder %s with you" => "%s compartiu o cartafol %s con vostede",
|
||||||
"%s shared the file %s with you" => "%s compartiu o ficheiro %s con vostede",
|
"%s shared the file %s with you" => "%s compartiu o ficheiro %s con vostede",
|
||||||
"Download" => "Descargar",
|
"Download" => "Descargar",
|
||||||
"No preview available for" => "Sen vista previa dispoñíbel para",
|
"No preview available for" => "Sen vista previa dispoñíbel para"
|
||||||
"web services under your control" => "servizos web baixo o seu control"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s שיתף עמך את התיקייה %s",
|
"%s shared the folder %s with you" => "%s שיתף עמך את התיקייה %s",
|
||||||
"%s shared the file %s with you" => "%s שיתף עמך את הקובץ %s",
|
"%s shared the file %s with you" => "%s שיתף עמך את הקובץ %s",
|
||||||
"Download" => "הורדה",
|
"Download" => "הורדה",
|
||||||
"No preview available for" => "אין תצוגה מקדימה זמינה עבור",
|
"No preview available for" => "אין תצוגה מקדימה זמינה עבור"
|
||||||
"web services under your control" => "שירותי רשת תחת השליטה שלך"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
"Password" => "Lozinka",
|
"Password" => "Lozinka",
|
||||||
"Submit" => "Pošalji",
|
"Submit" => "Pošalji",
|
||||||
"Download" => "Preuzimanje",
|
"Download" => "Preuzimanje"
|
||||||
"web services under your control" => "web usluge pod vašom kontrolom"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s megosztotta Önnel ezt a mappát: %s",
|
"%s shared the folder %s with you" => "%s megosztotta Önnel ezt a mappát: %s",
|
||||||
"%s shared the file %s with you" => "%s megosztotta Önnel ezt az állományt: %s",
|
"%s shared the file %s with you" => "%s megosztotta Önnel ezt az állományt: %s",
|
||||||
"Download" => "Letöltés",
|
"Download" => "Letöltés",
|
||||||
"No preview available for" => "Nem áll rendelkezésre előnézet ehhez: ",
|
"No preview available for" => "Nem áll rendelkezésre előnézet ehhez: "
|
||||||
"web services under your control" => "webszolgáltatások saját kézben"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?php $TRANSLATIONS = array(
|
<?php $TRANSLATIONS = array(
|
||||||
"Password" => "Contrasigno",
|
"Password" => "Contrasigno",
|
||||||
"Submit" => "Submitter",
|
"Submit" => "Submitter",
|
||||||
"Download" => "Discargar",
|
"Download" => "Discargar"
|
||||||
"web services under your control" => "servicios web sub tu controlo"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s membagikan folder %s dengan Anda",
|
"%s shared the folder %s with you" => "%s membagikan folder %s dengan Anda",
|
||||||
"%s shared the file %s with you" => "%s membagikan file %s dengan Anda",
|
"%s shared the file %s with you" => "%s membagikan file %s dengan Anda",
|
||||||
"Download" => "Unduh",
|
"Download" => "Unduh",
|
||||||
"No preview available for" => "Tidak ada pratinjau tersedia untuk",
|
"No preview available for" => "Tidak ada pratinjau tersedia untuk"
|
||||||
"web services under your control" => "layanan web dalam kontrol Anda"
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"%s shared the folder %s with you" => "%s deildi möppunni %s með þér",
|
"%s shared the folder %s with you" => "%s deildi möppunni %s með þér",
|
||||||
"%s shared the file %s with you" => "%s deildi skránni %s með þér",
|
"%s shared the file %s with you" => "%s deildi skránni %s með þér",
|
||||||
"Download" => "Niðurhal",
|
"Download" => "Niðurhal",
|
||||||
"No preview available for" => "Yfirlit ekki í boði fyrir",
|
"No preview available for" => "Yfirlit ekki í boði fyrir"
|
||||||
"web services under your control" => "vefþjónusta undir þinni stjórn"
|
|
||||||
);
|
);
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue