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:
Passman Bot 2017-01-06 19:42:58 +01:00
parent aa79cde63a
commit dfaac9d34c
No known key found for this signature in database
GPG key ID: C6235D00F39C0CFE
41 changed files with 1418 additions and 189 deletions

View file

@ -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
View 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/).

View file

@ -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.

View file

@ -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');

View file

@ -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>

View file

@ -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'],
]
];

View file

@ -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();
}

View file

@ -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){

View 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);
}
}

View 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');
}
}

View file

@ -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) {
}

View file

@ -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);
}
}
}

View file

@ -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

File diff suppressed because one or more lines are too long

View file

@ -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

File diff suppressed because one or more lines are too long

View file

@ -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…",

View file

@ -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…",

View file

@ -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...",

View file

@ -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...",

View file

@ -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",

View file

@ -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",

View file

@ -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…",

View file

@ -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…",

View file

@ -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...",

View file

@ -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...",

View file

@ -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...",

View file

@ -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...",

View file

@ -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...",

View file

@ -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
View 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
View 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);"
}

View file

@ -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);
}
/**

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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");
}
}

View file

@ -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'));
}
}
}
}

View 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);
}
}

View 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());
}
}
}
}

View 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
View 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>