Merge branch 'nc27'

Signed-off-by: binsky <timo@binsky.org>
This commit is contained in:
binsky 2023-06-25 17:53:23 +02:00
commit 727a07d5f3
No known key found for this signature in database
GPG key ID: B438F7FA2E3AC98F
32 changed files with 168 additions and 219 deletions

View file

@ -1,14 +0,0 @@
<?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\AppInfo;

View file

@ -37,12 +37,12 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
<screenshot small-thumbnail="https://img.passman.cc/thumbs/share_credential.png">https://img.passman.cc/share_credential.png</screenshot>
<screenshot small-thumbnail="https://img.passman.cc/thumbs/password_audit.png">https://img.passman.cc/password_audit.png</screenshot>
<dependencies>
<php min-version="7.4"/>
<php min-version="8.0"/>
<database>sqlite</database>
<database>pgsql</database>
<database min-version="5.5">mysql</database>
<lib>openssl</lib>
<nextcloud min-version="20" max-version="26"/>
<nextcloud min-version="26" max-version="27"/>
</dependencies>
<background-jobs>
@ -55,6 +55,14 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
</post-migration>
</repair-steps>
<navigations>
<navigation>
<name>Passwords</name>
<route>passman.Page.index</route>
<order>10</order>
</navigation>
</navigations>
<settings>
<admin>OCA\Passman\Settings\Admin</admin>
</settings>

View file

@ -19,88 +19,88 @@
*/
return [
'routes' => [
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'page#bookmarklet', 'url' => '/bookmarklet', 'verb' => 'GET'],
['name' => 'page#publicSharePage', 'url' => '/share/public', 'verb' => 'GET'],
['name' => 'Page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'Page#bookmarklet', 'url' => '/bookmarklet', 'verb' => 'GET'],
['name' => 'Page#publicSharePage', 'url' => '/share/public', 'verb' => 'GET'],
//Vault
['name' => 'vault#listVaults', 'url' => '/api/v2/vaults', 'verb' => 'GET'],
['name' => 'vault#create', 'url' => '/api/v2/vaults', 'verb' => 'POST'],
['name' => 'vault#get', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'GET'],
['name' => 'vault#update', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'PATCH'],
['name' => 'vault#delete', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'DELETE'],
['name' => 'Vault#listVaults', 'url' => '/api/v2/vaults', 'verb' => 'GET'],
['name' => 'Vault#create', 'url' => '/api/v2/vaults', 'verb' => 'POST'],
['name' => 'Vault#get', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'GET'],
['name' => 'Vault#update', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'PATCH'],
['name' => 'Vault#delete', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'DELETE'],
//@TODO make frontend use PATCH
['name' => 'vault#updateSharingKeys', 'url' => '/api/v2/vaults/{vault_guid}/sharing-keys', 'verb' => 'POST'],
['name' => 'Vault#updateSharingKeys', 'url' => '/api/v2/vaults/{vault_guid}/sharing-keys', 'verb' => 'POST'],
//Credential
['name' => 'credential#createCredential', 'url' => '/api/v2/credentials', 'verb' => 'POST'],
['name' => 'credential#getCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'GET'],
['name' => 'credential#updateCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'PATCH'],
['name' => 'credential#deleteCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'DELETE'],
['name' => 'Credential#createCredential', 'url' => '/api/v2/credentials', 'verb' => 'POST'],
['name' => 'Credential#getCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'GET'],
['name' => 'Credential#updateCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'PATCH'],
['name' => 'Credential#deleteCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'DELETE'],
//Revisions
['name' => 'credential#getRevision', 'url' => '/api/v2/credentials/{credential_guid}/revision', 'verb' => 'GET'],
['name' => 'credential#deleteRevision', 'url' => '/api/v2/credentials/{credential_guid}/revision/{revision_id}', 'verb' => 'DELETE'],
['name' => 'credential#updateRevision', 'url' => '/api/v2/credentials/{credential_guid}/revision/{revision_id}', 'verb' => 'PATCH'],
['name' => 'Credential#getRevision', 'url' => '/api/v2/credentials/{credential_guid}/revision', 'verb' => 'GET'],
['name' => 'Credential#deleteRevision', 'url' => '/api/v2/credentials/{credential_guid}/revision/{revision_id}', 'verb' => 'DELETE'],
['name' => 'Credential#updateRevision', 'url' => '/api/v2/credentials/{credential_guid}/revision/{revision_id}', 'verb' => 'PATCH'],
//File stuff
['name' => 'file#uploadFile', 'url' => '/api/v2/file', 'verb' => 'POST'],
['name' => 'file#getFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'GET'],
['name' => 'file#deleteFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'DELETE'],
['name' => 'file#deleteFiles', 'url' => '/api/v2/files/delete', 'verb' => 'POST'],
['name' => 'file#updateFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'PATCH'],
['name' => 'File#uploadFile', 'url' => '/api/v2/file', 'verb' => 'POST'],
['name' => 'File#getFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'GET'],
['name' => 'File#deleteFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'DELETE'],
['name' => 'File#deleteFiles', 'url' => '/api/v2/files/delete', 'verb' => 'POST'],
['name' => 'File#updateFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'PATCH'],
//Sharing stuff
['name' => 'share#search', 'url' => '/api/v2/sharing/search', 'verb' => 'POST'],
['name' => 'share#getVaultsByUser', 'url' => '/api/v2/sharing/vaults/{user_id}', 'verb' => 'GET'],
['name' => 'share#applyIntermediateShare', 'url' => '/api/v2/sharing/share', 'verb' => 'POST'],
['name' => 'share#savePendingRequest', 'url' => '/api/v2/sharing/save', 'verb' => 'POST'],
['name' => 'share#getPendingRequests', 'url' => '/api/v2/sharing/pending', 'verb' => 'GET'],
['name' => 'share#deleteShareRequest', 'url' => '/api/v2/sharing/decline/{share_request_id}', 'verb' => 'DELETE'],
['name' => 'share#getVaultItems', 'url' => '/api/v2/sharing/vault/{vault_guid}/get', 'verb' => 'GET'],
['name' => 'share#getVaultAclEntries', 'url' => '/api/v2/sharing/vault/{vault_guid}/acl', 'verb' => 'GET'],
['name' => 'share#createPublicShare', 'url' => '/api/v2/sharing/public', 'verb' => 'POST'],
['name' => 'share#getPublicCredentialData', 'url' => '/api/v2/sharing/credential/{credential_guid}/public', 'verb' => 'GET'],
['name' => 'share#unshareCredential', 'url' => '/api/v2/sharing/credential/{item_guid}', 'verb' => 'DELETE'],
['name' => 'share#unshareCredentialFromUser', 'url' => '/api/v2/sharing/credential/{item_guid}/{user_id}', 'verb' => 'DELETE'],
['name' => 'share#getRevisions', 'url' => '/api/v2/sharing/credential/{item_guid}/revisions', 'verb' => 'GET'],
['name' => 'share#getItemAcl', 'url' => '/api/v2/sharing/credential/{item_guid}/acl', 'verb' => 'GET'],
['name' => 'share#uploadFile', 'url' => '/api/v2/sharing/credential/{item_guid}/file', 'verb' => 'POST'],
['name' => 'share#getFile', 'url' => '/api/v2/sharing/credential/{item_guid}/file/{file_guid}', 'verb' => 'GET'],
['name' => 'share#updateSharedCredentialACL', 'url' => '/api/v2/sharing/credential/{item_guid}/acl', 'verb' => 'PATCH'],
['name' => 'share#updateSharedCredentialACLSharedKey', 'url' => '/api/v2/sharing/credential/{item_guid}/acl/shared_key', 'verb' => 'PATCH'],
['name' => 'internal#getAppVersion', 'url' => '/api/v2/version', 'verb' => 'GET'],
['name' => 'Share#search', 'url' => '/api/v2/sharing/search', 'verb' => 'POST'],
['name' => 'Share#getVaultsByUser', 'url' => '/api/v2/sharing/vaults/{user_id}', 'verb' => 'GET'],
['name' => 'Share#applyIntermediateShare', 'url' => '/api/v2/sharing/share', 'verb' => 'POST'],
['name' => 'Share#savePendingRequest', 'url' => '/api/v2/sharing/save', 'verb' => 'POST'],
['name' => 'Share#getPendingRequests', 'url' => '/api/v2/sharing/pending', 'verb' => 'GET'],
['name' => 'Share#deleteShareRequest', 'url' => '/api/v2/sharing/decline/{share_request_id}', 'verb' => 'DELETE'],
['name' => 'Share#getVaultItems', 'url' => '/api/v2/sharing/vault/{vault_guid}/get', 'verb' => 'GET'],
['name' => 'Share#getVaultAclEntries', 'url' => '/api/v2/sharing/vault/{vault_guid}/acl', 'verb' => 'GET'],
['name' => 'Share#createPublicShare', 'url' => '/api/v2/sharing/public', 'verb' => 'POST'],
['name' => 'Share#getPublicCredentialData', 'url' => '/api/v2/sharing/credential/{credential_guid}/public', 'verb' => 'GET'],
['name' => 'Share#unshareCredential', 'url' => '/api/v2/sharing/credential/{item_guid}', 'verb' => 'DELETE'],
['name' => 'Share#unshareCredentialFromUser', 'url' => '/api/v2/sharing/credential/{item_guid}/{user_id}', 'verb' => 'DELETE'],
['name' => 'Share#getRevisions', 'url' => '/api/v2/sharing/credential/{item_guid}/revisions', 'verb' => 'GET'],
['name' => 'Share#getItemAcl', 'url' => '/api/v2/sharing/credential/{item_guid}/acl', 'verb' => 'GET'],
['name' => 'Share#uploadFile', 'url' => '/api/v2/sharing/credential/{item_guid}/file', 'verb' => 'POST'],
['name' => 'Share#getFile', 'url' => '/api/v2/sharing/credential/{item_guid}/file/{file_guid}', 'verb' => 'GET'],
['name' => 'Share#updateSharedCredentialACL', 'url' => '/api/v2/sharing/credential/{item_guid}/acl', 'verb' => 'PATCH'],
['name' => 'Share#updateSharedCredentialACLSharedKey', 'url' => '/api/v2/sharing/credential/{item_guid}/acl/shared_key', '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'],
['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'],
['name' => 'Translation#getLanguageStrings', 'url' => '/api/v2/language', 'verb' => 'GET'],
#Icons
['name' => 'icon#getSingleIcon', 'url' => '/api/v2/geticon/{base64Url}', 'verb' => 'GET'],
['name' => 'icon#getIcon', 'url' => '/api/v2/icon/{base64Url}', 'verb' => 'GET'],
['name' => 'icon#getIcon', 'url' => '/api/v2/icon/{base64Url}/{credentialId}', 'verb' => 'GET'],
['name' => 'icon#getLocalIconList', 'url' => '/api/v2/icon/list', 'verb' => 'GET'],
['name' => 'Icon#getSingleIcon', 'url' => '/api/v2/geticon/{base64Url}', 'verb' => 'GET'],
['name' => 'Icon#getIcon', 'url' => '/api/v2/icon/{base64Url}', 'verb' => 'GET'],
['name' => 'Icon#getIcon', 'url' => '/api/v2/icon/{base64Url}/{credentialId}', 'verb' => 'GET'],
['name' => 'Icon#getLocalIconList', 'url' => '/api/v2/icon/list', 'verb' => 'GET'],
//
['name' => 'vault#preflighted_cors', 'url' => '/api/v2/{path}', 'verb' => 'OPTIONS', 'requirements' => array('path' => '.+')],
['name' => 'Vault#preflighted_cors', 'url' => '/api/v2/{path}', 'verb' => 'OPTIONS', 'requirements' => array('path' => '.+')],
//Internal API
['name' => 'internal#remind', 'url' => '/api/internal/notifications/remind/{credential_id}', 'verb' => 'POST'],
['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'],
['name' => 'Internal#remind', 'url' => '/api/internal/notifications/remind/{credential_id}', 'verb' => 'POST'],
['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'],
//Admin routes
['name' => 'admin#searchUser', 'url' => '/admin/search', 'verb' => 'GET'],
['name' => 'admin#moveCredentials', 'url' => '/admin/move', 'verb' => 'POST'],
['name' => 'admin#requestDeletion', 'url' => '/admin/request-deletion/{vault_guid}', 'verb' => 'POST'],
['name' => 'admin#deleteRequestDeletion', 'url' => '/admin/request-deletion/{vault_guid}', 'verb' => 'DELETE'],
['name' => 'admin#listRequests', 'url' => '/admin/delete-requests', 'verb' => 'GET'],
['name' => 'admin#acceptRequestDeletion', 'url' => '/admin/accept-delete-request', 'verb' => 'POST'],
['name' => 'Admin#searchUser', 'url' => '/admin/search', 'verb' => 'GET'],
['name' => 'Admin#moveCredentials', 'url' => '/admin/move', 'verb' => 'POST'],
['name' => 'Admin#requestDeletion', 'url' => '/admin/request-deletion/{vault_guid}', 'verb' => 'POST'],
['name' => 'Admin#deleteRequestDeletion', 'url' => '/admin/request-deletion/{vault_guid}', 'verb' => 'DELETE'],
['name' => 'Admin#listRequests', 'url' => '/admin/delete-requests', 'verb' => 'GET'],
['name' => 'Admin#acceptRequestDeletion', 'url' => '/admin/accept-delete-request', 'verb' => 'POST'],
]
];

File diff suppressed because one or more lines are too long

View file

@ -46,9 +46,6 @@ use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\IDBConnection;
use OCP\IGroupManager;
use OCP\IL10N;
use OCP\INavigationManager;
use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\Notification\IManager;
@ -127,32 +124,9 @@ class Application extends App implements IBootstrap {
public function boot(IBootContext $context): void {
/** @var IManager $manager */
$manager = $context->getAppContainer()->get(IManager::class);
$manager = $context->getAppContainer()->query(IManager::class);
$manager->registerNotifierService(Notifier::class);
Util::addTranslations(self::APP_ID);
$this->registerNavigationEntry();
}
/**
* Register the navigation entry
*/
public function registerNavigationEntry() {
$c = $this->getContainer();
/** @var INavigationManager $navigationManager */
$navigationManager = $c->get(INavigationManager::class);
$navigationEntry = function () use ($c) {
/** @var IURLGenerator $urlGenerator */
$urlGenerator = $c->get(IURLGenerator::class);
return [
'id' => $c->getAppName(),
'order' => 10,
'name' => $c->get(IL10N::class)->t('Passwords'),
'href' => $urlGenerator->linkToRoute('passman.page.index'),
'icon' => $urlGenerator->imagePath($c->getAppName(), 'app.svg'),
];
};
$navigationManager->add($navigationEntry);
}
}

View file

@ -23,8 +23,9 @@
namespace OCA\Passman\BackgroundJob;
use OC\BackgroundJob\TimedJob;
use OCA\Passman\Service\CronService;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\TimedJob;
use OCP\IConfig;
/**
@ -34,22 +35,21 @@ use OCP\IConfig;
*/
class ExpireCredentials extends TimedJob {
protected IConfig $config;
private CronService $cronService;
/**
* ExpireCredentials constructor.
*
* @param ITimeFactory $timeFactory
* @param IConfig $config
* @param CronService $cronService
*/
public function __construct(IConfig $config, CronService $cronService) {
public function __construct(ITimeFactory $timeFactory, protected IConfig $config, private CronService $cronService) {
parent::__construct($timeFactory);
// Run once per minute
$this->setInterval(60);
$this->config = $config;
$this->cronService = $cronService;
}
protected function run($argument) {
protected function run($argument): void {
$this->cronService->expireCredentials();
}
}

View file

@ -15,15 +15,15 @@ use OCA\Passman\Db\Credential;
use OCA\Passman\Db\CredentialRevision;
use OCA\Passman\Db\DeleteVaultRequest;
use OCA\Passman\Service\CredentialRevisionService;
use OCA\Passman\Service\CredentialService;
use OCA\Passman\Service\DeleteVaultRequestService;
use OCA\Passman\Service\FileService;
use OCA\Passman\Service\VaultService;
use OCA\Passman\Utility\Utils;
use OCP\AppFramework\ApiController;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IConfig;
use OCP\IRequest;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\ApiController;
use OCA\Passman\Service\CredentialService;
use OCP\IUserManager;

View file

@ -13,7 +13,6 @@ namespace OCA\Passman\Controller;
use OCA\Passman\Service\FileService;
use OCP\AppFramework\ApiController;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;
use Psr\Log\LoggerInterface;

View file

@ -11,19 +11,16 @@
namespace OCA\Passman\Controller;
use OCP\IRequest;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http\DataResponse;
use OCA\Passman\AppInfo\Application;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IRequest;
use OCP\Util;
class PageController extends Controller {
private $userId;
public function __construct($AppName, IRequest $request, $UserId){
parent::__construct($AppName, $request);
$this->userId = $UserId;
public function __construct(IRequest $request) {
parent::__construct(Application::APP_ID, $request);
}
/**
@ -37,8 +34,7 @@ class PageController extends Controller {
* @NoCSRFRequired
*/
public function index() {
$params = ['user' => $this->userId];
return new TemplateResponse('passman', 'main', $params); // templates/main.php
return new TemplateResponse($this->appName, 'main'); // templates/main.php
}
@ -48,7 +44,7 @@ class PageController extends Controller {
*/
public function bookmarklet($url='', $title='') {
$params = array('url' => $url, 'title' => $title);
return new TemplateResponse('passman', 'bookmarklet', $params);
return new TemplateResponse($this->appName, 'bookmarklet', $params);
}
/**
@ -57,7 +53,7 @@ class PageController extends Controller {
* @PublicPage
*/
public function publicSharePage() {
return new TemplateResponse('passman', 'public_share');
return new TemplateResponse($this->appName, 'public_share');
}
}

View file

@ -11,13 +11,12 @@
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;
use OCP\AppFramework\ApiController;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IL10N;
use OCP\IRequest;
class SettingsController extends ApiController {
private $userId;

View file

@ -11,10 +11,10 @@
namespace OCA\Passman\Controller;
use OCP\IRequest;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\ApiController;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IL10N;
use OCP\IRequest;
class TranslationController extends ApiController {
private $trans;

View file

@ -19,7 +19,6 @@ use OCA\Passman\Service\SettingsService;
use OCA\Passman\Service\VaultService;
use OCA\Passman\Utility\NotFoundJSONResponse;
use OCP\AppFramework\ApiController;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;
use Psr\Log\LoggerInterface;

View file

@ -4,7 +4,7 @@ namespace OCA\Passman\Middleware;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\Response;
use \OCP\AppFramework\Middleware;
use OCP\AppFramework\Middleware;
use OCP\IRequest;
class APIMiddleware extends Middleware {
@ -19,6 +19,8 @@ class APIMiddleware extends Middleware {
if($response instanceof JSONResponse){
if(isset($this->request->server['HTTP_ORIGIN'])) {
$response->addHeader('Access-Control-Allow-Origin', $this->request->server['HTTP_ORIGIN']);
} else {
$response->addHeader('Access-Control-Allow-Origin', '*');
}
}
return parent::afterController($controller, $methodName, $response);

View file

@ -4,9 +4,9 @@ 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;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Middleware;
class ShareMiddleware extends Middleware {

View file

@ -90,7 +90,7 @@ class Provider implements IProvider {
$this->urlGenerator->imagePath(Application::APP_ID, 'app.svg'),
$Credential->getLabel(),
\sprintf("Part of Passman vault %s", $Vault->getName()),
$this->urlGenerator->linkToRoute('passman.page.index') . "#/vault/" . $Vault->getGuid() . "?show=" . $Credential->getGuid()
$this->urlGenerator->linkToRoute('passman.Page.index') . "#/vault/" . $Vault->getGuid() . "?show=" . $Credential->getGuid()
);
} catch (\Exception $e) {
}

View file

@ -1,4 +1,5 @@
<?php
/*
* Javascripts
*/
@ -104,7 +105,6 @@ script('passman', 'exporters/exporter-csv');
script('passman', 'exporters/exporter-json');
/*build-js-end*/
/*
* Styles
*/

View file

@ -1,18 +1,18 @@
<div class="main_list credential-revisions" off-click-filter="'.download-js-link, .sidebar-shown, #app-sidebar'">
<div id="passman-controls">
<div class="actions creatable">
<div class="breadcrumb">
<div class="crumb svg crumbhome">
<ul class="breadcrumb">
<li class="crumb svg crumbhome">
<a ng-click="logout()" class="icon-home">Home</a>
<span style="display: none;"></span>
</div>
<div class="crumb svg">
</li>
<li class="crumb svg">
<a ng-click="cancelRevision()">{{active_vault.name}}</a>
</div>
<div class="crumb svg last">
</li>
<li class="crumb svg last">
<a ng-if="storedCredential.credential_id">{{ 'showing.revisions' | translate}} "{{storedCredential.label}}"</a>
</div>
</div>
</li>
</ul>
</div>
</div>
<table class="credential-table" ng-init="menuOpen = false;">

View file

@ -1,19 +1,19 @@
<div id="passman-controls">
<div class="breadcrumb">
<div class="breadcrumb">
<div class="crumb svg crumbhome">
<ul class="breadcrumb">
<li class="crumb svg crumbhome">
<a ng-click="logout()" class="icon-home">Home</a>
<span style="display: none;"></span>
</div>
<div class="crumb svg" data-dir="/Test">
</li>
<li class="crumb svg" data-dir="/Test">
<a ng-click="cancel()">{{ active_vault.name }}</a>
</div>
<div class="crumb svg last" data-dir="/Test">
</li>
<li class="crumb svg last" data-dir="/Test">
<a ng-if="storedCredential.credential_id">{{ 'edit.credential' | translate }}
"{{ storedCredential.label }}"</a>
<a ng-if="!storedCredential.credential_id">{{ 'create.credential' | translate }}</a>
</div>
</div>
</li>
</ul>
</div>
</div>

View file

@ -1,17 +1,17 @@
<div id="passman-controls">
<div class="breadcrumb">
<div class="breadcrumb">
<div class="crumb svg crumbhome">
<ul class="breadcrumb">
<li class="crumb svg crumbhome">
<a ng-click="logout()" class="icon-home">Home</a>
<span style="display: none;"></span>
</div>
<div class="crumb svg">
</li>
<li class="crumb svg">
<a ng-click="cancel()">{{ active_vault.name }}</a>
</div>
<div class="crumb svg last">
</li>
<li class="crumb svg last">
<a>{{ 'settings' | translate }}</a>
</div>
</div>
</li>
</ul>
</div>
</div>

View file

@ -1,19 +1,19 @@
<div id="passman-controls">
<div class="actions creatable">
<div class="breadcrumb">
<div class="crumb svg crumbhome">
<ul class="breadcrumb">
<li class="crumb svg crumbhome">
<a ng-click="logout()" class="icon-home">Home</a>
<span style="display: none;"></span>
</div>
<div class="crumb svg" data-dir="/Test">
</li>
<li class="crumb svg" data-dir="/Test">
<a ng-click="cancel()">{{ active_vault.name }}</a>
</div>
<div class="crumb svg last" data-dir="/Test">
</li>
<li class="crumb svg last" data-dir="/Test">
<a ng-if="storedCredential.credential_id">
{{ 'share.credential' | translate }} {{ storedCredential.label }}
</a>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class="app-sidebar-tabs">

View file

@ -1,15 +1,15 @@
<div class="main_list" off-click-filter="'.download-js-link, .sidebar-shown, #app-sidebar'">
<div id="passman-controls" ng-class="{ 'sidebar-shown': selectedCredential }">
<div class="breadcrumb">
<div class="breadcrumb">
<div class="crumb svg crumbhome">
<ul class="breadcrumb">
<li class="crumb svg crumbhome">
<a ng-click="logout()" class="icon-home">Home</a>
<span style="display: none;"></span>
</div>
<div class="crumb svg" ng-click="clearState()">
</li>
<li class="crumb svg" ng-click="clearState()">
<a>{{active_vault.name}}</a>
</div>
</div>
</li>
</ul>
<div class="addCredential" ng-hide="delete_time>0">
<button ng-click="addCredential()"><i class="fa fa-plus"></i></button>
</div>

View file

@ -23,19 +23,9 @@
namespace OCA\Passman\Controller;
use OCA\Comments\Activity\Setting;
use OCA\Passman\Service\ActivityService;
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\Service\VaultService;
use OCP\IGroupManager;
use OCP\IUserManager;
use PHPUnit_Framework_TestCase;
use OCP\AppFramework\Http\JSONResponse;
use PHPUnit_Framework_TestCase;
/**
* Class FileControllerTest

View file

@ -23,9 +23,8 @@
namespace OCA\Passman\Controller;
use PHPUnit_Framework_TestCase;
use OCP\AppFramework\Http\JSONResponse;
use PHPUnit_Framework_TestCase;
/**
* Class InternalControllerTest

View file

@ -23,9 +23,8 @@
namespace OCA\Passman\Controller;
use PHPUnit_Framework_TestCase;
use OCP\AppFramework\Http\TemplateResponse;
use PHPUnit_Framework_TestCase;
/**
* Class PageControllerTest

View file

@ -23,11 +23,10 @@
namespace OCA\Passman\Controller;
use OCA\Passman\Service\SettingsService;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use PHPUnit_Framework_TestCase;
use OCA\Passman\Service\SettingsService;
/**
* Class SettingsControllerTest

View file

@ -27,9 +27,8 @@ use OCA\Passman\Service\CredentialService;
use OCA\Passman\Service\DeleteVaultRequestService;
use OCA\Passman\Service\SettingsService;
use OCA\Passman\Service\VaultService;
use PHPUnit_Framework_TestCase;
use OCP\AppFramework\Http\JSONResponse;
use PHPUnit_Framework_TestCase;
/**
* Class VaultControllerTest