mirror of
https://github.com/nextcloud/passman.git
synced 2025-10-11 05:56:15 +08:00
Passman 2.0.0-RC3
Merge remote-tracking branch 'EdOverflow/hash_equals' Signed-off-by: Passman Bot <info@passman.cc>
This commit is contained in:
parent
aa79cde63a
commit
dfaac9d34c
41 changed files with 1418 additions and 189 deletions
26
CHANGELOG.md
26
CHANGELOG.md
|
@ -1,6 +1,20 @@
|
|||
owncloud-passman (0.0.1)
|
||||
* **Security**: Security description here
|
||||
* **Backwards incompatible change**: Changes in the API
|
||||
* **New dependency**: New dependencies such as a new ownCloud or PHP version
|
||||
* **Bugfix**: Bugfix description
|
||||
* **Enhancement**: New feature description
|
||||
## [Unreleased]
|
||||
### Updated
|
||||
- Updated to passman 2.0.0
|
||||
|
||||
## 2.0.0 – 2016-12-31
|
||||
### Added
|
||||
- Password sharing
|
||||
- Vaults
|
||||
- Change vault passwords
|
||||
- Unit tests
|
||||
|
||||
### Changed
|
||||
- Passman API overhaul
|
||||
- Rewrite of code base
|
||||
- New passman repo at https://github.com/nextcloud/passman
|
||||
### Fixed
|
||||
- A lot of small bug fixes
|
||||
|
||||
### Removed
|
||||
- Old passman API
|
||||
|
|
2
CONTRIBUTING.md
Normal file
2
CONTRIBUTING.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
If you want to contribute make sure the commits are `verified`.
|
||||
You can read how to GPG sign you commits [here](https://help.github.com/articles/signing-commits-using-gpg/).
|
|
@ -23,7 +23,7 @@ Features:
|
|||
- Clipperz.is
|
||||
|
||||
|
||||
For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
|
||||
For a demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
|
||||
|
||||
## Tested on
|
||||
- NextCloud 10 / 11
|
||||
|
@ -71,9 +71,9 @@ Example:
|
|||
## Development
|
||||
Passman uses a single `.js` file for the templates. This gives the benefit that we don't need to request every template with XHR.
|
||||
For CSS we use SASS so you need ruby and sass installed.
|
||||
`templates.js` and the CSS are build width `grunt`.
|
||||
`templates.js` and the CSS are built with `grunt`.
|
||||
To watch for changes use `grunt watch`
|
||||
To run the unit tests install phpunit globally, and stup the envioronment variables on the `launch_phpunit.sh` script then just run that script any argumetns passed to this script will be forwarded to phpunit.
|
||||
To run the unit tests install phpunit globally, and setup the environment variables on the `launch_phpunit.sh` script then just run that script, any arguments passed to this script will be forwarded to phpunit.
|
||||
|
||||
## Main developers
|
||||
- Brantje
|
||||
|
@ -86,4 +86,4 @@ Add yours when creating a pull request!
|
|||
|
||||
## FAQ
|
||||
**Are you adding something to check if malicious code is executing on the browser?**
|
||||
No, because malitous code could edit the functions that check for malicious code.
|
||||
No, because malicious code could edit the functions that check for malicious code.
|
|
@ -14,6 +14,7 @@ namespace OCA\Passman\AppInfo;
|
|||
|
||||
use OCP\Util;
|
||||
use OCP\BackgroundJob;
|
||||
use OCP\App;
|
||||
use OCA\Passman\Notifier;
|
||||
use OCA\Passman\Activity;
|
||||
require_once __DIR__ . '/autoload.php';
|
||||
|
@ -49,3 +50,4 @@ $manager->registerExtension(function() {
|
|||
* The string has to match the app's folder name
|
||||
*/
|
||||
Util::addTranslations('passman');
|
||||
\OCP\App::registerAdmin('passman', 'templates/admin.settings');
|
|
@ -17,7 +17,7 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
|
|||
]]></description>
|
||||
|
||||
<licence>AGPL</licence>
|
||||
<version>2.0.0-RC2</version>
|
||||
<version>2.0.0-RC3</version>
|
||||
<author homepage="https://github.com/brantje">Sander Brand</author>
|
||||
<author homepage="https://github.com/animalillo">Marcos Zuriaga</author>
|
||||
<namespace>Passman</namespace>
|
||||
|
@ -41,6 +41,9 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
|
|||
<database min-version="5.5">mysql</database>
|
||||
</dependencies>
|
||||
|
||||
<settings>
|
||||
<admin>OCA\Passman\Controller\SettingsController</admin>
|
||||
</settings>
|
||||
|
||||
<background-jobs>
|
||||
<job>OCA\Passman\BackgroundJob\ExpireCredentials</job>
|
||||
|
|
|
@ -67,6 +67,11 @@ return [
|
|||
['name' => 'share#updateSharedCredentialACL', 'url' => '/api/v2/sharing/credential/{item_guid}/acl', 'verb' => 'PATCH'],
|
||||
['name' => 'internal#getAppVersion', 'url' => '/api/v2/version', 'verb' => 'GET'],
|
||||
|
||||
//Settings
|
||||
['name' => 'settings#getSettings', 'url' => '/api/v2/settings', 'verb' => 'GET'],
|
||||
['name' => 'settings#saveUserSetting', 'url' => '/api/v2/settings/{key}/{value}', 'verb' => 'POST'],
|
||||
['name' => 'settings#saveAdminSetting', 'url' => '/api/v2/settings/{key}/{value}/admin1/admin2', 'verb' => 'POST'],
|
||||
|
||||
|
||||
//Translations
|
||||
['name' => 'translation#getLanguageStrings', 'url' => '/api/v2/language', 'verb' => 'GET'],
|
||||
|
@ -76,6 +81,5 @@ return [
|
|||
['name' => 'internal#read', 'url' => '/api/internal/notifications/read/{credential_id}', 'verb' => 'DELETE'],
|
||||
['name' => 'internal#getAppVersion', 'url' => '/api/internal/version', 'verb' => 'GET'],
|
||||
['name' => 'internal#generatePerson', 'url' => '/api/internal/generate_person', 'verb' => 'GET'],
|
||||
|
||||
]
|
||||
];
|
|
@ -11,10 +11,9 @@
|
|||
|
||||
namespace OCA\Passman\Controller;
|
||||
|
||||
use OCA\Files_External\NotFoundException;
|
||||
use OCA\Passman\Db\SharingACL;
|
||||
use OCA\Passman\Service\SettingsService;
|
||||
use OCA\Passman\Utility\NotFoundJSONResponse;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\IRequest;
|
||||
|
@ -25,7 +24,7 @@ use OCA\Passman\Activity;
|
|||
use OCA\Passman\Service\ActivityService;
|
||||
use OCA\Passman\Service\CredentialRevisionService;
|
||||
use OCA\Passman\Service\ShareService;
|
||||
use OCP\IUser;
|
||||
|
||||
|
||||
class CredentialController extends ApiController {
|
||||
private $userId;
|
||||
|
@ -33,6 +32,7 @@ class CredentialController extends ApiController {
|
|||
private $activityService;
|
||||
private $credentialRevisionService;
|
||||
private $sharingService;
|
||||
private $settings;
|
||||
|
||||
public function __construct($AppName,
|
||||
IRequest $request,
|
||||
|
@ -40,7 +40,8 @@ class CredentialController extends ApiController {
|
|||
CredentialService $credentialService,
|
||||
ActivityService $activityService,
|
||||
CredentialRevisionService $credentialRevisionService,
|
||||
ShareService $sharingService
|
||||
ShareService $sharingService,
|
||||
SettingsService $settings
|
||||
) {
|
||||
parent::__construct($AppName, $request);
|
||||
$this->userId = $userId;
|
||||
|
@ -48,8 +49,10 @@ class CredentialController extends ApiController {
|
|||
$this->activityService = $activityService;
|
||||
$this->credentialRevisionService = $credentialRevisionService;
|
||||
$this->sharingService = $sharingService;
|
||||
$this->settings = $settings;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
* @NoCSRFRequired
|
||||
|
@ -85,7 +88,7 @@ class CredentialController extends ApiController {
|
|||
);
|
||||
$credential = $this->credentialService->createCredential($credential);
|
||||
$link = ''; // @TODO create direct link to credential
|
||||
if(!$credential->getHidden()) {
|
||||
if (!$credential->getHidden()) {
|
||||
$this->activityService->add(
|
||||
Activity::SUBJECT_ITEM_CREATED_SELF, array($label, $this->userId),
|
||||
'', array(),
|
||||
|
@ -139,14 +142,18 @@ class CredentialController extends ApiController {
|
|||
);
|
||||
|
||||
|
||||
if ($storedCredential->getUserId() !== $this->userId) {
|
||||
if (!hash_equals($storedCredential->getUserId(), $this->userId)) {
|
||||
$acl = $this->sharingService->getCredentialAclForUser($this->userId, $storedCredential->getGuid());
|
||||
if ($acl->hasPermission(SharingACL::WRITE)) {
|
||||
$credential['shared_key'] = $storedCredential->getSharedKey();
|
||||
} else {
|
||||
return new DataResponse(['msg' => 'Not authorized'], Http::STATUS_UNAUTHORIZED);
|
||||
}
|
||||
if ($this->settings->isEnabled('user_sharing_enabled')) {
|
||||
return new DataResponse(['msg' => 'Not authorized'], Http::STATUS_UNAUTHORIZED);
|
||||
}
|
||||
}
|
||||
|
||||
$link = ''; // @TODO create direct link to credential
|
||||
if ($revision_created) {
|
||||
$activity = 'item_apply_revision';
|
||||
|
@ -154,13 +161,13 @@ class CredentialController extends ApiController {
|
|||
$activity . '_self', array($label, $this->userId, $revision_created),
|
||||
'', array(),
|
||||
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
|
||||
} else if (($storedCredential->getDeleteTime() === 0) && (int) $delete_time > 0) {
|
||||
} else if (($storedCredential->getDeleteTime() === 0) && (int)$delete_time > 0) {
|
||||
$activity = 'item_deleted';
|
||||
$this->activityService->add(
|
||||
$activity . '_self', array($label, $this->userId),
|
||||
'', array(),
|
||||
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
|
||||
} else if (($storedCredential->getDeleteTime() > 0) && (int) $delete_time === 0) {
|
||||
} else if (($storedCredential->getDeleteTime() > 0) && (int)$delete_time === 0) {
|
||||
$activity = 'item_recovered';
|
||||
$this->activityService->add(
|
||||
$activity . '_self', array($label, $this->userId),
|
||||
|
@ -183,7 +190,7 @@ class CredentialController extends ApiController {
|
|||
|
||||
try {
|
||||
$acl_list = $this->sharingService->getCredentialAclList($storedCredential->getGuid());
|
||||
} catch (DoesNotExistException $exception) {
|
||||
} catch (\Exception $exception) {
|
||||
// Just check if we have an acl list
|
||||
}
|
||||
if (!empty($acl_list)) {
|
||||
|
@ -204,7 +211,7 @@ class CredentialController extends ApiController {
|
|||
|
||||
foreach ($acl_list as $sharingACL) {
|
||||
$target_user = $sharingACL->getUserId();
|
||||
if($target_user === $this->userId){
|
||||
if ($target_user === $this->userId) {
|
||||
continue;
|
||||
}
|
||||
$this->activityService->add(
|
||||
|
@ -212,22 +219,22 @@ class CredentialController extends ApiController {
|
|||
'', array(),
|
||||
$link, $target_user, Activity::TYPE_ITEM_ACTION);
|
||||
}
|
||||
if ($this->userId !== $storedCredential->getUserId()) {
|
||||
if (!hash_equals($this->userId, $storedCredential->getUserId())) {
|
||||
$this->activityService->add(
|
||||
$activity, $params,
|
||||
'', array(),
|
||||
$link, $storedCredential->getUserId(), Activity::TYPE_ITEM_ACTION);
|
||||
}
|
||||
}
|
||||
if($set_share_key === true){
|
||||
if ($set_share_key === true) {
|
||||
$storedCredential->setSharedKey($shared_key);
|
||||
$credential['shared_key'] = $shared_key;
|
||||
}
|
||||
if($unshare_action === true){
|
||||
if ($unshare_action === true) {
|
||||
$storedCredential->setSharedKey('');
|
||||
$credential['shared_key'] = '';
|
||||
}
|
||||
if(!$skip_revision) {
|
||||
if (!$skip_revision) {
|
||||
$this->credentialRevisionService->createRevision($storedCredential, $storedCredential->getUserId(), $credential_id, $this->userId);
|
||||
}
|
||||
$credential = $this->credentialService->updateCredential($credential);
|
||||
|
@ -259,26 +266,23 @@ class CredentialController extends ApiController {
|
|||
* @NoCSRFRequired
|
||||
*/
|
||||
public function getRevision($credential_guid) {
|
||||
try {
|
||||
$credential = $this->credentialService->getCredentialByGUID($credential_guid);
|
||||
}
|
||||
catch (DoesNotExistException $ex){
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
try {
|
||||
$credential = $this->credentialService->getCredentialByGUID($credential_guid);
|
||||
} catch (\Exception $ex) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
|
||||
// If the request was made by the owner of the credential
|
||||
if ($this->userId === $credential->getUserId()) {
|
||||
$result = $this->credentialRevisionService->getRevisions($credential->getId(), $this->userId);
|
||||
}
|
||||
else {
|
||||
$acl = $this->sharingService->getACL($this->userId, $credential_guid);
|
||||
if ($acl->hasPermission(SharingACL::HISTORY)){
|
||||
$result = $this->credentialRevisionService->getRevisions($credential->getId());
|
||||
}
|
||||
else {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
}
|
||||
// If the request was made by the owner of the credential
|
||||
if ($this->userId === $credential->getUserId()) {
|
||||
$result = $this->credentialRevisionService->getRevisions($credential->getId(), $this->userId);
|
||||
} else {
|
||||
$acl = $this->sharingService->getACL($this->userId, $credential_guid);
|
||||
if ($acl->hasPermission(SharingACL::HISTORY)) {
|
||||
$result = $this->credentialRevisionService->getRevisions($credential->getId());
|
||||
} else {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
}
|
||||
|
||||
return new JSONResponse($result);
|
||||
}
|
||||
|
@ -296,17 +300,17 @@ class CredentialController extends ApiController {
|
|||
* @NoAdminRequired
|
||||
* @NoCSRFRequired
|
||||
*/
|
||||
public function updateRevision($credential_guid, $revision_id, $credential_data){
|
||||
public function updateRevision($credential_guid, $revision_id, $credential_data) {
|
||||
$revision = null;
|
||||
try {
|
||||
$this->credentialService->getCredentialByGUID($credential_guid, $this->userId);
|
||||
} catch (DoesNotExistException $e) {
|
||||
} catch (\Exception $e) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
|
||||
try{
|
||||
try {
|
||||
$revision = $this->credentialRevisionService->getRevision($revision_id);
|
||||
} catch(DoesNotExistException $exception){
|
||||
} catch (\Exception $exception) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
|
||||
|
|
|
@ -59,10 +59,10 @@ class FileController extends ApiController {
|
|||
return new JSONResponse($this->fileService->deleteFile($file_id, $this->userId));
|
||||
}
|
||||
|
||||
public function updateFile($file_id, $file_data, $filename, $mimetype, $size){
|
||||
public function updateFile($file_id, $file_data, $filename){
|
||||
try{
|
||||
$file = $this->fileService->getFile($file_id, $this->userId);
|
||||
} catch (DoesNotExistException $doesNotExistException){
|
||||
} catch (\Exception $doesNotExistException){
|
||||
|
||||
}
|
||||
if($file){
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
namespace OCA\Passman\Controller;
|
||||
|
||||
use OCP\IConfig;
|
||||
use OCP\IRequest;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\ApiController;
|
||||
|
@ -20,14 +21,18 @@ use \OCP\App;
|
|||
class InternalController extends ApiController {
|
||||
private $userId;
|
||||
private $credentialService;
|
||||
private $config;
|
||||
|
||||
public function __construct($AppName,
|
||||
IRequest $request,
|
||||
$UserId,
|
||||
CredentialService $credentialService) {
|
||||
CredentialService $credentialService,
|
||||
IConfig $config
|
||||
) {
|
||||
parent::__construct($AppName, $request);
|
||||
$this->userId = $UserId;
|
||||
$this->credentialService = $credentialService;
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -35,15 +40,17 @@ class InternalController extends ApiController {
|
|||
*/
|
||||
public function remind($credential_id) {
|
||||
$credential = $this->credentialService->getCredentialById($credential_id, $this->userId);
|
||||
$credential->setExpireTime(time() + (24 * 60 * 60));
|
||||
$this->credentialService->upd($credential);
|
||||
if($credential) {
|
||||
$credential->setExpireTime(time() + (24 * 60 * 60));
|
||||
$this->credentialService->upd($credential);
|
||||
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('credential', $credential_id)
|
||||
->setUser($this->userId);
|
||||
$manager->markProcessed($notification);
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('credential', $credential_id)
|
||||
->setUser($this->userId);
|
||||
$manager->markProcessed($notification);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -52,15 +59,17 @@ class InternalController extends ApiController {
|
|||
public function read($credential_id) {
|
||||
|
||||
$credential = $this->credentialService->getCredentialById($credential_id, $this->userId);
|
||||
$credential->setExpireTime(0);
|
||||
$this->credentialService->upd($credential);
|
||||
if($credential) {
|
||||
$credential->setExpireTime(0);
|
||||
$this->credentialService->upd($credential);
|
||||
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('credential', $credential_id)
|
||||
->setUser($this->userId);
|
||||
$manager->markProcessed($notification);
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('credential', $credential_id)
|
||||
->setUser($this->userId);
|
||||
$manager->markProcessed($notification);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -80,4 +89,30 @@ class InternalController extends ApiController {
|
|||
return new JSONResponse($random_person);
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
* @NoCSRFRequired
|
||||
*/
|
||||
public function getSettings() {
|
||||
$settings = array(
|
||||
'link_sharing_enabled' => intval($this->config->getAppValue('passman', 'link_sharing_enabled', 1)),
|
||||
'user_sharing_enabled' => intval($this->config->getAppValue('passman', 'user_sharing_enabled', 1)),
|
||||
'vault_key_strength' => intval($this->config->getAppValue('passman', 'vault_key_strength', 3)),
|
||||
'check_version' => intval($this->config->getAppValue('passman', 'check_version', 1)),
|
||||
'https_check' => intval($this->config->getAppValue('passman', 'https_check', 1)),
|
||||
'disable_contextmenu' => intval($this->config->getAppValue('passman', 'disable_contextmenu', 1)),
|
||||
);
|
||||
return new JSONResponse($settings);
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoCSRFRequired
|
||||
*/
|
||||
public function saveSettings($key, $value) {
|
||||
if (is_numeric($value)) {
|
||||
$value = intval($value);
|
||||
}
|
||||
$this->config->setAppValue('passman', $key, $value);
|
||||
}
|
||||
|
||||
}
|
96
controller/settingscontroller.php
Normal file
96
controller/settingscontroller.php
Normal file
|
@ -0,0 +1,96 @@
|
|||
<?php
|
||||
/**
|
||||
* Nextcloud - passman
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Sander Brand <brantje@gmail.com>
|
||||
* @copyright Sander Brand 2016
|
||||
*/
|
||||
|
||||
namespace OCA\Passman\Controller;
|
||||
|
||||
use OCP\IL10N;
|
||||
use OCP\Settings\ISettings;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\ApiController;
|
||||
use OCP\IRequest;
|
||||
use OCA\Passman\Service\SettingsService;
|
||||
|
||||
class SettingsController extends ApiController {
|
||||
private $userId;
|
||||
private $settings;
|
||||
|
||||
public function __construct(
|
||||
$AppName,
|
||||
IRequest $request,
|
||||
$userId,
|
||||
SettingsService $settings,
|
||||
IL10N $l) {
|
||||
parent::__construct($AppName, $request);
|
||||
$this->settings = $settings;
|
||||
$this->l = $l;
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return TemplateResponse
|
||||
*/
|
||||
public function getForm() {
|
||||
return new TemplateResponse('passman', 'part.admin');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string the section ID, e.g. 'sharing'
|
||||
*/
|
||||
public function getSection() {
|
||||
return 'additional';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int whether the form should be rather on the top or bottom of
|
||||
* the admin section. The forms are arranged in ascending order of the
|
||||
* priority values. It is required to return a value between 0 and 100.
|
||||
*
|
||||
* E.g.: 70
|
||||
*/
|
||||
public function getPriority() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all settings
|
||||
*
|
||||
* @NoAdminRequired
|
||||
* @NoCSRFRequired
|
||||
*/
|
||||
public function getSettings() {
|
||||
$settings = $this->settings->getAppSettings();
|
||||
return new JSONResponse($settings);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a user setting
|
||||
*
|
||||
* @NoAdminRequired
|
||||
* @NoCSRFRequired
|
||||
*/
|
||||
public function saveUserSetting($key, $value) {
|
||||
$this->settings->setUserSetting($key, $value);
|
||||
return new JSONResponse('OK');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save a app setting
|
||||
*
|
||||
* @NoCSRFRequired
|
||||
*/
|
||||
public function saveAdminSetting($key, $value) {
|
||||
$this->settings->setAppSetting($key, $value);
|
||||
return new JSONResponse('OK');
|
||||
}
|
||||
|
||||
}
|
|
@ -11,28 +11,22 @@
|
|||
|
||||
namespace OCA\Passman\Controller;
|
||||
|
||||
use OCA\Files_External\NotFoundException;
|
||||
use OCA\Passman\Db\ShareRequest;
|
||||
use OCA\Passman\Db\SharingACL;
|
||||
use OCA\Passman\Db\Vault;
|
||||
use OCA\Passman\Service\CredentialService;
|
||||
use OCA\Passman\Service\FileService;
|
||||
use OCA\Passman\Service\NotificationService;
|
||||
use OCA\Passman\Service\SettingsService;
|
||||
use OCA\Passman\Service\ShareService;
|
||||
use OCA\Passman\Utility\NotFoundJSONResponse;
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Http\NotFoundResponse;
|
||||
use OCP\IRequest;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\ApiController;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
|
||||
use OCP\IGroup;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IUserManager;
|
||||
use OCP\IUser;
|
||||
|
||||
use OCA\Passman\Service\VaultService;
|
||||
use OCA\Passman\Service\ActivityService;
|
||||
|
@ -49,6 +43,7 @@ class ShareController extends ApiController {
|
|||
private $credentialService;
|
||||
private $notificationService;
|
||||
private $fileService;
|
||||
private $settings;
|
||||
|
||||
private $limit = 50;
|
||||
private $offset = 0;
|
||||
|
@ -63,7 +58,8 @@ class ShareController extends ApiController {
|
|||
ShareService $shareService,
|
||||
CredentialService $credentialService,
|
||||
NotificationService $notificationService,
|
||||
FileService $fileService
|
||||
FileService $fileService,
|
||||
SettingsService $config
|
||||
) {
|
||||
parent::__construct($AppName, $request);
|
||||
|
||||
|
@ -76,8 +72,10 @@ class ShareController extends ApiController {
|
|||
$this->credentialService = $credentialService;
|
||||
$this->notificationService = $notificationService;
|
||||
$this->fileService = $fileService;
|
||||
$this->settings = $config;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $item_id
|
||||
* @param $item_guid
|
||||
|
@ -87,16 +85,15 @@ class ShareController extends ApiController {
|
|||
* @NoCSRFRequired
|
||||
*/
|
||||
public function createPublicShare($item_id, $item_guid, $permissions, $expire_timestamp, $expire_views) {
|
||||
|
||||
try{
|
||||
try {
|
||||
$credential = $this->credentialService->getCredentialByGUID($item_guid);
|
||||
} catch (DoesNotExistException $exception){
|
||||
} catch (\Exception $exception) {
|
||||
return new NotFoundResponse();
|
||||
}
|
||||
|
||||
try {
|
||||
$acl = $this->shareService->getACL(null, $item_guid);
|
||||
} catch (DoesNotExistException $exception) {
|
||||
} catch (\Exception $exception) {
|
||||
$acl = new SharingACL();
|
||||
}
|
||||
|
||||
|
@ -138,15 +135,15 @@ class ShareController extends ApiController {
|
|||
if (count($shareRequests) > 0) {
|
||||
return new JSONResponse(array('error' => 'User got already pending requests'));
|
||||
}
|
||||
} catch (DoesNotExistException $exception) {
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
// no need to catch this
|
||||
}
|
||||
|
||||
$acl = null;
|
||||
try {
|
||||
$acl = $this->shareService->getCredentialAclForUser($first_vault['user_id'], $item_guid);
|
||||
} catch (DoesNotExistException $exception) {
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
// no need to catch this
|
||||
}
|
||||
|
||||
if ($acl) {
|
||||
|
@ -234,21 +231,21 @@ class ShareController extends ApiController {
|
|||
}
|
||||
|
||||
|
||||
public function unshareCredentialFromUser($item_guid, $user_id){
|
||||
public function unshareCredentialFromUser($item_guid, $user_id) {
|
||||
$acl = null;
|
||||
$sr = null;
|
||||
try {
|
||||
$acl = $this->shareService->getCredentialAclForUser($user_id, $item_guid);
|
||||
} catch (DoesNotExistException $e){
|
||||
} catch (\Exception $e) {
|
||||
|
||||
}
|
||||
try{
|
||||
$sr = array_pop($this->shareService->getPendingShareRequestsForCredential($item_guid, $user_id));
|
||||
} catch (DoesNotExistException $e){
|
||||
|
||||
try {
|
||||
$sr = array_pop($this->shareService->getPendingShareRequestsForCredential($item_guid, $user_id));
|
||||
} catch (\Exception $e) {
|
||||
// no need to catch this
|
||||
}
|
||||
|
||||
if($sr){
|
||||
if ($sr) {
|
||||
$this->shareService->cleanItemRequestsForUser($sr);
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
|
@ -257,7 +254,7 @@ class ShareController extends ApiController {
|
|||
->setUser($user_id);
|
||||
$manager->markProcessed($notification);
|
||||
}
|
||||
if($acl){
|
||||
if ($acl) {
|
||||
$this->shareService->deleteShareACL($acl);
|
||||
}
|
||||
return new JSONResponse(array('result' => true));
|
||||
|
@ -299,7 +296,7 @@ class ShareController extends ApiController {
|
|||
public function savePendingRequest($item_guid, $target_vault_guid, $final_shared_key) {
|
||||
try {
|
||||
$sr = $this->shareService->getRequestByGuid($item_guid, $target_vault_guid);
|
||||
} catch (DoesNotExistException $ex) {
|
||||
} catch (\Exception $ex) {
|
||||
return new NotFoundResponse();
|
||||
}
|
||||
|
||||
|
@ -340,7 +337,7 @@ class ShareController extends ApiController {
|
|||
array_push($results, $result);
|
||||
}
|
||||
return new JSONResponse($results);
|
||||
} catch (DoesNotExistException $ex) {
|
||||
} catch (\Exception $ex) {
|
||||
return new NotFoundResponse();
|
||||
}
|
||||
}
|
||||
|
@ -354,8 +351,8 @@ class ShareController extends ApiController {
|
|||
public function getRevisions($item_guid) {
|
||||
try {
|
||||
return new JSONResponse($this->shareService->getItemHistory($this->userId, $item_guid));
|
||||
} catch (DoesNotExistException $ex) {
|
||||
return new NotFoundResponse();
|
||||
} catch (\Exception $ex) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -368,7 +365,7 @@ class ShareController extends ApiController {
|
|||
public function getVaultItems($vault_guid) {
|
||||
try {
|
||||
return new JSONResponse($this->shareService->getSharedItems($this->userId->getUID(), $vault_guid));
|
||||
} catch (DoesNotExistException $ex) {
|
||||
} catch (\Exception $ex) {
|
||||
return new NotFoundResponse();
|
||||
}
|
||||
}
|
||||
|
@ -403,8 +400,8 @@ class ShareController extends ApiController {
|
|||
|
||||
$this->shareService->cleanItemRequestsForUser($sr);
|
||||
return new JSONResponse(array('result' => true));
|
||||
} catch (DoesNotExistException $ex) {
|
||||
return new NotFoundResponse();
|
||||
} catch (\Exception $ex) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -416,15 +413,14 @@ class ShareController extends ApiController {
|
|||
* @PublicPage
|
||||
*/
|
||||
public function getPublicCredentialData($credential_guid) {
|
||||
|
||||
//@TODO Check expire date
|
||||
$acl = $this->shareService->getACL(null, $credential_guid);
|
||||
|
||||
if ($acl->getExpire() > 0 && Utils::getTime() > $acl->getExpire()) {
|
||||
if ($acl->getExpire() > 0 && Utils::getTime() > $acl->getExpire()) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
|
||||
$views = $acl->getExpireViews();
|
||||
$views = $acl->getExpireViews();
|
||||
if ($views === 0) {
|
||||
return new NotFoundJSONResponse();
|
||||
} else if ($views !== -1) {
|
||||
|
@ -437,7 +433,7 @@ class ShareController extends ApiController {
|
|||
try {
|
||||
$credential = $this->shareService->getSharedItem(null, $credential_guid);
|
||||
return new JSONResponse($credential);
|
||||
} catch (DoesNotExistException $ex) {
|
||||
} catch (\Exception $ex) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
}
|
||||
|
@ -462,7 +458,7 @@ class ShareController extends ApiController {
|
|||
} else {
|
||||
return new NotFoundResponse();
|
||||
}
|
||||
} catch (DoesNotExistException $ex) {
|
||||
} catch (\Exception $ex) {
|
||||
return new JSONResponse(array());
|
||||
}
|
||||
}
|
||||
|
@ -475,15 +471,15 @@ class ShareController extends ApiController {
|
|||
* @return JSONResponse
|
||||
* @return NotFoundResponse
|
||||
*/
|
||||
public function getFile($item_guid, $file_guid){
|
||||
public function getFile($item_guid, $file_guid) {
|
||||
try {
|
||||
$credential = $this->credentialService->getCredentialByGUID($item_guid);
|
||||
} catch (DoesNotExistException $e){
|
||||
} catch (\Exception $e) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
$userId = ($this->userId) ? $this->userId->getUID() : null;
|
||||
$acl = $this->shareService->getACL($userId, $credential->getGuid());
|
||||
if (!$acl->hasPermission(SharingACL::FILES)){
|
||||
if (!$acl->hasPermission(SharingACL::FILES)) {
|
||||
return new NotFoundJSONResponse();
|
||||
} else {
|
||||
return $this->fileService->getFileByGuid($file_guid);
|
||||
|
@ -501,7 +497,7 @@ class ShareController extends ApiController {
|
|||
public function updateSharedCredentialACL($item_guid, $user_id, $permission) {
|
||||
try {
|
||||
$credential = $this->credentialService->getCredentialByGUID($item_guid);
|
||||
} catch (DoesNotExistException $exception) {
|
||||
} catch (\Exception $exception) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
if ($this->userId->getUID() === $credential->getUserId()) {
|
||||
|
@ -510,7 +506,7 @@ class ShareController extends ApiController {
|
|||
$acl = $this->shareService->getACL($user_id, $item_guid);
|
||||
$acl->setPermissions($permission);
|
||||
return $this->shareService->updateCredentialACL($acl);
|
||||
} catch (DoesNotExistException $exception) {
|
||||
} catch (\Exception $exception) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ class TranslationController extends ApiController {
|
|||
* @NoCSRFRequired
|
||||
* @PublicPage
|
||||
*/
|
||||
public function getLanguageStrings($lang) {
|
||||
public function getLanguageStrings() {
|
||||
$translations = array(
|
||||
// js/app/controllers/bookmarklet.js
|
||||
'generating.sharing.keys' => $this->trans->t('Generating sharing keys ( %step / 2)'),
|
||||
|
@ -46,12 +46,12 @@ class TranslationController extends ApiController {
|
|||
'error.loading.file' => $this->trans->t('Error loading file'),
|
||||
|
||||
// js/app/controllers/credential.js
|
||||
'error.decrypt' => $this->trans->t('An error happend during decryption'),
|
||||
'error.decrypt' => $this->trans->t('An error happened during decryption'),
|
||||
'credential.created' => $this->trans->t('Credential created!'),
|
||||
'credential.deleted' => $this->trans->t('Credential deleted'),
|
||||
'credential.updated' => $this->trans->t('Credential updated'),
|
||||
'credential.recovered' => $this->trans->t('Credential recovered'),
|
||||
'credential.destroyed' => $this->trans->t('Credential recovered'),
|
||||
'credential.destroyed' => $this->trans->t('Credential destroyed'),
|
||||
'error.loading.file.perm' => $this->trans->t('Error downloading file, you probably don\'t have enough permissions'),
|
||||
|
||||
// js/app/controllers/edit_credential.js
|
||||
|
@ -96,6 +96,11 @@ class TranslationController extends ApiController {
|
|||
'credential.shared' => $this->trans->t('Credential shared'),
|
||||
'saved' => $this->trans->t('Saved!'),
|
||||
|
||||
// js/app/controllers/vault.js
|
||||
'password.poor' => $this->trans->t('Poor'),
|
||||
'password.weak' => $this->trans->t('Weak'),
|
||||
'password.good' => $this->trans->t('Good'),
|
||||
'password.strong' => $this->trans->t('Strong'),
|
||||
// js/app/directives/credentialfield.js
|
||||
'toggle.visibility' => $this->trans->t('Toggle visibility'),
|
||||
'copy.field' => $this->trans->t('Copy to clipboard'),
|
||||
|
@ -301,7 +306,7 @@ class TranslationController extends ApiController {
|
|||
'destroy' => $this->trans->t('Destroy'),
|
||||
|
||||
'sharereq.title' => $this->trans->t('You have incoming share requests.'),
|
||||
'sharereq.line1' => $this->trans->t('If you want to the credential in a other vault,'),
|
||||
'sharereq.line1' => $this->trans->t('If you want to put the credential in a other vault,'),
|
||||
'sharereq.line2' => $this->trans->t('logout of this vault and login to the vault you want the shared credential in.'),
|
||||
'permissions' => $this->trans->t('Permissions'),
|
||||
'received.from' => $this->trans->t('Received from'),
|
||||
|
@ -313,6 +318,7 @@ class TranslationController extends ApiController {
|
|||
'last.access' => $this->trans->t('Last accessed'),
|
||||
'never' => $this->trans->t('Never'),
|
||||
'no.vaults' => $this->trans->t('No vaults found, why not create one?'),
|
||||
'min.vault.key.strength' => $this->trans->t('Password strength must be at least: {{strength}}'),
|
||||
|
||||
'new.vault.name' => $this->trans->t('Please give your new vault a name.'),
|
||||
'new.vault.pass' => $this->trans->t('Vault password'),
|
||||
|
@ -344,4 +350,4 @@ class TranslationController extends ApiController {
|
|||
);
|
||||
return new JSONResponse($translations);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,19 +50,20 @@ class VaultController extends ApiController {
|
|||
$vaults = $this->vaultService->getByUser($this->userId);
|
||||
|
||||
$protected_credential_fields = array('getDescription', 'getEmail', 'getUsername', 'getPassword');
|
||||
|
||||
foreach ($vaults as $vault) {
|
||||
$credential = $this->credentialService->getRandomCredentialByVaultId($vault->getId(), $this->userId);
|
||||
$secret_field = $protected_credential_fields[array_rand($protected_credential_fields)];
|
||||
array_push($result, array(
|
||||
'vault_id' => $vault->getId(),
|
||||
'guid' => $vault->getGuid(),
|
||||
'name' => $vault->getName(),
|
||||
'created' => $vault->getCreated(),
|
||||
'public_sharing_key' => $vault->getPublicSharingKey(),
|
||||
'last_access' => $vault->getlastAccess(),
|
||||
'challenge_password' => $credential->{$secret_field}()
|
||||
));
|
||||
if ($vaults) {
|
||||
foreach ($vaults as $vault) {
|
||||
$credential = $this->credentialService->getRandomCredentialByVaultId($vault->getId(), $this->userId);
|
||||
$secret_field = $protected_credential_fields[array_rand($protected_credential_fields)];
|
||||
array_push($result, array(
|
||||
'vault_id' => $vault->getId(),
|
||||
'guid' => $vault->getGuid(),
|
||||
'name' => $vault->getName(),
|
||||
'created' => $vault->getCreated(),
|
||||
'public_sharing_key' => $vault->getPublicSharingKey(),
|
||||
'last_access' => $vault->getlastAccess(),
|
||||
'challenge_password' => $credential->{$secret_field}()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
return new JSONResponse($result);
|
||||
|
@ -86,8 +87,8 @@ class VaultController extends ApiController {
|
|||
$vault = null;
|
||||
try {
|
||||
$vault = $this->vaultService->getByGuid($vault_guid, $this->userId);
|
||||
} catch (DoesNotExistException $e) {
|
||||
return new NotFoundJSONResponse();
|
||||
} catch (\Exception $e) {
|
||||
return new NotFoundJSONResponse();
|
||||
}
|
||||
$result = array();
|
||||
if ($vault) {
|
||||
|
@ -119,10 +120,10 @@ class VaultController extends ApiController {
|
|||
*/
|
||||
public function update($vault_guid, $name, $vault_settings) {
|
||||
$vault = $this->vaultService->getByGuid($vault_guid, $this->userId);
|
||||
if ($name) {
|
||||
if ($name && $vault) {
|
||||
$vault->setName($name);
|
||||
}
|
||||
if ($vault_settings) {
|
||||
if ($vault_settings && $vault) {
|
||||
$vault->setVaultSettings($vault_settings);
|
||||
}
|
||||
$this->vaultService->updateVault($vault);
|
||||
|
@ -136,11 +137,14 @@ class VaultController extends ApiController {
|
|||
$vault = null;
|
||||
try {
|
||||
$vault = $this->vaultService->getByGuid($vault_guid, $this->userId);
|
||||
} catch (DoesNotExistException $e) {
|
||||
|
||||
} catch (\Exception $e) {
|
||||
// No need to catch the execption
|
||||
}
|
||||
|
||||
if ($vault) {
|
||||
$this->vaultService->updateSharingKeys($vault->getId(), $private_sharing_key, $public_sharing_key);
|
||||
}
|
||||
|
||||
$this->vaultService->updateSharingKeys($vault->getId(), $private_sharing_key, $public_sharing_key);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -149,6 +153,6 @@ class VaultController extends ApiController {
|
|||
* @NoCSRFRequired
|
||||
*/
|
||||
public function delete($vault_id) {
|
||||
return;
|
||||
return new JSONResponse($vault_id);
|
||||
}
|
||||
}
|
2
css/passman.min.css
vendored
2
css/passman.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -1,7 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<g transform="translate(573.14 110.3)" fill-rule="evenodd">
|
||||
<path d="m-570.22-108.3c-0.50115 0-0.92082 0.41966-0.92082 0.92081v24.158c0 0.51739 0.40324 0.92073 0.92082 0.92073h26.158c0.51756 0 0.92081-0.40316 0.92081-0.92073l0.00069-14.154c0-0.5011-0.41966-0.92524-0.92081-0.92524h-21.079l-0.0007 11.005c0 0.48012-0.52409 0.97706-1.0042 0.97706-0.48012 0-0.99573-0.49694-0.99573-0.97706l0.0007-12.143c0-0.48012 0.40484-0.86215 0.88497-0.86215h4.5944l14.521 0.00052-0.0007-2.9516c0-0.56713-0.42551-1.0481-0.99245-1.0481h-13.007v-3.0791c0-0.50118-0.40586-0.92081-0.90701-0.92081z"/>
|
||||
<path d="m-570.22-107.3c-0.50115 0-0.92082 0.41966-0.92082 0.92081v24.158c0 0.51739 0.40324 0.92073 0.92082 0.92073h26.158c0.51756 0 0.92081-0.40316 0.92081-0.92073l0.00069-14.154c0-0.5011-0.41966-0.92524-0.92081-0.92524h-21.079l-0.0007 11.005c0 0.48012-0.52409 0.97706-1.0042 0.97706-0.48012 0-0.99573-0.49694-0.99573-0.97706l0.0007-12.143c0-0.48012 0.40484-0.86214 0.88497-0.86214h4.5944l14.521 0.00052-0.0007-2.9516c0-0.56713-0.42551-1.0481-0.99245-1.0481h-13.007v-3.0791c0-0.50118-0.40586-0.92081-0.90701-0.92081z" fill="#fff"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="32px" style="enable-background:new 0 0 32 32;" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="Layer_1"/><g id="key_x5F_stroke"><g><path d="M22,4c3.309,0,6,2.691,6,6s-2.691,6-6,6c-0.312,0-0.656-0.039-1.086-0.117l-2.07-0.383 l-1.488,1.488l-0.184,0.184L16,18.344V20h-4v4H8v4H4v-2.344l11.012-11.012l1.488-1.488l-0.383-2.07C16.037,10.656,16,10.312,16,10 C16,6.691,18.691,4,22,4 M22,0c-5.523,0-10,4.477-10,10c0,0.625,0.074,1.227,0.184,1.816L0,24v8h12v-4h4v-4h4v-4l0.184-0.184 C20.773,19.926,21.375,20,22,20c5.523,0,10-4.477,10-10S27.523,0,22,0L22,0z" style="fill:#ffffff;"/><circle cx="22.008" cy="10" r="2" style="fill:#ffffff;"/></g></g></svg>
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 889 B |
14
js/passman.min.js
vendored
14
js/passman.min.js
vendored
File diff suppressed because one or more lines are too long
17
l10n/de.js
17
l10n/de.js
|
@ -10,7 +10,7 @@ OC.L10N.register(
|
|||
"Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
|
||||
"Please fill in a value!" : "Bitte einen Wert hinzufügen!",
|
||||
"Error loading file" : "Fehler beim Laden der Datei",
|
||||
"An error happend during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
|
||||
"An error happened during decryption" : "Ein Fehler ist bei der Entschlüsselung aufgetreten",
|
||||
"Credential created!" : "Anmeldeinformation erstellt!",
|
||||
"Credential deleted" : "Anmeldeinformation gelöscht",
|
||||
"Credential updated" : "Anmeldeinformation aktualisiert",
|
||||
|
@ -44,6 +44,10 @@ OC.L10N.register(
|
|||
"Credential unshared" : "Anmeldeinformation wird nicht mehr geteilt",
|
||||
"Credential shared" : "Anmeldeinformation wird geteilt",
|
||||
"Saved!" : "Gespeichert!",
|
||||
"Poor" : "Mangelhaft",
|
||||
"Weak" : "Schwach",
|
||||
"Good" : "Gut",
|
||||
"Strong" : "Stark",
|
||||
"Toggle visibility" : "Sichtbarkeit umschalten",
|
||||
"Copy to clipboard" : "In die Zwischenablage kopieren",
|
||||
"Copied to clipboard!" : "In die Zwischenablage kopiert!",
|
||||
|
@ -204,6 +208,7 @@ OC.L10N.register(
|
|||
"Last accessed" : "Letzter Zugriff",
|
||||
"Never" : "Nie",
|
||||
"No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
|
||||
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
|
||||
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
|
||||
"Vault password" : "Tresor-Passwort",
|
||||
"Repeat vault password" : "Tresor-Passwort wiederholen",
|
||||
|
@ -224,6 +229,7 @@ OC.L10N.register(
|
|||
"Click here to request it" : "Hier klicken um es anzufordern",
|
||||
"Loading..." : "Lade...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
|
||||
"Error while saving field" : "Fehler beim Speichern des Feldes",
|
||||
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
|
||||
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
|
||||
"A Passman item has been shared" : "Ein Passman-Element wurde geteilt",
|
||||
|
@ -252,6 +258,15 @@ OC.L10N.register(
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit dir. Um dies zu akzeptieren, klicke hier",
|
||||
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit dir abgelehnt.",
|
||||
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit dir akzeptiert.",
|
||||
"Unable to get version info" : "Versionsinfo konnte nicht ermittelt werden",
|
||||
"Passman Settings" : "Passman-Einstellungen",
|
||||
"Github version:" : "Github-Version:",
|
||||
"A newer version of passman is available" : "Es ist eine neuere Version von Passman verfügbar",
|
||||
"Allow users on this server to share passwords with a link" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern via Link",
|
||||
"Allow users on this server to share passwords with other users" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern mit anderen Benutzern",
|
||||
"Check for new versions" : "Nach neuerer Version suchen",
|
||||
"Enable HTTPS check" : "HTTPS-Prüfung aktivieren",
|
||||
"Disable context menu" : "Kontextmenü deaktivieren",
|
||||
"Connection to server lost" : "Verbindung zum Server verloren",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden nochmals geladen",
|
||||
"Saving..." : "Speichere…",
|
||||
|
|
17
l10n/de.json
17
l10n/de.json
|
@ -8,7 +8,7 @@
|
|||
"Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
|
||||
"Please fill in a value!" : "Bitte einen Wert hinzufügen!",
|
||||
"Error loading file" : "Fehler beim Laden der Datei",
|
||||
"An error happend during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
|
||||
"An error happened during decryption" : "Ein Fehler ist bei der Entschlüsselung aufgetreten",
|
||||
"Credential created!" : "Anmeldeinformation erstellt!",
|
||||
"Credential deleted" : "Anmeldeinformation gelöscht",
|
||||
"Credential updated" : "Anmeldeinformation aktualisiert",
|
||||
|
@ -42,6 +42,10 @@
|
|||
"Credential unshared" : "Anmeldeinformation wird nicht mehr geteilt",
|
||||
"Credential shared" : "Anmeldeinformation wird geteilt",
|
||||
"Saved!" : "Gespeichert!",
|
||||
"Poor" : "Mangelhaft",
|
||||
"Weak" : "Schwach",
|
||||
"Good" : "Gut",
|
||||
"Strong" : "Stark",
|
||||
"Toggle visibility" : "Sichtbarkeit umschalten",
|
||||
"Copy to clipboard" : "In die Zwischenablage kopieren",
|
||||
"Copied to clipboard!" : "In die Zwischenablage kopiert!",
|
||||
|
@ -202,6 +206,7 @@
|
|||
"Last accessed" : "Letzter Zugriff",
|
||||
"Never" : "Nie",
|
||||
"No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
|
||||
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
|
||||
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
|
||||
"Vault password" : "Tresor-Passwort",
|
||||
"Repeat vault password" : "Tresor-Passwort wiederholen",
|
||||
|
@ -222,6 +227,7 @@
|
|||
"Click here to request it" : "Hier klicken um es anzufordern",
|
||||
"Loading..." : "Lade...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
|
||||
"Error while saving field" : "Fehler beim Speichern des Feldes",
|
||||
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
|
||||
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
|
||||
"A Passman item has been shared" : "Ein Passman-Element wurde geteilt",
|
||||
|
@ -250,6 +256,15 @@
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit dir. Um dies zu akzeptieren, klicke hier",
|
||||
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit dir abgelehnt.",
|
||||
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit dir akzeptiert.",
|
||||
"Unable to get version info" : "Versionsinfo konnte nicht ermittelt werden",
|
||||
"Passman Settings" : "Passman-Einstellungen",
|
||||
"Github version:" : "Github-Version:",
|
||||
"A newer version of passman is available" : "Es ist eine neuere Version von Passman verfügbar",
|
||||
"Allow users on this server to share passwords with a link" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern via Link",
|
||||
"Allow users on this server to share passwords with other users" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern mit anderen Benutzern",
|
||||
"Check for new versions" : "Nach neuerer Version suchen",
|
||||
"Enable HTTPS check" : "HTTPS-Prüfung aktivieren",
|
||||
"Disable context menu" : "Kontextmenü deaktivieren",
|
||||
"Connection to server lost" : "Verbindung zum Server verloren",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden nochmals geladen",
|
||||
"Saving..." : "Speichere…",
|
||||
|
|
|
@ -10,7 +10,7 @@ OC.L10N.register(
|
|||
"Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
|
||||
"Please fill in a value!" : "Bitte einen Wert hinzufügen!",
|
||||
"Error loading file" : "Fehler beim Laden der Datei",
|
||||
"An error happend during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
|
||||
"An error happened during decryption" : "Ein Fehler ist bei der Entschlüsselung aufgetreten",
|
||||
"Credential created!" : "Anmeldeinformation erstellt!",
|
||||
"Credential deleted" : "Anmeldeinformation gelöscht",
|
||||
"Credential updated" : "Anmeldeinformation aktualisiert",
|
||||
|
@ -44,6 +44,10 @@ OC.L10N.register(
|
|||
"Credential unshared" : "Anmeldeinformation wird nicht mehr geteilt",
|
||||
"Credential shared" : "Anmeldeinformation wird geteilt",
|
||||
"Saved!" : "Gespeichert!",
|
||||
"Poor" : "mangelhaft",
|
||||
"Weak" : "Schwach",
|
||||
"Good" : "Gut",
|
||||
"Strong" : "Stark",
|
||||
"Toggle visibility" : "Sichtbarkeit umschalten",
|
||||
"Copy to clipboard" : "In die Zwischenablage kopieren",
|
||||
"Copied to clipboard!" : "In die Zwischenablage kopiert!",
|
||||
|
@ -204,6 +208,7 @@ OC.L10N.register(
|
|||
"Last accessed" : "Letzter Zugriff",
|
||||
"Never" : "Nie",
|
||||
"No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
|
||||
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
|
||||
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
|
||||
"Vault password" : "Tresor-Passwort",
|
||||
"Repeat vault password" : "Tresor-Passwort wiederholen",
|
||||
|
@ -224,6 +229,7 @@ OC.L10N.register(
|
|||
"Click here to request it" : "Hier klicken um es anzufordern",
|
||||
"Loading..." : "Lade...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
|
||||
"Error while saving field" : "Fehler beim Speichern des Feldes",
|
||||
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
|
||||
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
|
||||
"A Passman item has been shared" : "Ein Passman-Element wurde geteilt",
|
||||
|
@ -252,6 +258,15 @@ OC.L10N.register(
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit Ihnen. Um dies zu akzeptieren, klicken Sie bitte hier",
|
||||
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen abgelehnt.",
|
||||
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen akzeptiert.",
|
||||
"Unable to get version info" : "Versionsinfo konnte nicht ermittelt werden",
|
||||
"Passman Settings" : "Passman-Einstellungen",
|
||||
"Github version:" : "Github-Version:",
|
||||
"A newer version of passman is available" : "Es ist eine neuere Version von Passman verfügbar",
|
||||
"Allow users on this server to share passwords with a link" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern via Link",
|
||||
"Allow users on this server to share passwords with other users" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern mit anderen Benutzern",
|
||||
"Check for new versions" : "Nach neuerer Version suchen",
|
||||
"Enable HTTPS check" : "HTTPS-Prüfung aktivieren",
|
||||
"Disable context menu" : "Kontextmenü deaktivieren",
|
||||
"Connection to server lost" : "Verbindung zum Server verloren",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden erneut geladen",
|
||||
"Saving..." : "Speichere...",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
|
||||
"Please fill in a value!" : "Bitte einen Wert hinzufügen!",
|
||||
"Error loading file" : "Fehler beim Laden der Datei",
|
||||
"An error happend during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
|
||||
"An error happened during decryption" : "Ein Fehler ist bei der Entschlüsselung aufgetreten",
|
||||
"Credential created!" : "Anmeldeinformation erstellt!",
|
||||
"Credential deleted" : "Anmeldeinformation gelöscht",
|
||||
"Credential updated" : "Anmeldeinformation aktualisiert",
|
||||
|
@ -42,6 +42,10 @@
|
|||
"Credential unshared" : "Anmeldeinformation wird nicht mehr geteilt",
|
||||
"Credential shared" : "Anmeldeinformation wird geteilt",
|
||||
"Saved!" : "Gespeichert!",
|
||||
"Poor" : "mangelhaft",
|
||||
"Weak" : "Schwach",
|
||||
"Good" : "Gut",
|
||||
"Strong" : "Stark",
|
||||
"Toggle visibility" : "Sichtbarkeit umschalten",
|
||||
"Copy to clipboard" : "In die Zwischenablage kopieren",
|
||||
"Copied to clipboard!" : "In die Zwischenablage kopiert!",
|
||||
|
@ -202,6 +206,7 @@
|
|||
"Last accessed" : "Letzter Zugriff",
|
||||
"Never" : "Nie",
|
||||
"No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
|
||||
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
|
||||
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
|
||||
"Vault password" : "Tresor-Passwort",
|
||||
"Repeat vault password" : "Tresor-Passwort wiederholen",
|
||||
|
@ -222,6 +227,7 @@
|
|||
"Click here to request it" : "Hier klicken um es anzufordern",
|
||||
"Loading..." : "Lade...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
|
||||
"Error while saving field" : "Fehler beim Speichern des Feldes",
|
||||
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
|
||||
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
|
||||
"A Passman item has been shared" : "Ein Passman-Element wurde geteilt",
|
||||
|
@ -250,6 +256,15 @@
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit Ihnen. Um dies zu akzeptieren, klicken Sie bitte hier",
|
||||
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen abgelehnt.",
|
||||
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen akzeptiert.",
|
||||
"Unable to get version info" : "Versionsinfo konnte nicht ermittelt werden",
|
||||
"Passman Settings" : "Passman-Einstellungen",
|
||||
"Github version:" : "Github-Version:",
|
||||
"A newer version of passman is available" : "Es ist eine neuere Version von Passman verfügbar",
|
||||
"Allow users on this server to share passwords with a link" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern via Link",
|
||||
"Allow users on this server to share passwords with other users" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern mit anderen Benutzern",
|
||||
"Check for new versions" : "Nach neuerer Version suchen",
|
||||
"Enable HTTPS check" : "HTTPS-Prüfung aktivieren",
|
||||
"Disable context menu" : "Kontextmenü deaktivieren",
|
||||
"Connection to server lost" : "Verbindung zum Server verloren",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden erneut geladen",
|
||||
"Saving..." : "Speichere...",
|
||||
|
|
|
@ -10,7 +10,6 @@ OC.L10N.register(
|
|||
"Please fill in a label!" : "¡Por favor llene en una etiqueta!",
|
||||
"Please fill in a value!" : "¡Por favor llene en un valor!",
|
||||
"Error loading file" : "Error al cargar el archivo",
|
||||
"An error happend during decryption" : "Un error sucedió durante el descifrado ",
|
||||
"Credential created!" : "¡Credencial creada!",
|
||||
"Credential deleted" : "Credencial eliminada",
|
||||
"Credential updated" : "Credencial actualziada",
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
"Please fill in a label!" : "¡Por favor llene en una etiqueta!",
|
||||
"Please fill in a value!" : "¡Por favor llene en un valor!",
|
||||
"Error loading file" : "Error al cargar el archivo",
|
||||
"An error happend during decryption" : "Un error sucedió durante el descifrado ",
|
||||
"Credential created!" : "¡Credencial creada!",
|
||||
"Credential deleted" : "Credencial eliminada",
|
||||
"Credential updated" : "Credencial actualziada",
|
||||
|
|
37
l10n/fr.js
37
l10n/fr.js
|
@ -10,7 +10,7 @@ OC.L10N.register(
|
|||
"Please fill in a label!" : "Veuillez remplir une étiquette !",
|
||||
"Please fill in a value!" : "Veuillez remplir une valeur !",
|
||||
"Error loading file" : "Erreur lors du chargement du fichier",
|
||||
"An error happend during decryption" : "Une erreur est survenue lors du décryptage",
|
||||
"An error happened during decryption" : "Une erreur est survenue lors du décryptage",
|
||||
"Credential created!" : "Information d'identification créée !",
|
||||
"Credential deleted" : "Information d'identification supprimée",
|
||||
"Credential updated" : "Information d'identification mise à jour",
|
||||
|
@ -20,6 +20,7 @@ OC.L10N.register(
|
|||
"Decrypting credentials" : "Décryptage des informations d'identification",
|
||||
"Done" : "Fait",
|
||||
"File read successfully!" : "Fichier lu avec succès !",
|
||||
"Credential has no label, skipping" : "L'information d'identification n'a pas d'étiquette, ignorée",
|
||||
"Adding {{credential}}" : "{{credential}} en cours d'ajout",
|
||||
"Added {{credential}}" : "{{credential}} ajouté",
|
||||
"Parsed {{num}} credentials, starting to import" : "{{num}} informations d'identification analysées, commence à importer",
|
||||
|
@ -43,6 +44,10 @@ OC.L10N.register(
|
|||
"Credential unshared" : "Arrêt du partage de l'information d'identification ",
|
||||
"Credential shared" : "Information d'identification partagée",
|
||||
"Saved!" : "Sauvegardé !",
|
||||
"Poor" : "Médiocre",
|
||||
"Weak" : "Faible",
|
||||
"Good" : "Bon",
|
||||
"Strong" : "Fort",
|
||||
"Toggle visibility" : "Activer la visibilité",
|
||||
"Copy to clipboard" : "Copier dans le presse-papier",
|
||||
"Copied to clipboard!" : "Copié dans le presse-papier !",
|
||||
|
@ -99,6 +104,7 @@ OC.L10N.register(
|
|||
"About Passman" : "À propos de Passman",
|
||||
"Version" : "Version",
|
||||
"Donate to support development" : "Donner pour aider le développement",
|
||||
"Bookmarklet" : "Bookmarklet",
|
||||
"Save your passwords with 1 click!" : "Sauvegardez vos mots de passe en 1 clic !",
|
||||
"Drag below button to your bookmark toolbar." : "Glissez le bouton ci-dessous dans la barre d'outils de vos favoris.",
|
||||
"Import type" : "Type d'importation",
|
||||
|
@ -136,9 +142,17 @@ OC.L10N.register(
|
|||
"10 / second" : "10 / seconde",
|
||||
"10k / second" : "10k / seconde",
|
||||
"10B / second" : "10B / seconde",
|
||||
"Pattern" : "Modèle",
|
||||
"Dictionary name" : "Nom du dictionnaire",
|
||||
"Rank" : "Rang",
|
||||
"Reversed" : "Inversé",
|
||||
"Uppercase variations" : "Variations en majuscules",
|
||||
"l33t-variations" : "Variations l33t",
|
||||
"Showing revisions of" : "Montrer les révisions de",
|
||||
"Revision of" : "Révisions de",
|
||||
"by" : "par",
|
||||
"No revisions found." : "Pas de révision trouvée.",
|
||||
"Label" : "Étiquette",
|
||||
"Restore revision" : "Restaurer la révision",
|
||||
"Delete revision" : "Supprimer la révision",
|
||||
"Edit credential" : "Éditer le rapport d'identification",
|
||||
|
@ -146,7 +160,10 @@ OC.L10N.register(
|
|||
"Save" : "Sauvegarder",
|
||||
"Cancel" : "Annuler",
|
||||
"Settings" : "Paramètres",
|
||||
"Share credential {{credential}}" : "Partage l'information d'identification {{credential}}",
|
||||
"Unshare" : "Ne plus partager",
|
||||
"Showing deleted since" : "Montrer ceux supprimés depuis",
|
||||
"Search credential..." : "Rechercher l'information d'identification...",
|
||||
"Account" : "Compte",
|
||||
"Password" : "Mot de passe",
|
||||
"OTP" : "OTP",
|
||||
|
@ -161,19 +178,25 @@ OC.L10N.register(
|
|||
"Share" : "Partager",
|
||||
"Recover" : "Restaurer",
|
||||
"Destroy" : "Détruire",
|
||||
"You have incoming share requests." : "Vous avez des nouvelles demandes de partage.",
|
||||
"If you want to the credential in a other vault," : "Si vous souhaitez obtenir les informations d'identification dans un autre coffre-fort,",
|
||||
"logout of this vault and login to the vault you want the shared credential in." : "déconnectez-vous de ce coffre-fort et connectez-vous au coffre-fort dans lequel vous voulez les informations d'identification partagées.",
|
||||
"Permissions" : "Permissions",
|
||||
"Received from" : "Reçu de",
|
||||
"Date" : "Date",
|
||||
"Accept" : "Accepter",
|
||||
"Decline" : "Refuser",
|
||||
"Last accessed" : "Dernier accès",
|
||||
"Never" : "Jamais",
|
||||
"No vaults found, why not create one?" : "Pas de coffre-fort trouvé, pourquoi ne pas en créer un ?",
|
||||
"Password strength must be at least: {{strength}}" : "La force du mot de passe doit être au moins : {{strength}}",
|
||||
"Please give your new vault a name." : "Veuillez donner un nom à votre nouveau coffre-fort.",
|
||||
"Vault password" : "Mot de passe du coffre-fort",
|
||||
"Repeat vault password" : "Confirmer le mot de passe du coffre-fort",
|
||||
"Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Votre clé de partage aura un poids de 1024 octet, ce qui pourra être modifié plus tard dans les paramètres.",
|
||||
"Create vault" : "Créer un coffre-fort",
|
||||
"Go back to vaults" : "Retourner aux coffres-forts",
|
||||
"Please input the password for" : "Veuillez entrer le mot de passe pour",
|
||||
"Set this vault as default." : "Choisir ce coffre-fort par défaut.",
|
||||
"Login automatically to this vault." : "Se connecter automatiquement à ce coffre-fort.",
|
||||
"Decrypt vault" : "Déchiffrer le coffre-fort",
|
||||
|
@ -183,7 +206,11 @@ OC.L10N.register(
|
|||
"Deleted credentials" : "Supprimer les informations d'identification",
|
||||
"Logout" : "Se déconnecter",
|
||||
"Donate" : "Donner",
|
||||
"Someone has shared a credential with you." : "Quelqu'un a partagé une information d'identification avec vous.",
|
||||
"Click here to request it" : "Cliquez ici pour le demander",
|
||||
"Loading..." : "Chargement...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Awwhh.... information d'identification non trouvée. Il est peut être expiré",
|
||||
"Error while saving field" : "Erreur lors de la sauvegarde du champ",
|
||||
"A Passman item has been created, modified or deleted" : "Un élément Passman a été créé, modifié ou supprimé",
|
||||
"A Passman item has expired" : "Un élément Passman a expiré",
|
||||
"A Passman item has been shared" : "Un élément Passman a été partagé",
|
||||
|
@ -212,6 +239,14 @@ OC.L10N.register(
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s a partagé \"%s\" avec vous. Cliquez ici pour accepter",
|
||||
"%s has declined your share request for \"%s\"." : "%s a refusé votre demande de partage pour \"%s\"",
|
||||
"%s has accepted your share request for \"%s\"." : "%s a accepté votre demande de partage pour \"%s\"",
|
||||
"Unable to get version info" : "Impossible d'obtenir l'information de la version",
|
||||
"Passman Settings" : "Paramètres de Passman",
|
||||
"Github version:" : "Version Github :",
|
||||
"A newer version of passman is available" : "Une version plus récente de Passman est disponible",
|
||||
"Allow users on this server to share passwords with a link" : "Autoriser les utilisateurs de ce serveur à partager par lien des mots de passe",
|
||||
"Allow users on this server to share passwords with other users" : "Autoriser les utilisateurs de ce serveur à partager des mots de passe avec d'autres utilisateurs",
|
||||
"Check for new versions" : "Vérifier la présence de nouvelles versions",
|
||||
"Enable HTTPS check" : "Activer la vérification HTTPS",
|
||||
"Connection to server lost" : "Connexion au serveur perdu",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problème de chargement de la page, actualisation dans 5 secondes",
|
||||
"Saving..." : "Enregistrement…",
|
||||
|
|
37
l10n/fr.json
37
l10n/fr.json
|
@ -8,7 +8,7 @@
|
|||
"Please fill in a label!" : "Veuillez remplir une étiquette !",
|
||||
"Please fill in a value!" : "Veuillez remplir une valeur !",
|
||||
"Error loading file" : "Erreur lors du chargement du fichier",
|
||||
"An error happend during decryption" : "Une erreur est survenue lors du décryptage",
|
||||
"An error happened during decryption" : "Une erreur est survenue lors du décryptage",
|
||||
"Credential created!" : "Information d'identification créée !",
|
||||
"Credential deleted" : "Information d'identification supprimée",
|
||||
"Credential updated" : "Information d'identification mise à jour",
|
||||
|
@ -18,6 +18,7 @@
|
|||
"Decrypting credentials" : "Décryptage des informations d'identification",
|
||||
"Done" : "Fait",
|
||||
"File read successfully!" : "Fichier lu avec succès !",
|
||||
"Credential has no label, skipping" : "L'information d'identification n'a pas d'étiquette, ignorée",
|
||||
"Adding {{credential}}" : "{{credential}} en cours d'ajout",
|
||||
"Added {{credential}}" : "{{credential}} ajouté",
|
||||
"Parsed {{num}} credentials, starting to import" : "{{num}} informations d'identification analysées, commence à importer",
|
||||
|
@ -41,6 +42,10 @@
|
|||
"Credential unshared" : "Arrêt du partage de l'information d'identification ",
|
||||
"Credential shared" : "Information d'identification partagée",
|
||||
"Saved!" : "Sauvegardé !",
|
||||
"Poor" : "Médiocre",
|
||||
"Weak" : "Faible",
|
||||
"Good" : "Bon",
|
||||
"Strong" : "Fort",
|
||||
"Toggle visibility" : "Activer la visibilité",
|
||||
"Copy to clipboard" : "Copier dans le presse-papier",
|
||||
"Copied to clipboard!" : "Copié dans le presse-papier !",
|
||||
|
@ -97,6 +102,7 @@
|
|||
"About Passman" : "À propos de Passman",
|
||||
"Version" : "Version",
|
||||
"Donate to support development" : "Donner pour aider le développement",
|
||||
"Bookmarklet" : "Bookmarklet",
|
||||
"Save your passwords with 1 click!" : "Sauvegardez vos mots de passe en 1 clic !",
|
||||
"Drag below button to your bookmark toolbar." : "Glissez le bouton ci-dessous dans la barre d'outils de vos favoris.",
|
||||
"Import type" : "Type d'importation",
|
||||
|
@ -134,9 +140,17 @@
|
|||
"10 / second" : "10 / seconde",
|
||||
"10k / second" : "10k / seconde",
|
||||
"10B / second" : "10B / seconde",
|
||||
"Pattern" : "Modèle",
|
||||
"Dictionary name" : "Nom du dictionnaire",
|
||||
"Rank" : "Rang",
|
||||
"Reversed" : "Inversé",
|
||||
"Uppercase variations" : "Variations en majuscules",
|
||||
"l33t-variations" : "Variations l33t",
|
||||
"Showing revisions of" : "Montrer les révisions de",
|
||||
"Revision of" : "Révisions de",
|
||||
"by" : "par",
|
||||
"No revisions found." : "Pas de révision trouvée.",
|
||||
"Label" : "Étiquette",
|
||||
"Restore revision" : "Restaurer la révision",
|
||||
"Delete revision" : "Supprimer la révision",
|
||||
"Edit credential" : "Éditer le rapport d'identification",
|
||||
|
@ -144,7 +158,10 @@
|
|||
"Save" : "Sauvegarder",
|
||||
"Cancel" : "Annuler",
|
||||
"Settings" : "Paramètres",
|
||||
"Share credential {{credential}}" : "Partage l'information d'identification {{credential}}",
|
||||
"Unshare" : "Ne plus partager",
|
||||
"Showing deleted since" : "Montrer ceux supprimés depuis",
|
||||
"Search credential..." : "Rechercher l'information d'identification...",
|
||||
"Account" : "Compte",
|
||||
"Password" : "Mot de passe",
|
||||
"OTP" : "OTP",
|
||||
|
@ -159,19 +176,25 @@
|
|||
"Share" : "Partager",
|
||||
"Recover" : "Restaurer",
|
||||
"Destroy" : "Détruire",
|
||||
"You have incoming share requests." : "Vous avez des nouvelles demandes de partage.",
|
||||
"If you want to the credential in a other vault," : "Si vous souhaitez obtenir les informations d'identification dans un autre coffre-fort,",
|
||||
"logout of this vault and login to the vault you want the shared credential in." : "déconnectez-vous de ce coffre-fort et connectez-vous au coffre-fort dans lequel vous voulez les informations d'identification partagées.",
|
||||
"Permissions" : "Permissions",
|
||||
"Received from" : "Reçu de",
|
||||
"Date" : "Date",
|
||||
"Accept" : "Accepter",
|
||||
"Decline" : "Refuser",
|
||||
"Last accessed" : "Dernier accès",
|
||||
"Never" : "Jamais",
|
||||
"No vaults found, why not create one?" : "Pas de coffre-fort trouvé, pourquoi ne pas en créer un ?",
|
||||
"Password strength must be at least: {{strength}}" : "La force du mot de passe doit être au moins : {{strength}}",
|
||||
"Please give your new vault a name." : "Veuillez donner un nom à votre nouveau coffre-fort.",
|
||||
"Vault password" : "Mot de passe du coffre-fort",
|
||||
"Repeat vault password" : "Confirmer le mot de passe du coffre-fort",
|
||||
"Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Votre clé de partage aura un poids de 1024 octet, ce qui pourra être modifié plus tard dans les paramètres.",
|
||||
"Create vault" : "Créer un coffre-fort",
|
||||
"Go back to vaults" : "Retourner aux coffres-forts",
|
||||
"Please input the password for" : "Veuillez entrer le mot de passe pour",
|
||||
"Set this vault as default." : "Choisir ce coffre-fort par défaut.",
|
||||
"Login automatically to this vault." : "Se connecter automatiquement à ce coffre-fort.",
|
||||
"Decrypt vault" : "Déchiffrer le coffre-fort",
|
||||
|
@ -181,7 +204,11 @@
|
|||
"Deleted credentials" : "Supprimer les informations d'identification",
|
||||
"Logout" : "Se déconnecter",
|
||||
"Donate" : "Donner",
|
||||
"Someone has shared a credential with you." : "Quelqu'un a partagé une information d'identification avec vous.",
|
||||
"Click here to request it" : "Cliquez ici pour le demander",
|
||||
"Loading..." : "Chargement...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Awwhh.... information d'identification non trouvée. Il est peut être expiré",
|
||||
"Error while saving field" : "Erreur lors de la sauvegarde du champ",
|
||||
"A Passman item has been created, modified or deleted" : "Un élément Passman a été créé, modifié ou supprimé",
|
||||
"A Passman item has expired" : "Un élément Passman a expiré",
|
||||
"A Passman item has been shared" : "Un élément Passman a été partagé",
|
||||
|
@ -210,6 +237,14 @@
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s a partagé \"%s\" avec vous. Cliquez ici pour accepter",
|
||||
"%s has declined your share request for \"%s\"." : "%s a refusé votre demande de partage pour \"%s\"",
|
||||
"%s has accepted your share request for \"%s\"." : "%s a accepté votre demande de partage pour \"%s\"",
|
||||
"Unable to get version info" : "Impossible d'obtenir l'information de la version",
|
||||
"Passman Settings" : "Paramètres de Passman",
|
||||
"Github version:" : "Version Github :",
|
||||
"A newer version of passman is available" : "Une version plus récente de Passman est disponible",
|
||||
"Allow users on this server to share passwords with a link" : "Autoriser les utilisateurs de ce serveur à partager par lien des mots de passe",
|
||||
"Allow users on this server to share passwords with other users" : "Autoriser les utilisateurs de ce serveur à partager des mots de passe avec d'autres utilisateurs",
|
||||
"Check for new versions" : "Vérifier la présence de nouvelles versions",
|
||||
"Enable HTTPS check" : "Activer la vérification HTTPS",
|
||||
"Connection to server lost" : "Connexion au serveur perdu",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problème de chargement de la page, actualisation dans 5 secondes",
|
||||
"Saving..." : "Enregistrement…",
|
||||
|
|
27
l10n/it.js
27
l10n/it.js
|
@ -10,7 +10,7 @@ OC.L10N.register(
|
|||
"Please fill in a label!" : "Aggiungi un'etichetta!",
|
||||
"Please fill in a value!" : "Aggiungi un valore!",
|
||||
"Error loading file" : "Errore durante il caricamento del file",
|
||||
"An error happend during decryption" : "Si è verificato un errore durante la decifratura",
|
||||
"An error happened during decryption" : "Si è verificato un errore durante la decifratura",
|
||||
"Credential created!" : "Credenziali create!",
|
||||
"Credential deleted" : "Credenziali eliminate",
|
||||
"Credential updated" : "Credenziali aggiornate",
|
||||
|
@ -20,6 +20,7 @@ OC.L10N.register(
|
|||
"Decrypting credentials" : "Decifratura delle credenziali",
|
||||
"Done" : "Fine",
|
||||
"File read successfully!" : "File letto correttamente!",
|
||||
"Credential has no label, skipping" : "Credenziali senza etichetta, ignorate",
|
||||
"Adding {{credential}}" : "Aggiunta di {{credential}}",
|
||||
"Added {{credential}}" : "Aggiunte {{credential}}",
|
||||
"Parsed {{num}} credentials, starting to import" : "Elaborate {{num}} credenziali, avvio dell'importazione",
|
||||
|
@ -28,6 +29,7 @@ OC.L10N.register(
|
|||
"Save in passman" : "Salva in passman",
|
||||
"Settings saved" : "Impostazioni salvate",
|
||||
"General settings" : "Impostazioni generali",
|
||||
"Password Audit" : "Verifica password",
|
||||
"Password settings" : "Impostazioni password",
|
||||
"Import credentials" : "Importa credenziali",
|
||||
"Export credentials" : "Esporta credenziali",
|
||||
|
@ -42,6 +44,10 @@ OC.L10N.register(
|
|||
"Credential unshared" : "Credenziali non condivise",
|
||||
"Credential shared" : "Credenziali condivise",
|
||||
"Saved!" : "Salvato!",
|
||||
"Poor" : "Povera",
|
||||
"Weak" : "Debole",
|
||||
"Good" : "Buona",
|
||||
"Strong" : "Forte",
|
||||
"Toggle visibility" : "Commuta la visibilità",
|
||||
"Copy to clipboard" : "Copia negli appunti",
|
||||
"Copied to clipboard!" : "Copiato negli appunti!",
|
||||
|
@ -91,6 +97,7 @@ OC.L10N.register(
|
|||
"Rename vault" : "Rinomina cassaforte",
|
||||
"New vault name" : "Nome della nuova cassaforte",
|
||||
"Change" : "Modifica",
|
||||
"Change vault key" : "Modifica chiave della cassaforte",
|
||||
"Old vault password" : "Vecchia password della cassaforte",
|
||||
"New vault password" : "Nuova password della cassaforte",
|
||||
"New vault password repeat" : "Ripeti la nuova password della cassaforte",
|
||||
|
@ -113,7 +120,9 @@ OC.L10N.register(
|
|||
"Save keys" : "Salva chiavi",
|
||||
"Generate sharing keys" : "Genera chiavi di condivisione",
|
||||
"Generating sharing keys" : "Generazione chiavi di condivisione",
|
||||
"The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Lo strumento delle password analizzerà la tua password, calcolerà il tempo medio per decifrarla e, se sotto la soglia, lo segnalerà.",
|
||||
"Minimum password stength" : "Robustezza minima della password",
|
||||
"Passman scanned your passwords, and here is the result." : "Passman ha analizzato le tue password, ed ecco il risultato.",
|
||||
"A total of {{scan_result}} weak credentials." : "Un totale di {{scan_result}} credenziali deboli.",
|
||||
"Score" : "Punteggio",
|
||||
"Action" : "Azione",
|
||||
|
@ -122,6 +131,7 @@ OC.L10N.register(
|
|||
"Uploading" : "Caricamento",
|
||||
"User" : "Utente",
|
||||
"Crypto time" : "Tempo di cifratura",
|
||||
"Total time spent cyphering" : "Tempo totale impiegato nella cifratura",
|
||||
"Read" : "Lettura",
|
||||
"Write" : "Scrittura",
|
||||
"Files" : "File",
|
||||
|
@ -129,6 +139,7 @@ OC.L10N.register(
|
|||
"Pending" : "In corso",
|
||||
"Enable link sharing" : "Abilita condivisione tramite collegamento",
|
||||
"Share until date" : "Condividi fino alla data",
|
||||
"Expire after views" : "Scadenza dopo viste",
|
||||
"Show files" : "Mostra i file",
|
||||
"Details" : "Dettagli",
|
||||
"Hide details" : "Nascondi dettagli",
|
||||
|
@ -155,6 +166,7 @@ OC.L10N.register(
|
|||
"Settings" : "Impostazioni",
|
||||
"Share credential {{credential}}" : "Condividi credenziali {{credential}}",
|
||||
"Unshare" : "Rimuovi condivisione",
|
||||
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Visualizzazione di {{number_filtered}} di {{credential_number}} credenziali",
|
||||
"Search credential..." : "Cerca credenziali...",
|
||||
"Account" : "Account",
|
||||
"Password" : "Password",
|
||||
|
@ -171,6 +183,8 @@ OC.L10N.register(
|
|||
"Recover" : "Ripristina",
|
||||
"Destroy" : "Distruggi",
|
||||
"You have incoming share requests." : "Hai ricevuto delle richieste di condivisione.",
|
||||
"If you want to the credential in a other vault," : "Se vuoi condividere le credenziali con un'altra cassaforte,",
|
||||
"logout of this vault and login to the vault you want the shared credential in." : "esci da questa cassaforte e accedi alla cassaforte con la quale vuoi condividere le credenziali.",
|
||||
"Permissions" : "Permessi",
|
||||
"Received from" : "Ricevute da",
|
||||
"Date" : "Data",
|
||||
|
@ -179,6 +193,7 @@ OC.L10N.register(
|
|||
"Last accessed" : "Ultimo accesso",
|
||||
"Never" : "Mai",
|
||||
"No vaults found, why not create one?" : "Nessuna cassaforte trovata, vuoi crearne una?",
|
||||
"Password strength must be at least: {{strength}}" : "La robustezza della password deve essere almeno: {{strength}}",
|
||||
"Please give your new vault a name." : "Dai un nome alla tua nuova cassaforte.",
|
||||
"Vault password" : "Password della cassaforte",
|
||||
"Repeat vault password" : "Ripeti la password della cassaforte",
|
||||
|
@ -199,6 +214,7 @@ OC.L10N.register(
|
|||
"Click here to request it" : "Fai clic qui per richiederle",
|
||||
"Loading..." : "Caricamento in corso...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Ops... credenziali non trovate. Potrebbero essere scadute",
|
||||
"Error while saving field" : "Errore durante il salvataggio del campo",
|
||||
"A Passman item has been created, modified or deleted" : "Un elemento Passman è stato creato, modificato o eliminato",
|
||||
"A Passman item has expired" : "Un elemento Passman è scaduto",
|
||||
"A Passman item has been shared" : "Un elemento Passman è stato condiviso",
|
||||
|
@ -227,6 +243,15 @@ OC.L10N.register(
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s ha condiviso \"%s\" con te. Fai clic qui per accettare",
|
||||
"%s has declined your share request for \"%s\"." : "%s ha rifiutato la tua richiesta di condivisione per \"%s\".",
|
||||
"%s has accepted your share request for \"%s\"." : "%s ha accettato la tua richiesta di condivisione per \"%s\".",
|
||||
"Unable to get version info" : "Impossibile ottenere le informazioni di versione",
|
||||
"Passman Settings" : "Impostazioni di Passman",
|
||||
"Github version:" : "Versione di Github:",
|
||||
"A newer version of passman is available" : "Una nuova versione di Passman è disponibile",
|
||||
"Allow users on this server to share passwords with a link" : "Consenti agli utenti su questo server di condividere le password tramite un collegamento",
|
||||
"Allow users on this server to share passwords with other users" : "Consenti agli utenti su questo server di condividere le password con altri utenti",
|
||||
"Check for new versions" : "Controlla la presenza di nuove versioni",
|
||||
"Enable HTTPS check" : "Abilita controllo HTTPS",
|
||||
"Disable context menu" : "Disabilita menu contestuale",
|
||||
"Connection to server lost" : "Connessione al server interrotta",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problema durante il caricamento della pagina, aggiornamento tra 5 secondi",
|
||||
"Saving..." : "Salvataggio in corso...",
|
||||
|
|
27
l10n/it.json
27
l10n/it.json
|
@ -8,7 +8,7 @@
|
|||
"Please fill in a label!" : "Aggiungi un'etichetta!",
|
||||
"Please fill in a value!" : "Aggiungi un valore!",
|
||||
"Error loading file" : "Errore durante il caricamento del file",
|
||||
"An error happend during decryption" : "Si è verificato un errore durante la decifratura",
|
||||
"An error happened during decryption" : "Si è verificato un errore durante la decifratura",
|
||||
"Credential created!" : "Credenziali create!",
|
||||
"Credential deleted" : "Credenziali eliminate",
|
||||
"Credential updated" : "Credenziali aggiornate",
|
||||
|
@ -18,6 +18,7 @@
|
|||
"Decrypting credentials" : "Decifratura delle credenziali",
|
||||
"Done" : "Fine",
|
||||
"File read successfully!" : "File letto correttamente!",
|
||||
"Credential has no label, skipping" : "Credenziali senza etichetta, ignorate",
|
||||
"Adding {{credential}}" : "Aggiunta di {{credential}}",
|
||||
"Added {{credential}}" : "Aggiunte {{credential}}",
|
||||
"Parsed {{num}} credentials, starting to import" : "Elaborate {{num}} credenziali, avvio dell'importazione",
|
||||
|
@ -26,6 +27,7 @@
|
|||
"Save in passman" : "Salva in passman",
|
||||
"Settings saved" : "Impostazioni salvate",
|
||||
"General settings" : "Impostazioni generali",
|
||||
"Password Audit" : "Verifica password",
|
||||
"Password settings" : "Impostazioni password",
|
||||
"Import credentials" : "Importa credenziali",
|
||||
"Export credentials" : "Esporta credenziali",
|
||||
|
@ -40,6 +42,10 @@
|
|||
"Credential unshared" : "Credenziali non condivise",
|
||||
"Credential shared" : "Credenziali condivise",
|
||||
"Saved!" : "Salvato!",
|
||||
"Poor" : "Povera",
|
||||
"Weak" : "Debole",
|
||||
"Good" : "Buona",
|
||||
"Strong" : "Forte",
|
||||
"Toggle visibility" : "Commuta la visibilità",
|
||||
"Copy to clipboard" : "Copia negli appunti",
|
||||
"Copied to clipboard!" : "Copiato negli appunti!",
|
||||
|
@ -89,6 +95,7 @@
|
|||
"Rename vault" : "Rinomina cassaforte",
|
||||
"New vault name" : "Nome della nuova cassaforte",
|
||||
"Change" : "Modifica",
|
||||
"Change vault key" : "Modifica chiave della cassaforte",
|
||||
"Old vault password" : "Vecchia password della cassaforte",
|
||||
"New vault password" : "Nuova password della cassaforte",
|
||||
"New vault password repeat" : "Ripeti la nuova password della cassaforte",
|
||||
|
@ -111,7 +118,9 @@
|
|||
"Save keys" : "Salva chiavi",
|
||||
"Generate sharing keys" : "Genera chiavi di condivisione",
|
||||
"Generating sharing keys" : "Generazione chiavi di condivisione",
|
||||
"The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Lo strumento delle password analizzerà la tua password, calcolerà il tempo medio per decifrarla e, se sotto la soglia, lo segnalerà.",
|
||||
"Minimum password stength" : "Robustezza minima della password",
|
||||
"Passman scanned your passwords, and here is the result." : "Passman ha analizzato le tue password, ed ecco il risultato.",
|
||||
"A total of {{scan_result}} weak credentials." : "Un totale di {{scan_result}} credenziali deboli.",
|
||||
"Score" : "Punteggio",
|
||||
"Action" : "Azione",
|
||||
|
@ -120,6 +129,7 @@
|
|||
"Uploading" : "Caricamento",
|
||||
"User" : "Utente",
|
||||
"Crypto time" : "Tempo di cifratura",
|
||||
"Total time spent cyphering" : "Tempo totale impiegato nella cifratura",
|
||||
"Read" : "Lettura",
|
||||
"Write" : "Scrittura",
|
||||
"Files" : "File",
|
||||
|
@ -127,6 +137,7 @@
|
|||
"Pending" : "In corso",
|
||||
"Enable link sharing" : "Abilita condivisione tramite collegamento",
|
||||
"Share until date" : "Condividi fino alla data",
|
||||
"Expire after views" : "Scadenza dopo viste",
|
||||
"Show files" : "Mostra i file",
|
||||
"Details" : "Dettagli",
|
||||
"Hide details" : "Nascondi dettagli",
|
||||
|
@ -153,6 +164,7 @@
|
|||
"Settings" : "Impostazioni",
|
||||
"Share credential {{credential}}" : "Condividi credenziali {{credential}}",
|
||||
"Unshare" : "Rimuovi condivisione",
|
||||
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Visualizzazione di {{number_filtered}} di {{credential_number}} credenziali",
|
||||
"Search credential..." : "Cerca credenziali...",
|
||||
"Account" : "Account",
|
||||
"Password" : "Password",
|
||||
|
@ -169,6 +181,8 @@
|
|||
"Recover" : "Ripristina",
|
||||
"Destroy" : "Distruggi",
|
||||
"You have incoming share requests." : "Hai ricevuto delle richieste di condivisione.",
|
||||
"If you want to the credential in a other vault," : "Se vuoi condividere le credenziali con un'altra cassaforte,",
|
||||
"logout of this vault and login to the vault you want the shared credential in." : "esci da questa cassaforte e accedi alla cassaforte con la quale vuoi condividere le credenziali.",
|
||||
"Permissions" : "Permessi",
|
||||
"Received from" : "Ricevute da",
|
||||
"Date" : "Data",
|
||||
|
@ -177,6 +191,7 @@
|
|||
"Last accessed" : "Ultimo accesso",
|
||||
"Never" : "Mai",
|
||||
"No vaults found, why not create one?" : "Nessuna cassaforte trovata, vuoi crearne una?",
|
||||
"Password strength must be at least: {{strength}}" : "La robustezza della password deve essere almeno: {{strength}}",
|
||||
"Please give your new vault a name." : "Dai un nome alla tua nuova cassaforte.",
|
||||
"Vault password" : "Password della cassaforte",
|
||||
"Repeat vault password" : "Ripeti la password della cassaforte",
|
||||
|
@ -197,6 +212,7 @@
|
|||
"Click here to request it" : "Fai clic qui per richiederle",
|
||||
"Loading..." : "Caricamento in corso...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Ops... credenziali non trovate. Potrebbero essere scadute",
|
||||
"Error while saving field" : "Errore durante il salvataggio del campo",
|
||||
"A Passman item has been created, modified or deleted" : "Un elemento Passman è stato creato, modificato o eliminato",
|
||||
"A Passman item has expired" : "Un elemento Passman è scaduto",
|
||||
"A Passman item has been shared" : "Un elemento Passman è stato condiviso",
|
||||
|
@ -225,6 +241,15 @@
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s ha condiviso \"%s\" con te. Fai clic qui per accettare",
|
||||
"%s has declined your share request for \"%s\"." : "%s ha rifiutato la tua richiesta di condivisione per \"%s\".",
|
||||
"%s has accepted your share request for \"%s\"." : "%s ha accettato la tua richiesta di condivisione per \"%s\".",
|
||||
"Unable to get version info" : "Impossibile ottenere le informazioni di versione",
|
||||
"Passman Settings" : "Impostazioni di Passman",
|
||||
"Github version:" : "Versione di Github:",
|
||||
"A newer version of passman is available" : "Una nuova versione di Passman è disponibile",
|
||||
"Allow users on this server to share passwords with a link" : "Consenti agli utenti su questo server di condividere le password tramite un collegamento",
|
||||
"Allow users on this server to share passwords with other users" : "Consenti agli utenti su questo server di condividere le password con altri utenti",
|
||||
"Check for new versions" : "Controlla la presenza di nuove versioni",
|
||||
"Enable HTTPS check" : "Abilita controllo HTTPS",
|
||||
"Disable context menu" : "Disabilita menu contestuale",
|
||||
"Connection to server lost" : "Connessione al server interrotta",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problema durante il caricamento della pagina, aggiornamento tra 5 secondi",
|
||||
"Saving..." : "Salvataggio in corso...",
|
||||
|
|
17
l10n/nl.js
17
l10n/nl.js
|
@ -10,7 +10,7 @@ OC.L10N.register(
|
|||
"Please fill in a label!" : "Voeg een label toe!",
|
||||
"Please fill in a value!" : "Geef een waarde op!",
|
||||
"Error loading file" : "Fout bij laden bestand",
|
||||
"An error happend during decryption" : "Er trad een fout op bij ontsleutelen",
|
||||
"An error happened during decryption" : "Er trad een fout op bij ontsleutelen",
|
||||
"Credential created!" : "Inloggegevens aangemaakt!",
|
||||
"Credential deleted" : "Inloggegevens verwijderd",
|
||||
"Credential updated" : "Inloggegevens bijgewerkt",
|
||||
|
@ -44,6 +44,10 @@ OC.L10N.register(
|
|||
"Credential unshared" : "Delen inloggegevens gestopt",
|
||||
"Credential shared" : "Inloggegevens gedeeld",
|
||||
"Saved!" : "Opgeslagen!",
|
||||
"Poor" : "Slecht",
|
||||
"Weak" : "Zwak",
|
||||
"Good" : "Goed",
|
||||
"Strong" : "Sterk",
|
||||
"Toggle visibility" : "Omschakelen zichtbaarheid",
|
||||
"Copy to clipboard" : "Kopiëren naar het klembord",
|
||||
"Copied to clipboard!" : "Gekopieerd naar het klembord!",
|
||||
|
@ -204,6 +208,7 @@ OC.L10N.register(
|
|||
"Last accessed" : "Laatst benaderd",
|
||||
"Never" : "Nooit",
|
||||
"No vaults found, why not create one?" : "Geen kluis gevonden, eentje aanmaken?",
|
||||
"Password strength must be at least: {{strength}}" : "Wachtwoordsterkte minimale waarde: {{strength}}",
|
||||
"Please give your new vault a name." : "Voer de naam van je nieuwe kluis in.",
|
||||
"Vault password" : "Kluiswachtwoord",
|
||||
"Repeat vault password" : "Herhaal kluiswachtwoord",
|
||||
|
@ -224,6 +229,7 @@ OC.L10N.register(
|
|||
"Click here to request it" : "Klik hier om het aan te vragen",
|
||||
"Loading..." : "Laden...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Uhmmm.... inloggegeven niet gevonden. Misschien verlopen",
|
||||
"Error while saving field" : "Fout bij opslaan veld",
|
||||
"A Passman item has been created, modified or deleted" : "Er is een Passman object gemaakt, gewijzigd of verwijderd",
|
||||
"A Passman item has expired" : "Er is een Passman object vervallen",
|
||||
"A Passman item has been shared" : "Er is een Passman object gedeeld",
|
||||
|
@ -252,6 +258,15 @@ OC.L10N.register(
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s deelde \"%s\" met je. Klik hier om te accepteren",
|
||||
"%s has declined your share request for \"%s\"." : "%s weigerde je aanvraag om \"%s\" te delen.",
|
||||
"%s has accepted your share request for \"%s\"." : "%s accepteerde je aanvraag om \"%s\" te delen.",
|
||||
"Unable to get version info" : "Kon de versieinformatie niet ophalen",
|
||||
"Passman Settings" : "Passman instellingen",
|
||||
"Github version:" : "Github versie:",
|
||||
"A newer version of passman is available" : "Er is een meer recente versie van passman beschikbaar",
|
||||
"Allow users on this server to share passwords with a link" : "Toestaan dat gebruikers op deze server wachtwoorden delen via een link",
|
||||
"Allow users on this server to share passwords with other users" : "Toestaan dat gebruikers op deze server wachtwoorden met andere gebruikers delen",
|
||||
"Check for new versions" : "Controleren op nieuwe versies",
|
||||
"Enable HTTPS check" : "Inschakelen HTTPS controle",
|
||||
"Disable context menu" : "Deactiveren contextmenu",
|
||||
"Connection to server lost" : "Verbinding met server verloren",
|
||||
"Problem loading page, reloading in 5 seconds" : "Probleem met het laden van de pagina, wordt ververst in 5 seconden",
|
||||
"Saving..." : "Opslaan...",
|
||||
|
|
17
l10n/nl.json
17
l10n/nl.json
|
@ -8,7 +8,7 @@
|
|||
"Please fill in a label!" : "Voeg een label toe!",
|
||||
"Please fill in a value!" : "Geef een waarde op!",
|
||||
"Error loading file" : "Fout bij laden bestand",
|
||||
"An error happend during decryption" : "Er trad een fout op bij ontsleutelen",
|
||||
"An error happened during decryption" : "Er trad een fout op bij ontsleutelen",
|
||||
"Credential created!" : "Inloggegevens aangemaakt!",
|
||||
"Credential deleted" : "Inloggegevens verwijderd",
|
||||
"Credential updated" : "Inloggegevens bijgewerkt",
|
||||
|
@ -42,6 +42,10 @@
|
|||
"Credential unshared" : "Delen inloggegevens gestopt",
|
||||
"Credential shared" : "Inloggegevens gedeeld",
|
||||
"Saved!" : "Opgeslagen!",
|
||||
"Poor" : "Slecht",
|
||||
"Weak" : "Zwak",
|
||||
"Good" : "Goed",
|
||||
"Strong" : "Sterk",
|
||||
"Toggle visibility" : "Omschakelen zichtbaarheid",
|
||||
"Copy to clipboard" : "Kopiëren naar het klembord",
|
||||
"Copied to clipboard!" : "Gekopieerd naar het klembord!",
|
||||
|
@ -202,6 +206,7 @@
|
|||
"Last accessed" : "Laatst benaderd",
|
||||
"Never" : "Nooit",
|
||||
"No vaults found, why not create one?" : "Geen kluis gevonden, eentje aanmaken?",
|
||||
"Password strength must be at least: {{strength}}" : "Wachtwoordsterkte minimale waarde: {{strength}}",
|
||||
"Please give your new vault a name." : "Voer de naam van je nieuwe kluis in.",
|
||||
"Vault password" : "Kluiswachtwoord",
|
||||
"Repeat vault password" : "Herhaal kluiswachtwoord",
|
||||
|
@ -222,6 +227,7 @@
|
|||
"Click here to request it" : "Klik hier om het aan te vragen",
|
||||
"Loading..." : "Laden...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Uhmmm.... inloggegeven niet gevonden. Misschien verlopen",
|
||||
"Error while saving field" : "Fout bij opslaan veld",
|
||||
"A Passman item has been created, modified or deleted" : "Er is een Passman object gemaakt, gewijzigd of verwijderd",
|
||||
"A Passman item has expired" : "Er is een Passman object vervallen",
|
||||
"A Passman item has been shared" : "Er is een Passman object gedeeld",
|
||||
|
@ -250,6 +256,15 @@
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s deelde \"%s\" met je. Klik hier om te accepteren",
|
||||
"%s has declined your share request for \"%s\"." : "%s weigerde je aanvraag om \"%s\" te delen.",
|
||||
"%s has accepted your share request for \"%s\"." : "%s accepteerde je aanvraag om \"%s\" te delen.",
|
||||
"Unable to get version info" : "Kon de versieinformatie niet ophalen",
|
||||
"Passman Settings" : "Passman instellingen",
|
||||
"Github version:" : "Github versie:",
|
||||
"A newer version of passman is available" : "Er is een meer recente versie van passman beschikbaar",
|
||||
"Allow users on this server to share passwords with a link" : "Toestaan dat gebruikers op deze server wachtwoorden delen via een link",
|
||||
"Allow users on this server to share passwords with other users" : "Toestaan dat gebruikers op deze server wachtwoorden met andere gebruikers delen",
|
||||
"Check for new versions" : "Controleren op nieuwe versies",
|
||||
"Enable HTTPS check" : "Inschakelen HTTPS controle",
|
||||
"Disable context menu" : "Deactiveren contextmenu",
|
||||
"Connection to server lost" : "Verbinding met server verloren",
|
||||
"Problem loading page, reloading in 5 seconds" : "Probleem met het laden van de pagina, wordt ververst in 5 seconden",
|
||||
"Saving..." : "Opslaan...",
|
||||
|
|
|
@ -10,7 +10,7 @@ OC.L10N.register(
|
|||
"Please fill in a label!" : "Preencha o rótulo!",
|
||||
"Please fill in a value!" : "Preencha um valor!",
|
||||
"Error loading file" : "Erro ao carregar o arquivo",
|
||||
"An error happend during decryption" : "Ocorreu um erro durante a descriptografia",
|
||||
"An error happened during decryption" : "Ocorreu um erro durante a descriptografia",
|
||||
"Credential created!" : "Credencial criada!",
|
||||
"Credential deleted" : "Credential excluída",
|
||||
"Credential updated" : "Credencial atualizada",
|
||||
|
@ -44,6 +44,10 @@ OC.L10N.register(
|
|||
"Credential unshared" : "Credencial não compartilhada",
|
||||
"Credential shared" : "Credencial compartilhada",
|
||||
"Saved!" : "Salva!",
|
||||
"Poor" : "Pobre",
|
||||
"Weak" : "Fraca",
|
||||
"Good" : "Boa",
|
||||
"Strong" : "Forte",
|
||||
"Toggle visibility" : "Alternar visibilidade",
|
||||
"Copy to clipboard" : "Copiar para área de transferência",
|
||||
"Copied to clipboard!" : "Copiado para a área de transferência!",
|
||||
|
@ -204,6 +208,7 @@ OC.L10N.register(
|
|||
"Last accessed" : "Último acessado",
|
||||
"Never" : "Nunca",
|
||||
"No vaults found, why not create one?" : "Nenhum cofre encontrado, por que não criar um?",
|
||||
"Password strength must be at least: {{strength}}" : "A força da senha deve ser pelo menos: {{strength}}",
|
||||
"Please give your new vault a name." : "Por favor, dê ao seu novo cofre um nome.",
|
||||
"Vault password" : "Senha do cofre",
|
||||
"Repeat vault password" : "Repita a senha do cofre",
|
||||
|
@ -224,6 +229,7 @@ OC.L10N.register(
|
|||
"Click here to request it" : "Clique aqui para solicitá-lo",
|
||||
"Loading..." : "Carregando...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Awwhh .... credencial não encontrada. Talvez tenha expirado",
|
||||
"Error while saving field" : "Erro ao salvar o campo",
|
||||
"A Passman item has been created, modified or deleted" : "Um item Passman foi criado, modificado ou excluído",
|
||||
"A Passman item has expired" : "Um item Passman expirou",
|
||||
"A Passman item has been shared" : "Um item Passman foi compartilhado",
|
||||
|
@ -252,6 +258,15 @@ OC.L10N.register(
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s compartilhou \"%s\" com você. Clique aqui para aceitar",
|
||||
"%s has declined your share request for \"%s\"." : "%s recusou o seu pedido de participação de \"%s\".",
|
||||
"%s has accepted your share request for \"%s\"." : "%s aceitou seu pedido de compartilhamento para \"%s\".",
|
||||
"Unable to get version info" : "Não é possível obter informações sobre a versão",
|
||||
"Passman Settings" : "Configurações do Passman",
|
||||
"Github version:" : "Versão Github:",
|
||||
"A newer version of passman is available" : "Uma versão mais recente do passman está disponível",
|
||||
"Allow users on this server to share passwords with a link" : "Permitir que os usuários neste servidor compartilhem senhas com um link",
|
||||
"Allow users on this server to share passwords with other users" : "Permitir que usuários neste servidor compartilhem senhas com outros usuários",
|
||||
"Check for new versions" : "Verificar novas versões",
|
||||
"Enable HTTPS check" : "Ativar verificação HTTPS",
|
||||
"Disable context menu" : "Desativar menu de contexto",
|
||||
"Connection to server lost" : "Perdida a conexão com o servidor",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problema ao carregar a página, recarregando em 5 segundos",
|
||||
"Saving..." : "Pesquisando...",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"Please fill in a label!" : "Preencha o rótulo!",
|
||||
"Please fill in a value!" : "Preencha um valor!",
|
||||
"Error loading file" : "Erro ao carregar o arquivo",
|
||||
"An error happend during decryption" : "Ocorreu um erro durante a descriptografia",
|
||||
"An error happened during decryption" : "Ocorreu um erro durante a descriptografia",
|
||||
"Credential created!" : "Credencial criada!",
|
||||
"Credential deleted" : "Credential excluída",
|
||||
"Credential updated" : "Credencial atualizada",
|
||||
|
@ -42,6 +42,10 @@
|
|||
"Credential unshared" : "Credencial não compartilhada",
|
||||
"Credential shared" : "Credencial compartilhada",
|
||||
"Saved!" : "Salva!",
|
||||
"Poor" : "Pobre",
|
||||
"Weak" : "Fraca",
|
||||
"Good" : "Boa",
|
||||
"Strong" : "Forte",
|
||||
"Toggle visibility" : "Alternar visibilidade",
|
||||
"Copy to clipboard" : "Copiar para área de transferência",
|
||||
"Copied to clipboard!" : "Copiado para a área de transferência!",
|
||||
|
@ -202,6 +206,7 @@
|
|||
"Last accessed" : "Último acessado",
|
||||
"Never" : "Nunca",
|
||||
"No vaults found, why not create one?" : "Nenhum cofre encontrado, por que não criar um?",
|
||||
"Password strength must be at least: {{strength}}" : "A força da senha deve ser pelo menos: {{strength}}",
|
||||
"Please give your new vault a name." : "Por favor, dê ao seu novo cofre um nome.",
|
||||
"Vault password" : "Senha do cofre",
|
||||
"Repeat vault password" : "Repita a senha do cofre",
|
||||
|
@ -222,6 +227,7 @@
|
|||
"Click here to request it" : "Clique aqui para solicitá-lo",
|
||||
"Loading..." : "Carregando...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Awwhh .... credencial não encontrada. Talvez tenha expirado",
|
||||
"Error while saving field" : "Erro ao salvar o campo",
|
||||
"A Passman item has been created, modified or deleted" : "Um item Passman foi criado, modificado ou excluído",
|
||||
"A Passman item has expired" : "Um item Passman expirou",
|
||||
"A Passman item has been shared" : "Um item Passman foi compartilhado",
|
||||
|
@ -250,6 +256,15 @@
|
|||
"%s shared \"%s\" with you. Click here to accept" : "%s compartilhou \"%s\" com você. Clique aqui para aceitar",
|
||||
"%s has declined your share request for \"%s\"." : "%s recusou o seu pedido de participação de \"%s\".",
|
||||
"%s has accepted your share request for \"%s\"." : "%s aceitou seu pedido de compartilhamento para \"%s\".",
|
||||
"Unable to get version info" : "Não é possível obter informações sobre a versão",
|
||||
"Passman Settings" : "Configurações do Passman",
|
||||
"Github version:" : "Versão Github:",
|
||||
"A newer version of passman is available" : "Uma versão mais recente do passman está disponível",
|
||||
"Allow users on this server to share passwords with a link" : "Permitir que os usuários neste servidor compartilhem senhas com um link",
|
||||
"Allow users on this server to share passwords with other users" : "Permitir que usuários neste servidor compartilhem senhas com outros usuários",
|
||||
"Check for new versions" : "Verificar novas versões",
|
||||
"Enable HTTPS check" : "Ativar verificação HTTPS",
|
||||
"Disable context menu" : "Desativar menu de contexto",
|
||||
"Connection to server lost" : "Perdida a conexão com o servidor",
|
||||
"Problem loading page, reloading in 5 seconds" : "Problema ao carregar a página, recarregando em 5 segundos",
|
||||
"Saving..." : "Pesquisando...",
|
||||
|
|
276
l10n/ru.js
Normal file
276
l10n/ru.js
Normal file
|
@ -0,0 +1,276 @@
|
|||
OC.L10N.register(
|
||||
"passman",
|
||||
{
|
||||
"Passwords" : "Пароли",
|
||||
"Generating sharing keys ( %step / 2)" : "Создаются ключи общего доступа ( %step / 2)",
|
||||
"Incorrect vault password!" : "Неверный пароль хранилища!",
|
||||
"Passwords do not match" : "Пароли не совпадают",
|
||||
"General" : "Основные",
|
||||
"Custom Fields" : "Свои поля",
|
||||
"Please fill in a label!" : "Заполните название!",
|
||||
"Please fill in a value!" : "Заполните значение!",
|
||||
"Error loading file" : "Ошибка загрузки файла",
|
||||
"An error happened during decryption" : "Во время расшифровки произошла ошибка",
|
||||
"Credential created!" : "Реквизит создан!",
|
||||
"Credential deleted" : "Реквизит удалён",
|
||||
"Credential updated" : "Реквизит обновлен",
|
||||
"Credential recovered" : "Реквизит восстановлен",
|
||||
"Error downloading file, you probably don't have enough permissions" : "Ошибка скачивания файла, возможно у вас не достаточно прав доступа",
|
||||
"Starting export" : "Начинается экспорт",
|
||||
"Decrypting credentials" : "Расшифровка реквизитов",
|
||||
"Done" : "Готово",
|
||||
"File read successfully!" : "Файл успешно прочитан!",
|
||||
"Credential has no label, skipping" : "У реквизитов нет названия, пропускается",
|
||||
"Adding {{credential}}" : "Добавляется {{credential}}",
|
||||
"Added {{credential}}" : "Добавлено {{credential}}",
|
||||
"Parsed {{num}} credentials, starting to import" : "Разобрано {{num}} реквизитов, начинается импорт",
|
||||
"Revision deleted" : "Версия удалена",
|
||||
"Revision restored" : "Версия восстановлена",
|
||||
"Save in passman" : "Сохранить в passman",
|
||||
"Settings saved" : "Настройки сохранены",
|
||||
"General settings" : "Основные настройки",
|
||||
"Password Audit" : "Аудит пароля",
|
||||
"Password settings" : "Настройки пароля",
|
||||
"Import credentials" : "Импортировать реквизиты",
|
||||
"Export credentials" : "Экспортировать реквизиты",
|
||||
"Sharing" : "Общий доступ",
|
||||
"Are you sure you want to leave? This WILL corrupt all your credentials" : "Уверены, что хотите выйти? Это повредит все ваши реквизиты",
|
||||
"Your old password is incorrect!" : "Старый пароль неверен!",
|
||||
"New passwords do not match!" : "Новые пароли не совпадают",
|
||||
"Please login with your new vault password" : "Войдите в систему со своим новым паролем хранилища",
|
||||
"Share with users and groups" : "Поделиться с пользователями и группами",
|
||||
"Share link" : "Поделиться ссылкой",
|
||||
"Are you sure you want to leave? This will corrupt this credential" : "Уверены, что хотите выйти? Это повредит текущий реквизит",
|
||||
"Credential unshared" : "Общий доступ к реквизиту прекращен",
|
||||
"Credential shared" : "Общий доступ к реквизитам предоставлен",
|
||||
"Saved!" : "Сохранено!",
|
||||
"Poor" : "Плохой",
|
||||
"Weak" : "Слабый",
|
||||
"Good" : "Хороший",
|
||||
"Strong" : "Надёжный",
|
||||
"Toggle visibility" : "Переключить видимость",
|
||||
"Copy to clipboard" : "Копировать в буфер обмена",
|
||||
"Copied to clipboard!" : "Скопировано в буфер обмена!",
|
||||
"Generate password" : "Создать пароль",
|
||||
"Copy password to clipboard" : "Копировать пароль в буфер обмена",
|
||||
"Password copied to clipboard!" : "Пароль скопирован в буфер обмена!",
|
||||
"Complete" : "Завершить",
|
||||
"Username" : "Имя пользователя",
|
||||
"Repeat password" : "Повторите пароль",
|
||||
"Add Tag" : "Добавить метку",
|
||||
"Field label" : "Название поля",
|
||||
"Field value" : "Значение поля",
|
||||
"Choose a file" : "Выберите файл",
|
||||
"Text" : "Текст",
|
||||
"File" : "Файл",
|
||||
"Add" : "Добавить",
|
||||
"Value" : "Значение",
|
||||
"Type" : "Тип",
|
||||
"Actions" : "Действие",
|
||||
"Empty" : "Пусто",
|
||||
"Filename" : "Имя файла",
|
||||
"Upload date" : "Дата загрузки",
|
||||
"Size" : "Размер",
|
||||
"Upload your OTP qr code" : "Загрузить ваш QR-код OTP",
|
||||
"Current OTP settings" : "Текущие настройки OPT",
|
||||
"Issuer" : "Выпустил",
|
||||
"Secret" : "Секрет",
|
||||
"Expire date" : "Дата истечения",
|
||||
"No expire date set" : "Дата истечения не установлена",
|
||||
"Renew interval" : "Интервал обновления",
|
||||
"Disabled" : "Отключено",
|
||||
"Day(s)" : "День(дней)",
|
||||
"Week(s)" : "Неделя(и)",
|
||||
"Month(s)" : "Месяц(ев)",
|
||||
"Year(s)" : "Год(Лет)",
|
||||
"Password generation settings" : "Настройки создания пароля",
|
||||
"Password length" : "Длина пароля",
|
||||
"Minimum amount of digits" : "Минимальное число цифр",
|
||||
"Use uppercase letters" : "Использовать верхний регистр",
|
||||
"Use lowercase letters" : "Использовать нижний регистр",
|
||||
"Use numbers" : "Использовать числа",
|
||||
"Use special characters" : "Использовать специальные символы",
|
||||
"Avoid ambiguous characters" : "Избегать неоднозначных символов",
|
||||
"Require every character type" : "Требовать тип каждого символа",
|
||||
"Export type" : "Тип экпорта",
|
||||
"Export" : "Экспорт",
|
||||
"Rename vault" : "Переименовать хранилище",
|
||||
"New vault name" : "Новое название хранилища",
|
||||
"Change" : "Изменить",
|
||||
"Change vault key" : "Изменить ключ хранилща",
|
||||
"Old vault password" : "Старый пароль хранилища",
|
||||
"New vault password" : "Новый пароль хранилища",
|
||||
"New vault password repeat" : "Повторите новый пароль",
|
||||
"Please wait your vault is being updated, do not leave this page." : "Подождите пока обновится хранилище. Не уходите с этой страницы.",
|
||||
"Processing" : "Обрабатывется",
|
||||
"Total progress" : "Общий ход выполнения",
|
||||
"About Passman" : "О Passman",
|
||||
"Version" : "Версия",
|
||||
"Donate to support development" : "Пожертвовать на поддержку разработки",
|
||||
"Bookmarklet" : "Приложение для панели закладок",
|
||||
"Save your passwords with 1 click!" : "Сохраняйте свои пароли за 1 клик!",
|
||||
"Drag below button to your bookmark toolbar." : "Перетащите кнопку, находящуюся ниже, на вашу панель закладок.",
|
||||
"Import type" : "Тип импорта",
|
||||
"Import" : "Импорт",
|
||||
"Read progress" : "Ход чтения",
|
||||
"Upload progress" : "Ход загрузки",
|
||||
"Private Key" : "Частный ключ",
|
||||
"Public key" : "Открытый ключ",
|
||||
"Key size" : "Размер ключа",
|
||||
"Save keys" : "Сохранить ключи",
|
||||
"Generate sharing keys" : "Создать ключи общего доступа",
|
||||
"Generating sharing keys" : "Ключи общего доступа создаются",
|
||||
"The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Инструмент паролей просканирует ваши пароли, вычислит среднее время для из взлома, и, если оно окажется ниже порогового значения, покажет их",
|
||||
"Minimum password stength" : "Минимальная устойчивость пароля",
|
||||
"Passman scanned your passwords, and here is the result." : "Passman просканировал ваши пароли и вот результат.",
|
||||
"A total of {{scan_result}} weak credentials." : "Слабые реквизиты из {{scan_result}}.",
|
||||
"Score" : "Баллов",
|
||||
"Action" : "Действие",
|
||||
"Search users or groups..." : "Поиск пользователя или групп...",
|
||||
"Cyphering" : "Вычисление",
|
||||
"Uploading" : "Загрузка",
|
||||
"User" : "Пользователь",
|
||||
"Crypto time" : "Время шифрования",
|
||||
"Total time spent cyphering" : "Всего использовано времени на вычисление",
|
||||
"Read" : "Прочитано",
|
||||
"Write" : "Записано",
|
||||
"Files" : "Файлов",
|
||||
"Revisions" : "Версий",
|
||||
"Pending" : "Ожидается",
|
||||
"Enable link sharing" : "Разрешить обмен ссылками",
|
||||
"Share until date" : "Поделиться до даты",
|
||||
"Expire after views" : "Истекает после просмотров",
|
||||
"Click share first" : "Сначала щелкните по \"поделиться\"",
|
||||
"Show files" : "Показать файлы",
|
||||
"Details" : "Подробно",
|
||||
"Hide details" : "Скрыть подробности",
|
||||
"Password score" : "Баллы пароля",
|
||||
"Cracking times" : "Время взлома",
|
||||
"100 / hour" : "100 / час",
|
||||
"Throttled online attack" : "Ограниченная по частоте атака онлайн",
|
||||
"10 / second" : "10 / секунду",
|
||||
"Unthrottled online attack" : "Неограниченная по частоте атака онлайн",
|
||||
"10k / second" : "10 тыс. / секунду",
|
||||
"Offline attack, slow hash, many cores" : "Офлайн атака, медленное хэширование, много ядер",
|
||||
"10B / second" : "10 байт / секунду",
|
||||
"Offline attack, fast hash, many cores" : "Офлайн атака, быстрое хеширование, много ядер",
|
||||
"Match sequence" : "Соответствующая последовательность",
|
||||
"See match sequence" : "Просмотреть соотвествующую последовательность",
|
||||
"Pattern" : "Шаблон",
|
||||
"Matched word" : "Совпавшее слово",
|
||||
"Dictionary name" : "Название словаря",
|
||||
"Rank" : "Ранг",
|
||||
"Reversed" : "Реверсированные",
|
||||
"Guesses" : "Угаданные",
|
||||
"Base guesses" : "В основном угаданные",
|
||||
"Uppercase variations" : "Изменения заглавных букв",
|
||||
"l33t-variations" : "l33t-изменения",
|
||||
"Showing revisions of" : "Показываются версии",
|
||||
"Revision of" : "Версия",
|
||||
"by" : "автора",
|
||||
"No revisions found." : "Версий не найдено.",
|
||||
"Label" : "Метка",
|
||||
"Restore revision" : "Востановить версию",
|
||||
"Delete revision" : "Удалить версию",
|
||||
"Edit credential" : "Редактировать реквизиты",
|
||||
"Create new credential" : "Создать новые реквизиты",
|
||||
"Save" : "Сохранить",
|
||||
"Cancel" : "Отмена",
|
||||
"Settings" : "Настройки",
|
||||
"Share credential {{credential}}" : "Поделиться реквизитами {{credential}}",
|
||||
"Unshare" : "Закрыть доступ",
|
||||
"Showing deleted since" : "Показываются удалённые после",
|
||||
"All time" : "За всё время",
|
||||
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Показывается {{number_filtered}} из {{credential_number}} реквизитов",
|
||||
"Search credential..." : "Поиск реквизитов...",
|
||||
"Account" : "Аккаунт",
|
||||
"Password" : "Пароль",
|
||||
"OTP" : "OTP (одноразовый пароль)",
|
||||
"E-mail" : "Эл. почта",
|
||||
"URL" : "URL",
|
||||
"Notes" : "Заметки",
|
||||
"Expire time" : "Срок действия",
|
||||
"Changed" : "Изменено",
|
||||
"Created" : "Создано",
|
||||
"Edit" : "Редактировать",
|
||||
"Delete" : "Удалить",
|
||||
"Share" : "Поделиться",
|
||||
"Recover" : "Восстановить",
|
||||
"Destroy" : "Уничтожить",
|
||||
"You have incoming share requests." : "У вас входящий запрос на общий доступ.",
|
||||
"If you want to the credential in a other vault," : "Если вы хотите перейти к реквизитам их другого хранилища,",
|
||||
"logout of this vault and login to the vault you want the shared credential in." : "выйдите из этого хранилища и войдите в хранилище, которое содержит общие реквизиты.",
|
||||
"Permissions" : "Права доступа",
|
||||
"Received from" : "Получено от",
|
||||
"Date" : "Дата",
|
||||
"Accept" : "Принять",
|
||||
"Decline" : "Отклонить",
|
||||
"Last accessed" : "Посл. доступ",
|
||||
"Never" : "Никогда",
|
||||
"No vaults found, why not create one?" : "Хранилищ не найдено, почему бы не создать?",
|
||||
"Password strength must be at least: {{strength}}" : "Устойчивать пароля должна быть не ниже: {{strength}}",
|
||||
"Please give your new vault a name." : "Укажите имя нового хранилища.",
|
||||
"Vault password" : "Пароль хранилища",
|
||||
"Repeat vault password" : "Повторите пароль хранилища",
|
||||
"Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Ключ доступа будет иметь устойчивость 1024 бита, позже вы можете изменить ее в настройках.",
|
||||
"Create vault" : "Создать хранилище",
|
||||
"Go back to vaults" : "Вернуться в хранилище",
|
||||
"Please input the password for" : "Введите пароль для",
|
||||
"Set this vault as default." : "Установить текущее хранилище хранилищем по-умолчанию.",
|
||||
"Login automatically to this vault." : "Автоматически входить в это хранилище.",
|
||||
"Decrypt vault" : "Расшифровать хранилище",
|
||||
"Warning! Adding credentials over http can be insecure!" : "Предупреждение! Добавление реквизитов с использованием протокола http может быть небезопасно!",
|
||||
"Logged in to {{vault_name}}" : "Вошли в {{vault_name}}",
|
||||
"Change vault" : "Изменить хранилище",
|
||||
"Deleted credentials" : "Удалённые реквизиты",
|
||||
"Logout" : "Выйти",
|
||||
"Donate" : "Пожертвовать",
|
||||
"Someone has shared a credential with you." : "Кто-то поделился с вами реквизитами.",
|
||||
"Click here to request it" : "Щелкните здесь для их получения.",
|
||||
"Loading..." : "Загрузка...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Реквизиты не найдены. Возможно, закончился срок их действия.",
|
||||
"Error while saving field" : "Ошибка при сохранении поля",
|
||||
"A Passman item has been created, modified or deleted" : "Элемент Passman был создан, изменён или удалён",
|
||||
"A Passman item has expired" : "У элемента Passman закончился срок действия",
|
||||
"A Passman item has been shared" : "Поделились элементом Passman",
|
||||
"A Passman item has been renamed" : "Элемент Passman был переименован",
|
||||
"%1$s has been created by %2$s" : "%1$s создано %2$s",
|
||||
"You created %1$s" : "Вы создали %1$s",
|
||||
"%1$s has been updated by %2$s" : "%2$s обновил %1$s",
|
||||
"You updated %1$s" : "Вы обновили %1$s",
|
||||
"%2$s has revised %1$s to the revision of %3$s" : "%2$s сменил версию %1$s до версии %3$s",
|
||||
"You reverted %1$s back to the revision of %3$s" : "Вы откатили %1$s до версии %3$s",
|
||||
"%3$s has renamed %1$s to %2$s" : "%3$s переименовал %1$s в %2$s",
|
||||
"You renamed %1$s to %2$s" : "Вы переименовали %1$s в %2$s",
|
||||
"%1$s has been deleted by %2$s" : "%1$s удалено %2$s",
|
||||
"You deleted %1$s" : "Вы удалили %1$s",
|
||||
"%1$s has been recovered by %2$s" : " %2$s восстановил %1$s",
|
||||
"You recovered %1$s" : "Вы восстановили %1$s",
|
||||
"%1$s has been permanently deleted by %2$s" : "%2$s окончательно удалил %1$s",
|
||||
"You permanently deleted %1$s" : "Вы окончательно удалили %1$s",
|
||||
"The password of %1$s has expired, renew it now." : "Срок действия пароль %1$s истек, обновите его сейчас.",
|
||||
"%1$s has been shared with %2$s" : "%1$s поделились с %2$s",
|
||||
"You received a share request for %1$s from %2$s" : "Вы получили запрос на предоставление общего доступа к %1$s от %2$s",
|
||||
"%s has been shared with a link" : "к %s был предоставлен общий доступ ссылкой",
|
||||
"Your credential \"%s\" expired, click here to update the credential." : "Истёк срок действия реквизитов \"%s\", щелкните здесь для обновления реквизитов.",
|
||||
"Remind me later" : "Напомнить позже",
|
||||
"Ignore" : "Пропустить",
|
||||
"%s shared \"%s\" with you. Click here to accept" : "%s предоставил вам доступ к \"%s\". Щёлкните здесь что бы принять.",
|
||||
"%s has declined your share request for \"%s\"." : "%s отклонил ваш запрос на предоставление общего доступа к \"%s\".",
|
||||
"%s has accepted your share request for \"%s\"." : "%s принял ваш запрос на предоставление общего доступа к \"%s\".",
|
||||
"Unable to get version info" : "Невозможно получить информацию о версии",
|
||||
"Passman Settings" : "Настройки Passman",
|
||||
"Github version:" : "Версия github:",
|
||||
"A newer version of passman is available" : "Доступна новая версия passman",
|
||||
"Allow users on this server to share passwords with a link" : "Разрешить пользователям этого сервера делиться паролями посредством ссылки",
|
||||
"Allow users on this server to share passwords with other users" : "Разрешить пользователям этого сервера делиться паролями с другими пользователями",
|
||||
"Check for new versions" : "Проверить наличие новых версий",
|
||||
"Enable HTTPS check" : "Включить проверку HTTPS",
|
||||
"Disable context menu" : "Отключить контекстное меню",
|
||||
"Connection to server lost" : "Подключение к серверу потеряно",
|
||||
"Problem loading page, reloading in 5 seconds" : "Проблема при загрузке страницы, перезагрузка через 5 сек.",
|
||||
"Saving..." : "Сохранение...",
|
||||
"Dismiss" : "Закрыть",
|
||||
"seconds ago" : "несколько секунд назад"
|
||||
},
|
||||
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
|
274
l10n/ru.json
Normal file
274
l10n/ru.json
Normal file
|
@ -0,0 +1,274 @@
|
|||
{ "translations": {
|
||||
"Passwords" : "Пароли",
|
||||
"Generating sharing keys ( %step / 2)" : "Создаются ключи общего доступа ( %step / 2)",
|
||||
"Incorrect vault password!" : "Неверный пароль хранилища!",
|
||||
"Passwords do not match" : "Пароли не совпадают",
|
||||
"General" : "Основные",
|
||||
"Custom Fields" : "Свои поля",
|
||||
"Please fill in a label!" : "Заполните название!",
|
||||
"Please fill in a value!" : "Заполните значение!",
|
||||
"Error loading file" : "Ошибка загрузки файла",
|
||||
"An error happened during decryption" : "Во время расшифровки произошла ошибка",
|
||||
"Credential created!" : "Реквизит создан!",
|
||||
"Credential deleted" : "Реквизит удалён",
|
||||
"Credential updated" : "Реквизит обновлен",
|
||||
"Credential recovered" : "Реквизит восстановлен",
|
||||
"Error downloading file, you probably don't have enough permissions" : "Ошибка скачивания файла, возможно у вас не достаточно прав доступа",
|
||||
"Starting export" : "Начинается экспорт",
|
||||
"Decrypting credentials" : "Расшифровка реквизитов",
|
||||
"Done" : "Готово",
|
||||
"File read successfully!" : "Файл успешно прочитан!",
|
||||
"Credential has no label, skipping" : "У реквизитов нет названия, пропускается",
|
||||
"Adding {{credential}}" : "Добавляется {{credential}}",
|
||||
"Added {{credential}}" : "Добавлено {{credential}}",
|
||||
"Parsed {{num}} credentials, starting to import" : "Разобрано {{num}} реквизитов, начинается импорт",
|
||||
"Revision deleted" : "Версия удалена",
|
||||
"Revision restored" : "Версия восстановлена",
|
||||
"Save in passman" : "Сохранить в passman",
|
||||
"Settings saved" : "Настройки сохранены",
|
||||
"General settings" : "Основные настройки",
|
||||
"Password Audit" : "Аудит пароля",
|
||||
"Password settings" : "Настройки пароля",
|
||||
"Import credentials" : "Импортировать реквизиты",
|
||||
"Export credentials" : "Экспортировать реквизиты",
|
||||
"Sharing" : "Общий доступ",
|
||||
"Are you sure you want to leave? This WILL corrupt all your credentials" : "Уверены, что хотите выйти? Это повредит все ваши реквизиты",
|
||||
"Your old password is incorrect!" : "Старый пароль неверен!",
|
||||
"New passwords do not match!" : "Новые пароли не совпадают",
|
||||
"Please login with your new vault password" : "Войдите в систему со своим новым паролем хранилища",
|
||||
"Share with users and groups" : "Поделиться с пользователями и группами",
|
||||
"Share link" : "Поделиться ссылкой",
|
||||
"Are you sure you want to leave? This will corrupt this credential" : "Уверены, что хотите выйти? Это повредит текущий реквизит",
|
||||
"Credential unshared" : "Общий доступ к реквизиту прекращен",
|
||||
"Credential shared" : "Общий доступ к реквизитам предоставлен",
|
||||
"Saved!" : "Сохранено!",
|
||||
"Poor" : "Плохой",
|
||||
"Weak" : "Слабый",
|
||||
"Good" : "Хороший",
|
||||
"Strong" : "Надёжный",
|
||||
"Toggle visibility" : "Переключить видимость",
|
||||
"Copy to clipboard" : "Копировать в буфер обмена",
|
||||
"Copied to clipboard!" : "Скопировано в буфер обмена!",
|
||||
"Generate password" : "Создать пароль",
|
||||
"Copy password to clipboard" : "Копировать пароль в буфер обмена",
|
||||
"Password copied to clipboard!" : "Пароль скопирован в буфер обмена!",
|
||||
"Complete" : "Завершить",
|
||||
"Username" : "Имя пользователя",
|
||||
"Repeat password" : "Повторите пароль",
|
||||
"Add Tag" : "Добавить метку",
|
||||
"Field label" : "Название поля",
|
||||
"Field value" : "Значение поля",
|
||||
"Choose a file" : "Выберите файл",
|
||||
"Text" : "Текст",
|
||||
"File" : "Файл",
|
||||
"Add" : "Добавить",
|
||||
"Value" : "Значение",
|
||||
"Type" : "Тип",
|
||||
"Actions" : "Действие",
|
||||
"Empty" : "Пусто",
|
||||
"Filename" : "Имя файла",
|
||||
"Upload date" : "Дата загрузки",
|
||||
"Size" : "Размер",
|
||||
"Upload your OTP qr code" : "Загрузить ваш QR-код OTP",
|
||||
"Current OTP settings" : "Текущие настройки OPT",
|
||||
"Issuer" : "Выпустил",
|
||||
"Secret" : "Секрет",
|
||||
"Expire date" : "Дата истечения",
|
||||
"No expire date set" : "Дата истечения не установлена",
|
||||
"Renew interval" : "Интервал обновления",
|
||||
"Disabled" : "Отключено",
|
||||
"Day(s)" : "День(дней)",
|
||||
"Week(s)" : "Неделя(и)",
|
||||
"Month(s)" : "Месяц(ев)",
|
||||
"Year(s)" : "Год(Лет)",
|
||||
"Password generation settings" : "Настройки создания пароля",
|
||||
"Password length" : "Длина пароля",
|
||||
"Minimum amount of digits" : "Минимальное число цифр",
|
||||
"Use uppercase letters" : "Использовать верхний регистр",
|
||||
"Use lowercase letters" : "Использовать нижний регистр",
|
||||
"Use numbers" : "Использовать числа",
|
||||
"Use special characters" : "Использовать специальные символы",
|
||||
"Avoid ambiguous characters" : "Избегать неоднозначных символов",
|
||||
"Require every character type" : "Требовать тип каждого символа",
|
||||
"Export type" : "Тип экпорта",
|
||||
"Export" : "Экспорт",
|
||||
"Rename vault" : "Переименовать хранилище",
|
||||
"New vault name" : "Новое название хранилища",
|
||||
"Change" : "Изменить",
|
||||
"Change vault key" : "Изменить ключ хранилща",
|
||||
"Old vault password" : "Старый пароль хранилища",
|
||||
"New vault password" : "Новый пароль хранилища",
|
||||
"New vault password repeat" : "Повторите новый пароль",
|
||||
"Please wait your vault is being updated, do not leave this page." : "Подождите пока обновится хранилище. Не уходите с этой страницы.",
|
||||
"Processing" : "Обрабатывется",
|
||||
"Total progress" : "Общий ход выполнения",
|
||||
"About Passman" : "О Passman",
|
||||
"Version" : "Версия",
|
||||
"Donate to support development" : "Пожертвовать на поддержку разработки",
|
||||
"Bookmarklet" : "Приложение для панели закладок",
|
||||
"Save your passwords with 1 click!" : "Сохраняйте свои пароли за 1 клик!",
|
||||
"Drag below button to your bookmark toolbar." : "Перетащите кнопку, находящуюся ниже, на вашу панель закладок.",
|
||||
"Import type" : "Тип импорта",
|
||||
"Import" : "Импорт",
|
||||
"Read progress" : "Ход чтения",
|
||||
"Upload progress" : "Ход загрузки",
|
||||
"Private Key" : "Частный ключ",
|
||||
"Public key" : "Открытый ключ",
|
||||
"Key size" : "Размер ключа",
|
||||
"Save keys" : "Сохранить ключи",
|
||||
"Generate sharing keys" : "Создать ключи общего доступа",
|
||||
"Generating sharing keys" : "Ключи общего доступа создаются",
|
||||
"The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Инструмент паролей просканирует ваши пароли, вычислит среднее время для из взлома, и, если оно окажется ниже порогового значения, покажет их",
|
||||
"Minimum password stength" : "Минимальная устойчивость пароля",
|
||||
"Passman scanned your passwords, and here is the result." : "Passman просканировал ваши пароли и вот результат.",
|
||||
"A total of {{scan_result}} weak credentials." : "Слабые реквизиты из {{scan_result}}.",
|
||||
"Score" : "Баллов",
|
||||
"Action" : "Действие",
|
||||
"Search users or groups..." : "Поиск пользователя или групп...",
|
||||
"Cyphering" : "Вычисление",
|
||||
"Uploading" : "Загрузка",
|
||||
"User" : "Пользователь",
|
||||
"Crypto time" : "Время шифрования",
|
||||
"Total time spent cyphering" : "Всего использовано времени на вычисление",
|
||||
"Read" : "Прочитано",
|
||||
"Write" : "Записано",
|
||||
"Files" : "Файлов",
|
||||
"Revisions" : "Версий",
|
||||
"Pending" : "Ожидается",
|
||||
"Enable link sharing" : "Разрешить обмен ссылками",
|
||||
"Share until date" : "Поделиться до даты",
|
||||
"Expire after views" : "Истекает после просмотров",
|
||||
"Click share first" : "Сначала щелкните по \"поделиться\"",
|
||||
"Show files" : "Показать файлы",
|
||||
"Details" : "Подробно",
|
||||
"Hide details" : "Скрыть подробности",
|
||||
"Password score" : "Баллы пароля",
|
||||
"Cracking times" : "Время взлома",
|
||||
"100 / hour" : "100 / час",
|
||||
"Throttled online attack" : "Ограниченная по частоте атака онлайн",
|
||||
"10 / second" : "10 / секунду",
|
||||
"Unthrottled online attack" : "Неограниченная по частоте атака онлайн",
|
||||
"10k / second" : "10 тыс. / секунду",
|
||||
"Offline attack, slow hash, many cores" : "Офлайн атака, медленное хэширование, много ядер",
|
||||
"10B / second" : "10 байт / секунду",
|
||||
"Offline attack, fast hash, many cores" : "Офлайн атака, быстрое хеширование, много ядер",
|
||||
"Match sequence" : "Соответствующая последовательность",
|
||||
"See match sequence" : "Просмотреть соотвествующую последовательность",
|
||||
"Pattern" : "Шаблон",
|
||||
"Matched word" : "Совпавшее слово",
|
||||
"Dictionary name" : "Название словаря",
|
||||
"Rank" : "Ранг",
|
||||
"Reversed" : "Реверсированные",
|
||||
"Guesses" : "Угаданные",
|
||||
"Base guesses" : "В основном угаданные",
|
||||
"Uppercase variations" : "Изменения заглавных букв",
|
||||
"l33t-variations" : "l33t-изменения",
|
||||
"Showing revisions of" : "Показываются версии",
|
||||
"Revision of" : "Версия",
|
||||
"by" : "автора",
|
||||
"No revisions found." : "Версий не найдено.",
|
||||
"Label" : "Метка",
|
||||
"Restore revision" : "Востановить версию",
|
||||
"Delete revision" : "Удалить версию",
|
||||
"Edit credential" : "Редактировать реквизиты",
|
||||
"Create new credential" : "Создать новые реквизиты",
|
||||
"Save" : "Сохранить",
|
||||
"Cancel" : "Отмена",
|
||||
"Settings" : "Настройки",
|
||||
"Share credential {{credential}}" : "Поделиться реквизитами {{credential}}",
|
||||
"Unshare" : "Закрыть доступ",
|
||||
"Showing deleted since" : "Показываются удалённые после",
|
||||
"All time" : "За всё время",
|
||||
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Показывается {{number_filtered}} из {{credential_number}} реквизитов",
|
||||
"Search credential..." : "Поиск реквизитов...",
|
||||
"Account" : "Аккаунт",
|
||||
"Password" : "Пароль",
|
||||
"OTP" : "OTP (одноразовый пароль)",
|
||||
"E-mail" : "Эл. почта",
|
||||
"URL" : "URL",
|
||||
"Notes" : "Заметки",
|
||||
"Expire time" : "Срок действия",
|
||||
"Changed" : "Изменено",
|
||||
"Created" : "Создано",
|
||||
"Edit" : "Редактировать",
|
||||
"Delete" : "Удалить",
|
||||
"Share" : "Поделиться",
|
||||
"Recover" : "Восстановить",
|
||||
"Destroy" : "Уничтожить",
|
||||
"You have incoming share requests." : "У вас входящий запрос на общий доступ.",
|
||||
"If you want to the credential in a other vault," : "Если вы хотите перейти к реквизитам их другого хранилища,",
|
||||
"logout of this vault and login to the vault you want the shared credential in." : "выйдите из этого хранилища и войдите в хранилище, которое содержит общие реквизиты.",
|
||||
"Permissions" : "Права доступа",
|
||||
"Received from" : "Получено от",
|
||||
"Date" : "Дата",
|
||||
"Accept" : "Принять",
|
||||
"Decline" : "Отклонить",
|
||||
"Last accessed" : "Посл. доступ",
|
||||
"Never" : "Никогда",
|
||||
"No vaults found, why not create one?" : "Хранилищ не найдено, почему бы не создать?",
|
||||
"Password strength must be at least: {{strength}}" : "Устойчивать пароля должна быть не ниже: {{strength}}",
|
||||
"Please give your new vault a name." : "Укажите имя нового хранилища.",
|
||||
"Vault password" : "Пароль хранилища",
|
||||
"Repeat vault password" : "Повторите пароль хранилища",
|
||||
"Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Ключ доступа будет иметь устойчивость 1024 бита, позже вы можете изменить ее в настройках.",
|
||||
"Create vault" : "Создать хранилище",
|
||||
"Go back to vaults" : "Вернуться в хранилище",
|
||||
"Please input the password for" : "Введите пароль для",
|
||||
"Set this vault as default." : "Установить текущее хранилище хранилищем по-умолчанию.",
|
||||
"Login automatically to this vault." : "Автоматически входить в это хранилище.",
|
||||
"Decrypt vault" : "Расшифровать хранилище",
|
||||
"Warning! Adding credentials over http can be insecure!" : "Предупреждение! Добавление реквизитов с использованием протокола http может быть небезопасно!",
|
||||
"Logged in to {{vault_name}}" : "Вошли в {{vault_name}}",
|
||||
"Change vault" : "Изменить хранилище",
|
||||
"Deleted credentials" : "Удалённые реквизиты",
|
||||
"Logout" : "Выйти",
|
||||
"Donate" : "Пожертвовать",
|
||||
"Someone has shared a credential with you." : "Кто-то поделился с вами реквизитами.",
|
||||
"Click here to request it" : "Щелкните здесь для их получения.",
|
||||
"Loading..." : "Загрузка...",
|
||||
"Awwhh.... credential not found. Maybe it expired" : "Реквизиты не найдены. Возможно, закончился срок их действия.",
|
||||
"Error while saving field" : "Ошибка при сохранении поля",
|
||||
"A Passman item has been created, modified or deleted" : "Элемент Passman был создан, изменён или удалён",
|
||||
"A Passman item has expired" : "У элемента Passman закончился срок действия",
|
||||
"A Passman item has been shared" : "Поделились элементом Passman",
|
||||
"A Passman item has been renamed" : "Элемент Passman был переименован",
|
||||
"%1$s has been created by %2$s" : "%1$s создано %2$s",
|
||||
"You created %1$s" : "Вы создали %1$s",
|
||||
"%1$s has been updated by %2$s" : "%2$s обновил %1$s",
|
||||
"You updated %1$s" : "Вы обновили %1$s",
|
||||
"%2$s has revised %1$s to the revision of %3$s" : "%2$s сменил версию %1$s до версии %3$s",
|
||||
"You reverted %1$s back to the revision of %3$s" : "Вы откатили %1$s до версии %3$s",
|
||||
"%3$s has renamed %1$s to %2$s" : "%3$s переименовал %1$s в %2$s",
|
||||
"You renamed %1$s to %2$s" : "Вы переименовали %1$s в %2$s",
|
||||
"%1$s has been deleted by %2$s" : "%1$s удалено %2$s",
|
||||
"You deleted %1$s" : "Вы удалили %1$s",
|
||||
"%1$s has been recovered by %2$s" : " %2$s восстановил %1$s",
|
||||
"You recovered %1$s" : "Вы восстановили %1$s",
|
||||
"%1$s has been permanently deleted by %2$s" : "%2$s окончательно удалил %1$s",
|
||||
"You permanently deleted %1$s" : "Вы окончательно удалили %1$s",
|
||||
"The password of %1$s has expired, renew it now." : "Срок действия пароль %1$s истек, обновите его сейчас.",
|
||||
"%1$s has been shared with %2$s" : "%1$s поделились с %2$s",
|
||||
"You received a share request for %1$s from %2$s" : "Вы получили запрос на предоставление общего доступа к %1$s от %2$s",
|
||||
"%s has been shared with a link" : "к %s был предоставлен общий доступ ссылкой",
|
||||
"Your credential \"%s\" expired, click here to update the credential." : "Истёк срок действия реквизитов \"%s\", щелкните здесь для обновления реквизитов.",
|
||||
"Remind me later" : "Напомнить позже",
|
||||
"Ignore" : "Пропустить",
|
||||
"%s shared \"%s\" with you. Click here to accept" : "%s предоставил вам доступ к \"%s\". Щёлкните здесь что бы принять.",
|
||||
"%s has declined your share request for \"%s\"." : "%s отклонил ваш запрос на предоставление общего доступа к \"%s\".",
|
||||
"%s has accepted your share request for \"%s\"." : "%s принял ваш запрос на предоставление общего доступа к \"%s\".",
|
||||
"Unable to get version info" : "Невозможно получить информацию о версии",
|
||||
"Passman Settings" : "Настройки Passman",
|
||||
"Github version:" : "Версия github:",
|
||||
"A newer version of passman is available" : "Доступна новая версия passman",
|
||||
"Allow users on this server to share passwords with a link" : "Разрешить пользователям этого сервера делиться паролями посредством ссылки",
|
||||
"Allow users on this server to share passwords with other users" : "Разрешить пользователям этого сервера делиться паролями с другими пользователями",
|
||||
"Check for new versions" : "Проверить наличие новых версий",
|
||||
"Enable HTTPS check" : "Включить проверку HTTPS",
|
||||
"Disable context menu" : "Отключить контекстное меню",
|
||||
"Connection to server lost" : "Подключение к серверу потеряно",
|
||||
"Problem loading page, reloading in 5 seconds" : "Проблема при загрузке страницы, перезагрузка через 5 сек.",
|
||||
"Saving..." : "Сохранение...",
|
||||
"Dismiss" : "Закрыть",
|
||||
"seconds ago" : "несколько секунд назад"
|
||||
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
|
||||
}
|
|
@ -22,12 +22,14 @@
|
|||
*/
|
||||
|
||||
namespace OCA\Passman\AppInfo;
|
||||
|
||||
use OC\Files\View;
|
||||
|
||||
use OCA\Passman\Controller\CredentialController;
|
||||
use OCA\Passman\Controller\PageController;
|
||||
use OCA\Passman\Controller\ShareController;
|
||||
use OCA\Passman\Controller\VaultController;
|
||||
use OCA\Passman\Middleware\ShareMiddleware;
|
||||
use OCA\Passman\Service\ActivityService;
|
||||
use OCA\Passman\Service\CronService;
|
||||
use OCA\Passman\Service\CredentialService;
|
||||
|
@ -36,27 +38,38 @@ use OCA\Passman\Service\FileService;
|
|||
use OCA\Passman\Service\VaultService;
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCA\Passman\Service\NotificationService;
|
||||
Use OCA\Passman\Service\SettingsService;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
|
||||
use OCP\AppFramework\App;
|
||||
use OCP\IL10N;
|
||||
use OCP\Util;
|
||||
|
||||
class Application extends App {
|
||||
public function __construct () {
|
||||
public function __construct() {
|
||||
parent::__construct('passman');
|
||||
$container = $this->getContainer();
|
||||
// Allow automatic DI for the View, until we migrated to Nodes API
|
||||
$container->registerService(View::class, function() {
|
||||
$container->registerService(View::class, function () {
|
||||
return new View('');
|
||||
}, false);
|
||||
$container->registerService('isCLI', function() {
|
||||
$container->registerService('isCLI', function () {
|
||||
return \OC::$CLI;
|
||||
});
|
||||
|
||||
/**
|
||||
* Middleware
|
||||
*/
|
||||
$container->registerService('ShareMiddleware', function ($c) {
|
||||
return new ShareMiddleware($c->query('SettingsService'));
|
||||
});
|
||||
$container->registerMiddleware('ShareMiddleware');
|
||||
|
||||
/**
|
||||
* Controllers
|
||||
*/
|
||||
$container->registerService('ShareController', function($c) {
|
||||
$container->registerService('ShareController', function ($c) {
|
||||
$container = $this->getContainer();
|
||||
$server = $container->getServer();
|
||||
return new ShareController(
|
||||
|
@ -65,17 +78,17 @@ class Application extends App {
|
|||
$server->getUserSession()->getUser(),
|
||||
$server->getGroupManager(),
|
||||
$server->getUserManager(),
|
||||
$c->query('ActivityService'),
|
||||
$c->query('VaultService'),
|
||||
$c->query('ShareService'),
|
||||
$c->query('CredentialService'),
|
||||
$c->query('NotificationService'),
|
||||
$c->query('FileService')
|
||||
$c->query('ActivityService'),
|
||||
$c->query('VaultService'),
|
||||
$c->query('ShareService'),
|
||||
$c->query('CredentialService'),
|
||||
$c->query('NotificationService'),
|
||||
$c->query('FileService'),
|
||||
$c->query('SettingsService')
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
|
||||
/** Cron **/
|
||||
$container->registerService('CronService', function ($c) {
|
||||
return new CronService(
|
||||
|
@ -92,7 +105,7 @@ class Application extends App {
|
|||
return new Db();
|
||||
});
|
||||
|
||||
$container->registerService('Logger', function($c) {
|
||||
$container->registerService('Logger', function ($c) {
|
||||
return $c->query('ServerContainer')->getLogger();
|
||||
});
|
||||
|
||||
|
@ -106,9 +119,11 @@ class Application extends App {
|
|||
$container->registerAlias('ActivityService', ActivityService::class);
|
||||
$container->registerAlias('VaultService', VaultService::class);
|
||||
$container->registerAlias('FileService', FileService::class);
|
||||
$container->registerAlias('ShareService', ShareService::class);
|
||||
$container->registerAlias('ShareService', ShareService::class);
|
||||
$container->registerAlias('Utils', Utils::class);
|
||||
$container->registerAlias('IDBConnection', IDBConnection::class);
|
||||
$container->registerAlias('IConfig', IConfig::class);
|
||||
$container->registerAlias('SettingsService', SettingsService::class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -131,7 +131,9 @@ class CredentialMapper extends Mapper {
|
|||
$credential->setCustomFields($raw_credential['custom_fields']);
|
||||
$credential->setOtp($raw_credential['otp']);
|
||||
$credential->setHidden($raw_credential['hidden']);
|
||||
$credential->setSharedKey($raw_credential['shared_key']);
|
||||
if(isset($raw_credential['shared_key'])) {
|
||||
$credential->setSharedKey($raw_credential['shared_key']);
|
||||
}
|
||||
return parent::insert($credential);
|
||||
}
|
||||
|
||||
|
|
|
@ -60,13 +60,11 @@ class SharingACLMapper extends Mapper {
|
|||
public function getItemACL($user_id, $item_guid) {
|
||||
$q = "SELECT * FROM " . self::TABLE_NAME . " WHERE item_guid = ? AND ";
|
||||
$filter = [$item_guid];
|
||||
if ($user_id === null){
|
||||
$q .= 'user_id is null';
|
||||
}
|
||||
else {
|
||||
$q .= 'user_id = ? ';
|
||||
$filter[] = $user_id;
|
||||
$q .= ($user_id === null) ? 'user_id is null' : 'user_id = ? ';
|
||||
if ($user_id !== null){
|
||||
$filter[] = $user_id;
|
||||
}
|
||||
|
||||
return $this->findEntity($q, $filter);
|
||||
}
|
||||
|
||||
|
|
|
@ -125,9 +125,8 @@ class CredentialService {
|
|||
$acl = $this->sharingACL->getItemACL($user_id, $credential->getGuid());
|
||||
if ($acl->hasPermission(SharingACL::READ)) {
|
||||
return $credential;
|
||||
} else {
|
||||
throw new DoesNotExistException("Did expect one result but found none when executing");
|
||||
}
|
||||
throw new DoesNotExistException("Did expect one result but found none when executing");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -65,10 +65,7 @@ class CronService {
|
|||
'', array(),
|
||||
$link, $credential->getUserId(), Activity::TYPE_ITEM_EXPIRED);
|
||||
$this->notificationService->credentialExpiredNotification($credential);
|
||||
} else {
|
||||
$this->logger->debug($credential->getLabel() .' is expired, already notified!', array('app' => 'passman'));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
118
lib/Service/SettingsService.php
Normal file
118
lib/Service/SettingsService.php
Normal file
|
@ -0,0 +1,118 @@
|
|||
<?php
|
||||
/**
|
||||
* Nextcloud - passman
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Sander Brand (brantje@gmail.com)
|
||||
* @copyright Copyright (c) 2016, Marcos Zuriaga Miguel (wolfi@wolfi.es)
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Passman\Service;
|
||||
|
||||
use OCP\IConfig;
|
||||
|
||||
|
||||
class SettingsService {
|
||||
|
||||
private $userId;
|
||||
private $config;
|
||||
private $appName;
|
||||
public $settings;
|
||||
|
||||
private $numeric_settings = array(
|
||||
'link_sharing_enabled',
|
||||
'user_sharing_enabled',
|
||||
'vault_key_strength',
|
||||
'check_version',
|
||||
'https_check',
|
||||
'disable_contextmenu',
|
||||
'settings_loaded'
|
||||
);
|
||||
|
||||
public function __construct($UserId, IConfig $config, $AppName) {
|
||||
$this->userId = $UserId;
|
||||
$this->config = $config;
|
||||
$this->appName = $AppName;
|
||||
$this->settings = array(
|
||||
'link_sharing_enabled' => intval($this->config->getAppValue('passman', 'link_sharing_enabled', 1)),
|
||||
'user_sharing_enabled' => intval($this->config->getAppValue('passman', 'user_sharing_enabled', 1)),
|
||||
'vault_key_strength' => intval($this->config->getAppValue('passman', 'vault_key_strength', 3)),
|
||||
'check_version' => intval($this->config->getAppValue('passman', 'check_version', 1)),
|
||||
'https_check' => intval($this->config->getAppValue('passman', 'https_check', 1)),
|
||||
'disable_contextmenu' => intval($this->config->getAppValue('passman', 'disable_contextmenu', 1)),
|
||||
'settings_loaded' => 1
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all app settings
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAppSettings() {
|
||||
return $this->settings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a app setting
|
||||
*
|
||||
* @param $key string
|
||||
* @param null $default_value The default value if key does not exist
|
||||
* @return mixed
|
||||
*/
|
||||
public function getAppSetting($key, $default_value = null) {
|
||||
$value = ($this->settings[$key]) ? $this->settings[$key] : $this->config->getAppValue('passman', $key, $default_value);
|
||||
if (in_array($key, $this->numeric_settings)) {
|
||||
$value = intval($value);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a app setting
|
||||
*
|
||||
* @param $key string Setting name
|
||||
* @param $value mixed Value of the setting
|
||||
*/
|
||||
public function setAppSetting($key, $value) {
|
||||
$this->settings[$key] = $value;
|
||||
$this->config->setAppValue('passman', $key, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a user setting
|
||||
*
|
||||
* @param $key string Setting name
|
||||
* @param $value mixed Value of the setting
|
||||
*/
|
||||
|
||||
public function setUserSetting($key, $value) {
|
||||
return $this->config->setUserValue($this->userId, $this->appName, $key, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an setting is enabled (value of 1)
|
||||
*
|
||||
* @param $setting
|
||||
* @return bool
|
||||
*/
|
||||
public function isEnabled($setting) {
|
||||
$value = intval($this->getAppSetting($setting, false));
|
||||
return ($value === 1);
|
||||
}
|
||||
}
|
45
middleware/sharemiddleware.php
Normal file
45
middleware/sharemiddleware.php
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace OCA\Passman\Middleware;
|
||||
|
||||
use OCA\Passman\Controller\ShareController;
|
||||
use OCA\Passman\Service\SettingsService;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use \OCP\AppFramework\Middleware;
|
||||
use OCP\AppFramework\Http;
|
||||
|
||||
class ShareMiddleware extends Middleware {
|
||||
|
||||
private $settings;
|
||||
|
||||
public function __construct(SettingsService $config) {
|
||||
$this->settings = $config;
|
||||
}
|
||||
|
||||
|
||||
public function beforeController($controller, $methodName) {
|
||||
if ($controller instanceof ShareController) {
|
||||
$http_response_code = Http::STATUS_OK;
|
||||
$result = array();
|
||||
$publicMethods = array('createPublicShare', 'getPublicCredentialData');
|
||||
$user_pub_methods = array('updateSharedCredentialACL', 'getFile', 'getItemAcl');
|
||||
$setting = (in_array($methodName, $publicMethods)) ? 'link_sharing_enabled' : 'user_sharing_enabled';
|
||||
$sharing_enabled = ($this->settings->isEnabled($setting));
|
||||
|
||||
if(in_array($methodName, $user_pub_methods)){
|
||||
$sharing_enabled = ($this->settings->isEnabled('link_sharing_enabled') || $this->settings->isEnabled('user_sharing_enabled'));
|
||||
}
|
||||
|
||||
|
||||
if (!$sharing_enabled) {
|
||||
$response = new JSONResponse($result);
|
||||
http_response_code($http_response_code);
|
||||
header('Passman-sharing: disabled');
|
||||
header('Passman-method: ShareController.' . $methodName);
|
||||
die($response->render());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
4
templates/admin.settings.php
Normal file
4
templates/admin.settings.php
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?php
|
||||
namespace OCA\Passman;
|
||||
$tmpl = new \OCP\Template('passman', 'part.admin');
|
||||
return $tmpl->fetchPage();
|
103
templates/part.admin.php
Normal file
103
templates/part.admin.php
Normal file
|
@ -0,0 +1,103 @@
|
|||
<?php
|
||||
/** @var \OCP\IL10N $l */
|
||||
/** @var array $_ */
|
||||
use \OCP\App;
|
||||
|
||||
script('passman', 'settings-admin');
|
||||
|
||||
$checkVersion = OC::$server->getConfig()->getAppValue('passman', 'check_version', '1') === '1';
|
||||
$AppInstance = new App();
|
||||
$localVersion = $AppInstance->getAppInfo("passman")["version"];
|
||||
if ($checkVersion) {
|
||||
// get latest master version
|
||||
$doc = new DOMDocument();
|
||||
$doc->load('https://raw.githubusercontent.com/nextcloud/passman/master/appinfo/info.xml');
|
||||
$root = $doc->getElementsByTagName("info");
|
||||
$version = false;
|
||||
$githubVersion = $l->t('Unable to get version info');
|
||||
foreach ($root as $element) {
|
||||
$versions = $element->getElementsByTagName("version");
|
||||
$version = $versions->item(0)->nodeValue;
|
||||
}
|
||||
if ($version) {
|
||||
$githubVersion = $version;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div id="passwordSharingSettings" class="followup section">
|
||||
<form name="passman_settings">
|
||||
<h2><?php p($l->t('Passman Settings')); ?></h2>
|
||||
<?php
|
||||
if ($checkVersion) {
|
||||
p($l->t('Github version:'). ' '. $githubVersion);
|
||||
print '<br />';
|
||||
} ?>
|
||||
Local version: <?php p($localVersion); ?><br/>
|
||||
<?php
|
||||
if (version_compare($githubVersion, $localVersion) === 1) {
|
||||
p($l->t('A newer version of passman is available'));
|
||||
}
|
||||
?>
|
||||
<h3><?php p($l->t('Sharing')); ?></h3>
|
||||
<p>
|
||||
<input type="checkbox" name="passman_link_sharing_enabled"
|
||||
id="passman_link_sharing_enabled" class="checkbox"
|
||||
value="1"/>
|
||||
<label for="passman_link_sharing_enabled">
|
||||
<?php p($l->t('Allow users on this server to share passwords with a link')); ?>
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<input type="checkbox" name="passman_sharing_enabled"
|
||||
id="passman_sharing_enabled" class="checkbox"
|
||||
value="1" />
|
||||
<label for="passman_sharing_enabled">
|
||||
<?php p($l->t('Allow users on this server to share passwords with other users')); ?>
|
||||
</label>
|
||||
</p>
|
||||
<h3><?php p($l->t('General')); ?></h3>
|
||||
<p>
|
||||
<input type="checkbox" name="check_version"
|
||||
id="passman_check_version" class="checkbox"
|
||||
value="0"/>
|
||||
<label for="passman_check_version">
|
||||
<?php p($l->t('Check for new versions')); ?>
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" name="https_check"
|
||||
id="passman_https_check" class="checkbox"
|
||||
value="0"/>
|
||||
<label for="passman_https_check">
|
||||
<?php p($l->t('Enable HTTPS check')); ?>
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" name="disable_contextmenu"
|
||||
id="passman_disable_contextmenu" class="checkbox"
|
||||
value="0"/>
|
||||
<label for="passman_disable_contextmenu">
|
||||
<?php p($l->t('Disable context menu')); ?>
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<label for="vault_key_strength">Minimum vault key strength:</label>
|
||||
<select name="vault_key_strength" id="vault_key_strength">
|
||||
<option value="0">
|
||||
Poor
|
||||
</option>
|
||||
<option value="2">
|
||||
Weak
|
||||
</option>
|
||||
<option value="3">
|
||||
Good
|
||||
</option>
|
||||
<option value="4">
|
||||
Strong
|
||||
</option>
|
||||
</select>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
Loading…
Add table
Reference in a new issue