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

View file

@ -19,88 +19,88 @@
*/ */
return [ return [
'routes' => [ 'routes' => [
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], ['name' => 'Page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'page#bookmarklet', 'url' => '/bookmarklet', 'verb' => 'GET'], ['name' => 'Page#bookmarklet', 'url' => '/bookmarklet', 'verb' => 'GET'],
['name' => 'page#publicSharePage', 'url' => '/share/public', 'verb' => 'GET'], ['name' => 'Page#publicSharePage', 'url' => '/share/public', 'verb' => 'GET'],
//Vault //Vault
['name' => 'vault#listVaults', 'url' => '/api/v2/vaults', 'verb' => 'GET'], ['name' => 'Vault#listVaults', 'url' => '/api/v2/vaults', 'verb' => 'GET'],
['name' => 'vault#create', 'url' => '/api/v2/vaults', 'verb' => 'POST'], ['name' => 'Vault#create', 'url' => '/api/v2/vaults', 'verb' => 'POST'],
['name' => 'vault#get', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'GET'], ['name' => 'Vault#get', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'GET'],
['name' => 'vault#update', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'PATCH'], ['name' => 'Vault#update', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'PATCH'],
['name' => 'vault#delete', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'DELETE'], ['name' => 'Vault#delete', 'url' => '/api/v2/vaults/{vault_guid}', 'verb' => 'DELETE'],
//@TODO make frontend use PATCH //@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 //Credential
['name' => 'credential#createCredential', 'url' => '/api/v2/credentials', 'verb' => 'POST'], ['name' => 'Credential#createCredential', 'url' => '/api/v2/credentials', 'verb' => 'POST'],
['name' => 'credential#getCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'GET'], ['name' => 'Credential#getCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'GET'],
['name' => 'credential#updateCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'PATCH'], ['name' => 'Credential#updateCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'PATCH'],
['name' => 'credential#deleteCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'DELETE'], ['name' => 'Credential#deleteCredential', 'url' => '/api/v2/credentials/{credential_guid}', 'verb' => 'DELETE'],
//Revisions //Revisions
['name' => 'credential#getRevision', 'url' => '/api/v2/credentials/{credential_guid}/revision', 'verb' => 'GET'], ['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#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#updateRevision', 'url' => '/api/v2/credentials/{credential_guid}/revision/{revision_id}', 'verb' => 'PATCH'],
//File stuff //File stuff
['name' => 'file#uploadFile', 'url' => '/api/v2/file', 'verb' => 'POST'], ['name' => 'File#uploadFile', 'url' => '/api/v2/file', 'verb' => 'POST'],
['name' => 'file#getFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'GET'], ['name' => 'File#getFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'GET'],
['name' => 'file#deleteFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'DELETE'], ['name' => 'File#deleteFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'DELETE'],
['name' => 'file#deleteFiles', 'url' => '/api/v2/files/delete', 'verb' => 'POST'], ['name' => 'File#deleteFiles', 'url' => '/api/v2/files/delete', 'verb' => 'POST'],
['name' => 'file#updateFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'PATCH'], ['name' => 'File#updateFile', 'url' => '/api/v2/file/{file_id}', 'verb' => 'PATCH'],
//Sharing stuff //Sharing stuff
['name' => 'share#search', 'url' => '/api/v2/sharing/search', 'verb' => 'POST'], ['name' => 'Share#search', 'url' => '/api/v2/sharing/search', 'verb' => 'POST'],
['name' => 'share#getVaultsByUser', 'url' => '/api/v2/sharing/vaults/{user_id}', 'verb' => 'GET'], ['name' => 'Share#getVaultsByUser', 'url' => '/api/v2/sharing/vaults/{user_id}', 'verb' => 'GET'],
['name' => 'share#applyIntermediateShare', 'url' => '/api/v2/sharing/share', 'verb' => 'POST'], ['name' => 'Share#applyIntermediateShare', 'url' => '/api/v2/sharing/share', 'verb' => 'POST'],
['name' => 'share#savePendingRequest', 'url' => '/api/v2/sharing/save', 'verb' => 'POST'], ['name' => 'Share#savePendingRequest', 'url' => '/api/v2/sharing/save', 'verb' => 'POST'],
['name' => 'share#getPendingRequests', 'url' => '/api/v2/sharing/pending', 'verb' => 'GET'], ['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#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#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#getVaultAclEntries', 'url' => '/api/v2/sharing/vault/{vault_guid}/acl', 'verb' => 'GET'],
['name' => 'share#createPublicShare', 'url' => '/api/v2/sharing/public', 'verb' => 'POST'], ['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#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#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#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#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#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#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#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#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' => 'Share#updateSharedCredentialACLSharedKey', 'url' => '/api/v2/sharing/credential/{item_guid}/acl/shared_key', 'verb' => 'PATCH'],
['name' => 'internal#getAppVersion', 'url' => '/api/v2/version', 'verb' => 'GET'], ['name' => 'Internal#getAppVersion', 'url' => '/api/v2/version', 'verb' => 'GET'],
//Settings //Settings
['name' => 'settings#getSettings', 'url' => '/api/v2/settings', 'verb' => 'GET'], ['name' => 'Settings#getSettings', 'url' => '/api/v2/settings', 'verb' => 'GET'],
['name' => 'settings#saveUserSetting', 'url' => '/api/v2/settings/{key}/{value}', 'verb' => 'POST'], ['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#saveAdminSetting', 'url' => '/api/v2/settings/{key}/{value}/admin1/admin2', 'verb' => 'POST'],
//Translations //Translations
['name' => 'translation#getLanguageStrings', 'url' => '/api/v2/language', 'verb' => 'GET'], ['name' => 'Translation#getLanguageStrings', 'url' => '/api/v2/language', 'verb' => 'GET'],
#Icons #Icons
['name' => 'icon#getSingleIcon', 'url' => '/api/v2/geticon/{base64Url}', '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}', 'verb' => 'GET'],
['name' => 'icon#getIcon', 'url' => '/api/v2/icon/{base64Url}/{credentialId}', '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#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 //Internal API
['name' => 'internal#remind', 'url' => '/api/internal/notifications/remind/{credential_id}', 'verb' => 'POST'], ['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#read', 'url' => '/api/internal/notifications/read/{credential_id}', 'verb' => 'DELETE'],
['name' => 'internal#getAppVersion', 'url' => '/api/internal/version', 'verb' => 'GET'], ['name' => 'Internal#getAppVersion', 'url' => '/api/internal/version', 'verb' => 'GET'],
['name' => 'internal#generatePerson', 'url' => '/api/internal/generate_person', 'verb' => 'GET'], ['name' => 'Internal#generatePerson', 'url' => '/api/internal/generate_person', 'verb' => 'GET'],
//Admin routes //Admin routes
['name' => 'admin#searchUser', 'url' => '/admin/search', 'verb' => 'GET'], ['name' => 'Admin#searchUser', 'url' => '/admin/search', 'verb' => 'GET'],
['name' => 'admin#moveCredentials', 'url' => '/admin/move', 'verb' => 'POST'], ['name' => 'Admin#moveCredentials', 'url' => '/admin/move', 'verb' => 'POST'],
['name' => 'admin#requestDeletion', 'url' => '/admin/request-deletion/{vault_guid}', '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#deleteRequestDeletion', 'url' => '/admin/request-deletion/{vault_guid}', 'verb' => 'DELETE'],
['name' => 'admin#listRequests', 'url' => '/admin/delete-requests', 'verb' => 'GET'], ['name' => 'Admin#listRequests', 'url' => '/admin/delete-requests', 'verb' => 'GET'],
['name' => 'admin#acceptRequestDeletion', 'url' => '/admin/accept-delete-request', 'verb' => 'POST'], ['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\AppFramework\Bootstrap\IRegistrationContext;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\IGroupManager; use OCP\IGroupManager;
use OCP\IL10N;
use OCP\INavigationManager;
use OCP\IURLGenerator;
use OCP\IUserManager; use OCP\IUserManager;
use OCP\IUserSession; use OCP\IUserSession;
use OCP\Notification\IManager; use OCP\Notification\IManager;
@ -127,32 +124,9 @@ class Application extends App implements IBootstrap {
public function boot(IBootContext $context): void { public function boot(IBootContext $context): void {
/** @var IManager $manager */ /** @var IManager $manager */
$manager = $context->getAppContainer()->get(IManager::class); $manager = $context->getAppContainer()->query(IManager::class);
$manager->registerNotifierService(Notifier::class); $manager->registerNotifierService(Notifier::class);
Util::addTranslations(self::APP_ID); 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; namespace OCA\Passman\BackgroundJob;
use OC\BackgroundJob\TimedJob;
use OCA\Passman\Service\CronService; use OCA\Passman\Service\CronService;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\TimedJob;
use OCP\IConfig; use OCP\IConfig;
/** /**
@ -34,22 +35,21 @@ use OCP\IConfig;
*/ */
class ExpireCredentials extends TimedJob { class ExpireCredentials extends TimedJob {
protected IConfig $config; /**
private CronService $cronService; * ExpireCredentials constructor.
*
* @param ITimeFactory $timeFactory
* @param IConfig $config
* @param CronService $cronService
*/
public function __construct(ITimeFactory $timeFactory, protected IConfig $config, private CronService $cronService) {
parent::__construct($timeFactory);
/**
* ExpireCredentials constructor.
* @param IConfig $config
* @param CronService $cronService
*/
public function __construct(IConfig $config, CronService $cronService) {
// Run once per minute // Run once per minute
$this->setInterval(60); $this->setInterval(60);
$this->config = $config;
$this->cronService = $cronService;
} }
protected function run($argument) { protected function run($argument): void {
$this->cronService->expireCredentials(); $this->cronService->expireCredentials();
} }
} }

View file

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

View file

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

View file

@ -11,20 +11,17 @@
namespace OCA\Passman\Controller; namespace OCA\Passman\Controller;
use OCP\IRequest; use OCA\Passman\AppInfo\Application;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Controller; use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IRequest;
use OCP\Util;
class PageController extends Controller { class PageController extends Controller {
public function __construct(IRequest $request) {
private $userId; parent::__construct(Application::APP_ID, $request);
}
public function __construct($AppName, IRequest $request, $UserId){
parent::__construct($AppName, $request);
$this->userId = $UserId;
}
/** /**
* CAUTION: the @Stuff turns off security checks; for this page no admin is * CAUTION: the @Stuff turns off security checks; for this page no admin is
@ -37,8 +34,7 @@ class PageController extends Controller {
* @NoCSRFRequired * @NoCSRFRequired
*/ */
public function index() { public function index() {
$params = ['user' => $this->userId]; return new TemplateResponse($this->appName, 'main'); // templates/main.php
return new TemplateResponse('passman', 'main', $params); // templates/main.php
} }
@ -46,9 +42,9 @@ class PageController extends Controller {
* @NoAdminRequired * @NoAdminRequired
* @NoCSRFRequired * @NoCSRFRequired
*/ */
public function bookmarklet($url='',$title='') { public function bookmarklet($url='', $title='') {
$params = array('url' => $url, 'title' => $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 * @PublicPage
*/ */
public function publicSharePage() { 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; 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 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 { class SettingsController extends ApiController {
private $userId; private $userId;
@ -98,4 +97,4 @@ class SettingsController extends ApiController {
return new JSONResponse('OK'); return new JSONResponse('OK');
} }
} }

View file

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

View file

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

View file

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

View file

@ -4,9 +4,9 @@ namespace OCA\Passman\Middleware;
use OCA\Passman\Controller\ShareController; use OCA\Passman\Controller\ShareController;
use OCA\Passman\Service\SettingsService; use OCA\Passman\Service\SettingsService;
use OCP\AppFramework\Http\JSONResponse;
use \OCP\AppFramework\Middleware;
use OCP\AppFramework\Http; use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Middleware;
class ShareMiddleware extends Middleware { class ShareMiddleware extends Middleware {

View file

@ -90,7 +90,7 @@ class Provider implements IProvider {
$this->urlGenerator->imagePath(Application::APP_ID, 'app.svg'), $this->urlGenerator->imagePath(Application::APP_ID, 'app.svg'),
$Credential->getLabel(), $Credential->getLabel(),
\sprintf("Part of Passman vault %s", $Vault->getName()), \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) { } catch (\Exception $e) {
} }

View file

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Javascripts * Javascripts
*/ */
@ -104,7 +105,6 @@ script('passman', 'exporters/exporter-csv');
script('passman', 'exporters/exporter-json'); script('passman', 'exporters/exporter-json');
/*build-js-end*/ /*build-js-end*/
/* /*
* Styles * Styles
*/ */
@ -137,7 +137,7 @@ style('passman', 'app');
<button class="collapse" ng-click="tagCollapsibleClicked()"></button> <button class="collapse" ng-click="tagCollapsibleClicked()"></button>
<a href="" class="icon-tag" ng-click="tagCollapsibleClicked()">{{ 'navigation.tags' | translate }}</a> <a href="" class="icon-tag" ng-click="tagCollapsibleClicked()">{{ 'navigation.tags' | translate }}</a>
<ul> <ul>
<li class="taginput"> <li class="taginput">
<a class="icon-search taginput"> <a class="icon-search taginput">
<form ng-submit="tagClickedString(taginput); clearForm();"> <form ng-submit="tagClickedString(taginput); clearForm();">
<input id="tagsearch" list="tags" ng-model="taginput" placeholder="{{ 'navigation.tags.search' | translate }}" /> <input id="tagsearch" list="tags" ng-model="taginput" placeholder="{{ 'navigation.tags.search' | translate }}" />

View file

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

View file

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

View file

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

View file

@ -1,19 +1,19 @@
<div id="passman-controls"> <div id="passman-controls">
<div class="actions creatable"> <div class="actions creatable">
<div class="breadcrumb"> <ul class="breadcrumb">
<div class="crumb svg crumbhome"> <li class="crumb svg crumbhome">
<a ng-click="logout()" class="icon-home">Home</a> <a ng-click="logout()" class="icon-home">Home</a>
<span style="display: none;"></span> <span style="display: none;"></span>
</div> </li>
<div class="crumb svg" data-dir="/Test"> <li class="crumb svg" data-dir="/Test">
<a ng-click="cancel()">{{ active_vault.name }}</a> <a ng-click="cancel()">{{ active_vault.name }}</a>
</div> </li>
<div class="crumb svg last" data-dir="/Test"> <li class="crumb svg last" data-dir="/Test">
<a ng-if="storedCredential.credential_id"> <a ng-if="storedCredential.credential_id">
{{ 'share.credential' | translate }} {{ storedCredential.label }} {{ 'share.credential' | translate }} {{ storedCredential.label }}
</a> </a>
</div> </li>
</div> </ul>
</div> </div>
</div> </div>
<div class="app-sidebar-tabs"> <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 class="main_list" off-click-filter="'.download-js-link, .sidebar-shown, #app-sidebar'">
<div id="passman-controls" ng-class="{ 'sidebar-shown': selectedCredential }"> <div id="passman-controls" ng-class="{ 'sidebar-shown': selectedCredential }">
<div class="breadcrumb"> <div class="breadcrumb">
<div class="breadcrumb"> <ul class="breadcrumb">
<div class="crumb svg crumbhome"> <li class="crumb svg crumbhome">
<a ng-click="logout()" class="icon-home">Home</a> <a ng-click="logout()" class="icon-home">Home</a>
<span style="display: none;"></span> <span style="display: none;"></span>
</div> </li>
<div class="crumb svg" ng-click="clearState()"> <li class="crumb svg" ng-click="clearState()">
<a>{{active_vault.name}}</a> <a>{{active_vault.name}}</a>
</div> </li>
</div> </ul>
<div class="addCredential" ng-hide="delete_time>0"> <div class="addCredential" ng-hide="delete_time>0">
<button ng-click="addCredential()"><i class="fa fa-plus"></i></button> <button ng-click="addCredential()"><i class="fa fa-plus"></i></button>
</div> </div>

View file

@ -23,19 +23,9 @@
namespace OCA\Passman\Controller; 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\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 OCP\AppFramework\Http\JSONResponse;
use PHPUnit_Framework_TestCase;
/** /**
* Class FileControllerTest * Class FileControllerTest
@ -96,4 +86,4 @@ class FileControllerTest extends PHPUnit_Framework_TestCase {
$this->controller->updateFile('6AD30804-BFFC-4EFC-97F8-20A126FA1709', '0' , '0.jpg'); $this->controller->updateFile('6AD30804-BFFC-4EFC-97F8-20A126FA1709', '0' , '0.jpg');
$this->assertTrue(true); $this->assertTrue(true);
} }
} }

View file

@ -23,9 +23,8 @@
namespace OCA\Passman\Controller; namespace OCA\Passman\Controller;
use PHPUnit_Framework_TestCase;
use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\JSONResponse;
use PHPUnit_Framework_TestCase;
/** /**
* Class InternalControllerTest * Class InternalControllerTest
@ -97,4 +96,4 @@ class InternalControllerTest extends PHPUnit_Framework_TestCase {
$this->assertTrue(true); $this->assertTrue(true);
} }
} }

View file

@ -23,9 +23,8 @@
namespace OCA\Passman\Controller; namespace OCA\Passman\Controller;
use PHPUnit_Framework_TestCase;
use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Http\TemplateResponse;
use PHPUnit_Framework_TestCase;
/** /**
* Class PageControllerTest * Class PageControllerTest
@ -74,4 +73,4 @@ class PageControllerTest extends PHPUnit_Framework_TestCase {
$this->assertEquals('public_share', $result->getTemplateName()); $this->assertEquals('public_share', $result->getTemplateName());
$this->assertTrue($result instanceof TemplateResponse); $this->assertTrue($result instanceof TemplateResponse);
} }
} }

View file

@ -23,11 +23,10 @@
namespace OCA\Passman\Controller; namespace OCA\Passman\Controller;
use OCA\Passman\Service\SettingsService;
use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use PHPUnit_Framework_TestCase; use PHPUnit_Framework_TestCase;
use OCA\Passman\Service\SettingsService;
/** /**
* Class SettingsControllerTest * Class SettingsControllerTest
@ -97,4 +96,4 @@ class SettingsControllerTest extends PHPUnit_Framework_TestCase {
$result = $this->controller->saveAdminSetting('admin', 'value'); $result = $this->controller->saveAdminSetting('admin', 'value');
$this->assertTrue($result instanceof JSONResponse); $this->assertTrue($result instanceof JSONResponse);
} }
} }

View file

@ -53,4 +53,4 @@ class TranslationControllerTest extends PHPUnit_Framework_TestCase {
$result = $this->controller->getLanguageStrings(null); $result = $this->controller->getLanguageStrings(null);
$this->assertTrue($result instanceof JSONResponse); $this->assertTrue($result instanceof JSONResponse);
} }
} }

View file

@ -27,9 +27,8 @@ use OCA\Passman\Service\CredentialService;
use OCA\Passman\Service\DeleteVaultRequestService; use OCA\Passman\Service\DeleteVaultRequestService;
use OCA\Passman\Service\SettingsService; use OCA\Passman\Service\SettingsService;
use OCA\Passman\Service\VaultService; use OCA\Passman\Service\VaultService;
use PHPUnit_Framework_TestCase;
use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\JSONResponse;
use PHPUnit_Framework_TestCase;
/** /**
* Class VaultControllerTest * Class VaultControllerTest
@ -110,4 +109,4 @@ class VaultControllerTest extends PHPUnit_Framework_TestCase {
$result = $this->controller->delete(''); $result = $this->controller->delete('');
$this->assertTrue($result instanceof JSONResponse); $this->assertTrue($result instanceof JSONResponse);
} }
} }