mirror of
https://github.com/nextcloud/passman.git
synced 2025-10-21 19:06:36 +08:00
migrate deprecated (database access) methods
This commit is contained in:
parent
a361f31022
commit
c7c3f24215
21 changed files with 872 additions and 573 deletions
|
@ -11,23 +11,28 @@
|
|||
|
||||
namespace OCA\Passman\Controller;
|
||||
|
||||
use OCA\Passman\Service\CredentialService;
|
||||
use OCP\App\IAppManager;
|
||||
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\App;
|
||||
use OCP\Notification\IManager;
|
||||
|
||||
class InternalController extends ApiController {
|
||||
private $userId;
|
||||
private $credentialService;
|
||||
private $config;
|
||||
private $manager;
|
||||
private $appManager;
|
||||
|
||||
public function __construct($AppName,
|
||||
IRequest $request,
|
||||
$UserId,
|
||||
CredentialService $credentialService,
|
||||
IConfig $config
|
||||
IRequest $request,
|
||||
$UserId,
|
||||
CredentialService $credentialService,
|
||||
IConfig $config,
|
||||
IManager $IManager,
|
||||
IAppManager $appManager
|
||||
) {
|
||||
parent::__construct(
|
||||
$AppName,
|
||||
|
@ -38,6 +43,8 @@ class InternalController extends ApiController {
|
|||
$this->userId = $UserId;
|
||||
$this->credentialService = $credentialService;
|
||||
$this->config = $config;
|
||||
$this->manager = $IManager;
|
||||
$this->appManager = $appManager;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -45,16 +52,15 @@ class InternalController extends ApiController {
|
|||
*/
|
||||
public function remind($credential_id) {
|
||||
$credential = $this->credentialService->getCredentialById($credential_id, $this->userId);
|
||||
if($credential) {
|
||||
if ($credential) {
|
||||
$credential->setExpireTime(time() + (24 * 60 * 60));
|
||||
$this->credentialService->upd($credential);
|
||||
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification = $this->manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('credential', $credential_id)
|
||||
->setUser($this->userId);
|
||||
$manager->markProcessed($notification);
|
||||
$this->manager->markProcessed($notification);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,18 +68,16 @@ class InternalController extends ApiController {
|
|||
* @NoAdminRequired
|
||||
*/
|
||||
public function read($credential_id) {
|
||||
|
||||
$credential = $this->credentialService->getCredentialById($credential_id, $this->userId);
|
||||
if($credential) {
|
||||
if ($credential) {
|
||||
$credential->setExpireTime(0);
|
||||
$this->credentialService->upd($credential);
|
||||
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification = $this->manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('credential', $credential_id)
|
||||
->setUser($this->userId);
|
||||
$manager->markProcessed($notification);
|
||||
$this->manager->markProcessed($notification);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -82,15 +86,14 @@ class InternalController extends ApiController {
|
|||
* @NoCSRFRequired
|
||||
*/
|
||||
public function getAppVersion() {
|
||||
$AppInstance = new App();
|
||||
return new JSONResponse(array('version' => $AppInstance->getAppInfo("passman")["version"]));
|
||||
return new JSONResponse(array('version' => $this->appManager->getAppInfo('passman')["version"]));
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*/
|
||||
public function generatePerson() {
|
||||
$context = [ 'http' => [ 'method' => 'GET' ], 'ssl' => [ 'verify_peer' => false, 'allow_self_signed'=> true ] ];
|
||||
$context = ['http' => ['method' => 'GET'], 'ssl' => ['verify_peer' => false, 'allow_self_signed' => true]];
|
||||
$context = stream_context_create($context);
|
||||
$random_person = json_decode(file_get_contents('http://api.namefake.com/', false, $context));
|
||||
return new JSONResponse($random_person);
|
||||
|
@ -122,4 +125,4 @@ class InternalController extends ApiController {
|
|||
$this->config->setAppValue('passman', $key, $value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ use OCP\IUserManager;
|
|||
use OCA\Passman\Service\VaultService;
|
||||
use OCA\Passman\Service\ActivityService;
|
||||
use OCA\Passman\Activity;
|
||||
use OCP\Notification\IManager;
|
||||
|
||||
|
||||
class ShareController extends ApiController {
|
||||
|
@ -44,6 +45,7 @@ class ShareController extends ApiController {
|
|||
private $notificationService;
|
||||
private $fileService;
|
||||
private $settings;
|
||||
private $manager;
|
||||
|
||||
private $limit = 50;
|
||||
private $offset = 0;
|
||||
|
@ -59,7 +61,8 @@ class ShareController extends ApiController {
|
|||
CredentialService $credentialService,
|
||||
NotificationService $notificationService,
|
||||
FileService $fileService,
|
||||
SettingsService $config
|
||||
SettingsService $config,
|
||||
IManager $IManager
|
||||
) {
|
||||
parent::__construct(
|
||||
$AppName,
|
||||
|
@ -78,6 +81,7 @@ class ShareController extends ApiController {
|
|||
$this->notificationService = $notificationService;
|
||||
$this->fileService = $fileService;
|
||||
$this->settings = $config;
|
||||
$this->manager = $IManager;
|
||||
}
|
||||
|
||||
|
||||
|
@ -232,19 +236,19 @@ class ShareController extends ApiController {
|
|||
|
||||
}
|
||||
try {
|
||||
$sr = array_pop($this->shareService->getPendingShareRequestsForCredential($item_guid, $user_id));
|
||||
$shareRequests = $this->shareService->getPendingShareRequestsForCredential($item_guid, $user_id);
|
||||
$sr = array_pop($shareRequests);
|
||||
} catch (\Exception $e) {
|
||||
// no need to catch this
|
||||
}
|
||||
|
||||
if ($sr) {
|
||||
$this->shareService->cleanItemRequestsForUser($sr);
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification = $this->manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('passman_share_request', $sr->getId())
|
||||
->setUser($user_id);
|
||||
$manager->markProcessed($notification);
|
||||
$this->manager->markProcessed($notification);
|
||||
}
|
||||
if ($acl) {
|
||||
$this->shareService->deleteShareACL($acl);
|
||||
|
@ -292,12 +296,11 @@ class ShareController extends ApiController {
|
|||
return new NotFoundResponse();
|
||||
}
|
||||
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification = $this->manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('passman_share_request', $sr->getId())
|
||||
->setUser($this->userId->getUID());
|
||||
$manager->markProcessed($notification);
|
||||
$this->manager->markProcessed($notification);
|
||||
|
||||
$notification = array(
|
||||
'from_user' => ucfirst($this->userId->getDisplayName()),
|
||||
|
@ -383,12 +386,11 @@ class ShareController extends ApiController {
|
|||
);
|
||||
|
||||
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification = $this->manager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('passman_share_request', $share_request_id)
|
||||
->setUser($this->userId->getUID());
|
||||
$manager->markProcessed($notification);
|
||||
$this->manager->markProcessed($notification);
|
||||
|
||||
$this->shareService->cleanItemRequestsForUser($sr);
|
||||
return new JSONResponse(array('result' => true));
|
||||
|
@ -508,4 +510,4 @@ class ShareController extends ApiController {
|
|||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,7 +93,8 @@ class Application extends App implements IBootstrap {
|
|||
$c->get(CredentialService::class),
|
||||
$c->get(NotificationService::class),
|
||||
$c->get(FileService::class),
|
||||
$c->get(SettingsService::class)
|
||||
$c->get(SettingsService::class),
|
||||
$c->get(IManager::class)
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -24,14 +24,19 @@
|
|||
namespace OCA\Passman\Db;
|
||||
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\AppFramework\Db\Mapper;
|
||||
|
||||
class CredentialMapper extends Mapper {
|
||||
private $utils;
|
||||
class CredentialMapper extends QBMapper {
|
||||
const TABLE_NAME = 'passman_credentials';
|
||||
private Utils $utils;
|
||||
|
||||
public function __construct(IDBConnection $db, Utils $utils) {
|
||||
parent::__construct($db, 'passman_credentials');
|
||||
parent::__construct($db, self::TABLE_NAME);
|
||||
$this->utils = $utils;
|
||||
}
|
||||
|
||||
|
@ -39,74 +44,106 @@ class CredentialMapper extends Mapper {
|
|||
/**
|
||||
* Obtains the credentials by vault id (not guid)
|
||||
*
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
* @param string $vault_id
|
||||
* @param string $user_id
|
||||
* @return Credential[]
|
||||
*/
|
||||
public function getCredentialsByVaultId($vault_id, $user_id) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_credentials` ' .
|
||||
'WHERE `user_id` = ? and vault_id = ?';
|
||||
return $this->findEntities($sql, [$user_id, $vault_id]);
|
||||
public function getCredentialsByVaultId(string $vault_id, string $user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->eq('vault_id', $qb->createNamedParameter($vault_id, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var Credential[] $credentials */
|
||||
$credentials = $this->findEntities($qb);
|
||||
return $credentials;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a random credentail from a vault
|
||||
* Get a random credential from a vault
|
||||
*
|
||||
* @param $vault_id
|
||||
* @param $user_id
|
||||
* @return Credential
|
||||
* @param string $vault_id
|
||||
* @param string $user_id
|
||||
* @return Credential[]
|
||||
*/
|
||||
public function getRandomCredentialByVaultId($vault_id, $user_id) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_credentials` ' .
|
||||
'WHERE `user_id` = ? and vault_id = ? AND shared_key is NULL LIMIT 20';
|
||||
$entities = $this->findEntities($sql, [$user_id, $vault_id]);
|
||||
public function getRandomCredentialByVaultId(string $vault_id, string $user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->eq('vault_id', $qb->createNamedParameter($vault_id, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->isNull('shared_key'))
|
||||
->setMaxResults(20);
|
||||
|
||||
$entities = $this->findEntities($qb);
|
||||
$count = count($entities) - 1;
|
||||
$entities = array_splice($entities, rand(0, $count), 1);
|
||||
return $entities;
|
||||
|
||||
/** @var Credential[] $entity */
|
||||
$entity = array_splice($entities, rand(0, $count), 1);
|
||||
return $entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get expired credentials
|
||||
*
|
||||
* @param $timestamp
|
||||
* @param int $timestamp
|
||||
* @return Credential[]
|
||||
*/
|
||||
public function getExpiredCredentials($timestamp) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_credentials` ' .
|
||||
'WHERE `expire_time` > 0 AND `expire_time` < ?';
|
||||
return $this->findEntities($sql, [$timestamp]);
|
||||
public function getExpiredCredentials(int $timestamp) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->gt('expire_time', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
|
||||
->andWhere($qb->expr()->lt('expire_time', $qb->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
/** @var Credential[] $credentials */
|
||||
$credentials = $this->findEntities($qb);
|
||||
return $credentials;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an credential by id.
|
||||
* Optional user id
|
||||
*
|
||||
* @param $credential_id
|
||||
* @param null $user_id
|
||||
* @param int $credential_id
|
||||
* @param string|null $user_id
|
||||
* @return Credential
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getCredentialById($credential_id, $user_id = null) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_credentials` ' .
|
||||
'WHERE `id` = ?';
|
||||
// If we want to check the owner, add it to the query
|
||||
$params = [$credential_id];
|
||||
public function getCredentialById(int $credential_id, string $user_id = null) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($credential_id, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
if ($user_id !== null) {
|
||||
$sql .= ' and `user_id` = ? ';
|
||||
array_push($params, $user_id);
|
||||
$qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
}
|
||||
return $this->findEntity($sql, $params);
|
||||
|
||||
/** @var Credential $credential */
|
||||
$credential = $this->findEntity($qb);
|
||||
return $credential;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get credential label by id
|
||||
*
|
||||
* @param $credential_id
|
||||
* @param int $credential_id
|
||||
* @return Credential
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getCredentialLabelById($credential_id) {
|
||||
$sql = 'SELECT id, label FROM `*PREFIX*passman_credentials` ' .
|
||||
'WHERE `id` = ? ';
|
||||
return $this->findEntity($sql, [$credential_id]);
|
||||
public function getCredentialLabelById(int $credential_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select(['id', 'label'])
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($credential_id, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
/** @var Credential $credential */
|
||||
$credential = $this->findEntity($qb);
|
||||
return $credential;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -146,13 +183,13 @@ class CredentialMapper extends Mapper {
|
|||
}
|
||||
|
||||
/**
|
||||
* Update a credential
|
||||
*
|
||||
* @param $raw_credential array An array containing all the credential fields
|
||||
* @param $useRawUser bool
|
||||
* @return Credential The updated credential
|
||||
* @return Credential|Entity The updated credential
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function updateCredential($raw_credential, $useRawUser) {
|
||||
public function updateCredential($raw_credential, bool $useRawUser) {
|
||||
$original = $this->getCredentialByGUID($raw_credential['guid']);
|
||||
$uid = ($useRawUser) ? $raw_credential['user_id'] : $original->getUserId();
|
||||
|
||||
|
@ -197,16 +234,24 @@ class CredentialMapper extends Mapper {
|
|||
/**
|
||||
* Finds a credential by the given guid
|
||||
*
|
||||
* @param $credential_guid
|
||||
* @param string $credential_guid
|
||||
* @param string|null $user_id
|
||||
* @return Credential
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getCredentialByGUID($credential_guid, $user_id = null) {
|
||||
$q = 'SELECT * FROM `*PREFIX*passman_credentials` WHERE guid = ? ';
|
||||
$params = [$credential_guid];
|
||||
public function getCredentialByGUID(string $credential_guid, string $user_id = null) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('guid', $qb->createNamedParameter($credential_guid, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
if ($user_id !== null) {
|
||||
$q .= ' and `user_id` = ? ';
|
||||
array_push($params, $user_id);
|
||||
$qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
}
|
||||
return $this->findEntity($q, $params);
|
||||
|
||||
/** @var Credential $credential */
|
||||
$credential = $this->findEntity($qb);
|
||||
return $credential;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,49 +24,64 @@
|
|||
namespace OCA\Passman\Db;
|
||||
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\AppFramework\Db\Mapper;
|
||||
|
||||
class CredentialRevisionMapper extends Mapper {
|
||||
private $utils;
|
||||
class CredentialRevisionMapper extends QBMapper {
|
||||
const TABLE_NAME = 'passman_revisions';
|
||||
private Utils $utils;
|
||||
|
||||
public function __construct(IDBConnection $db, Utils $utils) {
|
||||
parent::__construct($db, 'passman_revisions');
|
||||
parent::__construct($db, self::TABLE_NAME);
|
||||
$this->utils = $utils;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get revisions from a credential
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
*
|
||||
* @param int $credential_id
|
||||
* @param string|null $user_id
|
||||
* @return CredentialRevision[]
|
||||
*/
|
||||
public function getRevisions($credential_id, $user_id = null) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_revisions` ' .
|
||||
'WHERE `credential_id` = ?';
|
||||
$params = [$credential_id];
|
||||
if ($user_id !== null) {
|
||||
$sql.= ' and `user_id` = ? ';
|
||||
$params[] = $user_id;
|
||||
}
|
||||
return $this->findEntities($sql, $params);
|
||||
public function getRevisions(int $credential_id, string $user_id = null) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('credential_id', $qb->createNamedParameter($credential_id, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
if ($user_id !== null) {
|
||||
$qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
}
|
||||
|
||||
/** @var CredentialRevision[] $credentialRevisions */
|
||||
$credentialRevisions = $this->findEntities($qb);
|
||||
return $credentialRevisions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
* @param int $revision_id
|
||||
* @param string|null $user_id
|
||||
* @return CredentialRevision
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getRevision($revision_id, $user_id = null) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_revisions` ' .
|
||||
'WHERE `id` = ?';
|
||||
$params = [$revision_id];
|
||||
if ($user_id !== null) {
|
||||
$sql.= ' and `user_id` = ? ';
|
||||
$params[] = $user_id;
|
||||
}
|
||||
return $this->findEntity($sql, $params);
|
||||
public function getRevision(int $revision_id, string $user_id = null) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($revision_id, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
if ($user_id !== null) {
|
||||
$qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
}
|
||||
|
||||
/** @var CredentialRevision $credentialRevision */
|
||||
$credentialRevision = $this->findEntity($qb);
|
||||
return $credentialRevision;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -101,4 +116,4 @@ class CredentialRevisionMapper extends Mapper {
|
|||
$revision->setUserId($user_id);
|
||||
return $this->delete($revision);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,13 +24,14 @@
|
|||
namespace OCA\Passman\Db;
|
||||
|
||||
|
||||
use Icewind\SMB\Share;
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\Mapper;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
|
||||
class DeleteVaultRequestMapper extends Mapper {
|
||||
class DeleteVaultRequestMapper extends QBMapper {
|
||||
const TABLE_NAME = 'passman_delete_vault_request';
|
||||
|
||||
public function __construct(IDBConnection $db) {
|
||||
|
@ -40,38 +41,47 @@ class DeleteVaultRequestMapper extends Mapper {
|
|||
/**
|
||||
* Create a new enty in the db
|
||||
* @param DeleteVaultRequest $request
|
||||
* @return \OCP\AppFramework\Db\Entity
|
||||
* @return Entity
|
||||
*/
|
||||
public function createRequest(DeleteVaultRequest $request){
|
||||
public function createRequest(DeleteVaultRequest $request) {
|
||||
return $this->insert($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all delete requests
|
||||
* @return \OCP\AppFramework\Db\Entity
|
||||
* @return Entity[]
|
||||
*/
|
||||
public function getDeleteRequests(){
|
||||
$q = "SELECT * FROM *PREFIX*" . self::TABLE_NAME;
|
||||
return $this->findEntities($q);
|
||||
public function getDeleteRequests() {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME);
|
||||
|
||||
return $this->findEntities($qb);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get request for an vault id
|
||||
* @param $vault_id integer The vault id
|
||||
* @return \OCP\AppFramework\Db\Entity
|
||||
* Get request for a vault guid
|
||||
* @param string $vault_guid
|
||||
* @return Entity
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getDeleteRequestsForVault($vault_guid){
|
||||
$q = "SELECT * FROM *PREFIX*" . self::TABLE_NAME .' WHERE `vault_guid` = ?';
|
||||
return $this->findEntity($q, [$vault_guid]);
|
||||
public function getDeleteRequestsForVault(string $vault_guid) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('vault_guid', $qb->createNamedParameter($vault_guid, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
return $this->findEntity($qb);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the given delete request
|
||||
* @param DeleteVaultRequest $request Request to delete
|
||||
* @return DeleteVaultRequest The deleted request
|
||||
* @param DeleteVaultRequest $request Request to delete
|
||||
* @return DeleteVaultRequest The deleted request
|
||||
*/
|
||||
public function removeDeleteVaultRequest(DeleteVaultRequest $request){
|
||||
public function removeDeleteVaultRequest(DeleteVaultRequest $request) {
|
||||
return $this->delete($request);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,51 +25,65 @@
|
|||
namespace OCA\Passman\Db;
|
||||
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\AppFramework\Db\Mapper;
|
||||
|
||||
class FileMapper extends Mapper {
|
||||
private $utils;
|
||||
class FileMapper extends QBMapper {
|
||||
const TABLE_NAME = 'passman_files';
|
||||
private Utils $utils;
|
||||
|
||||
public function __construct(IDBConnection $db, Utils $utils) {
|
||||
parent::__construct($db, 'passman_files');
|
||||
parent::__construct($db, self::TABLE_NAME);
|
||||
$this->utils = $utils;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $file_id
|
||||
* @param null $user_id
|
||||
* @param int $file_id
|
||||
* @param string|null $user_id
|
||||
* @return File
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getFile($file_id, $user_id = null) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_files` ' .
|
||||
'WHERE `id` = ?';
|
||||
$params = [$file_id];
|
||||
public function getFile(int $file_id, string $user_id = null) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($file_id, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
if ($user_id !== null) {
|
||||
$sql .= ' and `user_id` = ? ';
|
||||
array_push($params, $user_id);
|
||||
$qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
}
|
||||
return $this->findEntity($sql, $params);
|
||||
|
||||
/** @var File $file */
|
||||
$file = $this->findEntity($qb);
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $file_id
|
||||
* @param null $user_id
|
||||
* @param string $file_guid
|
||||
* @param string|null $user_id
|
||||
* @return File
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getFileByGuid($file_guid, $user_id = null) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_files` ' .
|
||||
'WHERE `guid` = ?';
|
||||
$params = [$file_guid];
|
||||
public function getFileByGuid(string $file_guid, string $user_id = null) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('guid', $qb->createNamedParameter($file_guid, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
if ($user_id !== null) {
|
||||
$sql .= ' and `user_id` = ? ';
|
||||
array_push($params, $user_id);
|
||||
$qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
}
|
||||
return $this->findEntity($sql, $params);
|
||||
|
||||
/** @var File $file */
|
||||
$file = $this->findEntity($qb);
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -87,21 +101,21 @@ class FileMapper extends Mapper {
|
|||
$file->setFileData($file_raw['file_data']);
|
||||
$file->setMimetype($file_raw['mimetype']);
|
||||
|
||||
|
||||
return $this->insert($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a file by file_id and user id
|
||||
* @param $file_id
|
||||
* @param $userId
|
||||
* @return File
|
||||
*
|
||||
* @param int $file_id
|
||||
* @param string $userId
|
||||
* @return File|Entity
|
||||
*/
|
||||
public function deleteFile($file_id, $userId) {
|
||||
public function deleteFile(int $file_id, string $userId) {
|
||||
$file = new File();
|
||||
$file->setId($file_id);
|
||||
$file->setUserId($userId);
|
||||
$this->delete($file);
|
||||
return $this->delete($file);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -115,16 +129,17 @@ class FileMapper extends Mapper {
|
|||
|
||||
|
||||
/**
|
||||
* @param $user_id
|
||||
* @param string $user_id
|
||||
* @return File[]
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
*/
|
||||
public function getFilesFromUser($user_id) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_files` ' .
|
||||
'WHERE `user_id` = ?';
|
||||
$params = [$user_id];
|
||||
public function getFilesFromUser(string $user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
return $this->findEntities($sql, $params);
|
||||
/** @var File[] $files */
|
||||
$files = $this->findEntities($qb);
|
||||
return $files;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,129 +24,194 @@
|
|||
namespace OCA\Passman\Db;
|
||||
|
||||
|
||||
use Icewind\SMB\Share;
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\Mapper;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\Exception;
|
||||
use OCP\DB\IResult;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
|
||||
class ShareRequestMapper extends Mapper {
|
||||
const TABLE_NAME = 'passman_share_request';
|
||||
class ShareRequestMapper extends QBMapper {
|
||||
const TABLE_NAME = 'passman_share_request';
|
||||
|
||||
public function __construct(IDBConnection $db) {
|
||||
parent::__construct($db, self::TABLE_NAME);
|
||||
}
|
||||
|
||||
public function createRequest(ShareRequest $request){
|
||||
return $this->insert($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains a request by the given item and vault GUID pair
|
||||
* @param $item_guid
|
||||
* @param $target_vault_guid
|
||||
* @return ShareRequest
|
||||
*/
|
||||
public function getRequestByItemAndVaultGuid($item_guid, $target_vault_guid){
|
||||
$q = "SELECT * FROM *PREFIX*" . self::TABLE_NAME . " WHERE item_guid = ? AND target_vault_guid = ?";
|
||||
return $this->findEntity($q, [$item_guid, $target_vault_guid]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get shared items for the given item_guid
|
||||
* @param $item_guid
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getRequestsByItemGuidGroupedByUser($item_guid){
|
||||
if (strtolower($this->db->getDatabasePlatform()->getName()) === 'mysql'){
|
||||
$this->db->executeQuery("SET sql_mode = '';");
|
||||
}
|
||||
$q = "SELECT *, target_user_id FROM *PREFIX*" . self::TABLE_NAME . " WHERE item_guid = ? GROUP BY target_user_id;";
|
||||
return $this->findEntities($q, [$item_guid]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all pending requests for the given user to the given item
|
||||
* @param $item_id The item ID
|
||||
* @param $target_user_id The target user
|
||||
* @return \PDOStatement The result of running the db query
|
||||
*/
|
||||
public function cleanItemRequestsForUser($item_id, $target_user_id){
|
||||
$q = "DELETE FROM *PREFIX*" . self::TABLE_NAME . " WHERE item_id = ? AND target_user_id = ?";
|
||||
$this->execute($q, [$item_id, $target_user_id]);
|
||||
return $this->execute($q, [$item_id, $target_user_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains all pending share requests for the given user ID
|
||||
* @param $user_id
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getUserPendingRequests($user_id){
|
||||
$q = "SELECT * FROM *PREFIX*". self::TABLE_NAME ." WHERE target_user_id = ?";
|
||||
return $this->findEntities($q, [$user_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the given share request
|
||||
* @param ShareRequest $shareRequest Request to delete
|
||||
* @return ShareRequest The deleted request
|
||||
*/
|
||||
public function deleteShareRequest(ShareRequest $shareRequest){
|
||||
return $this->delete($shareRequest);
|
||||
public function __construct(IDBConnection $db) {
|
||||
parent::__construct($db, self::TABLE_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a share request by it's unique incremental id
|
||||
* @param $id
|
||||
* @return ShareRequest
|
||||
/**
|
||||
* @param ShareRequest $request
|
||||
* @return ShareRequest|Entity
|
||||
*/
|
||||
public function createRequest(ShareRequest $request) {
|
||||
return $this->insert($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains a request by the given item and vault GUID pair
|
||||
*
|
||||
* @param string $item_guid
|
||||
* @param string $target_vault_guid
|
||||
* @return ShareRequest
|
||||
* @throws DoesNotExistException
|
||||
*/
|
||||
public function getShareRequestById($id){
|
||||
$q = "SELECT * FROM *PREFIX*" . self::TABLE_NAME . " WHERE id = ?";
|
||||
return $this->findEntity($q, [$id]);
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getRequestByItemAndVaultGuid(string $item_guid, string $target_vault_guid) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('item_guid', $qb->createNamedParameter($item_guid, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->eq('target_vault_guid', $qb->createNamedParameter($target_vault_guid, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var ShareRequest $shareRequest */
|
||||
$shareRequest = $this->findEntity($qb);
|
||||
return $shareRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all share requests by a given item GUID
|
||||
* @param $item_guid
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getShareRequestsByItemGuid($item_guid){
|
||||
$q = "SELECT * FROM *PREFIX*" . self::TABLE_NAME . " WHERE item_guid = ?";
|
||||
return $this->findEntities($q, [$item_guid]);
|
||||
/**
|
||||
* Get shared items for the given item_guid
|
||||
*
|
||||
* @param string $item_guid
|
||||
* @return ShareRequest[]
|
||||
* @throws Exception
|
||||
*/
|
||||
public function getRequestsByItemGuidGroupedByUser(string $item_guid) {
|
||||
if (strtolower($this->db->getDatabasePlatform()->getName()) === 'mysql') {
|
||||
$this->db->executeQuery("SET sql_mode = '';");
|
||||
}
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('item_guid', $qb->createNamedParameter($item_guid, IQueryBuilder::PARAM_STR)))
|
||||
->groupBy('target_user_id');
|
||||
|
||||
/** @var ShareRequest[] $sharedRequests */
|
||||
$sharedRequests = $this->findEntities($qb);
|
||||
return $sharedRequests;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the given share request,
|
||||
* @param ShareRequest $shareRequest
|
||||
* @return ShareRequest
|
||||
*/
|
||||
public function updateShareRequest(ShareRequest $shareRequest){
|
||||
/**
|
||||
* Deletes all pending requests for the given user to the given item
|
||||
*
|
||||
* @param int $item_id
|
||||
* @param string $target_user_id
|
||||
* @return int|IResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public function cleanItemRequestsForUser(int $item_id, string $target_user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
return $qb->delete(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('item_id', $qb->createNamedParameter($item_id, IQueryBuilder::PARAM_INT)))
|
||||
->andWhere($qb->expr()->eq('target_user_id', $qb->createNamedParameter($target_user_id, IQueryBuilder::PARAM_STR)))
|
||||
->execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains all pending share requests for the given user ID
|
||||
*
|
||||
* @param string $user_id
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getUserPendingRequests(string $user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('target_user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var ShareRequest[] $shareRequests */
|
||||
$shareRequests = $this->findEntities($qb);
|
||||
return $shareRequests;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the given share request
|
||||
* @param ShareRequest $shareRequest Request to delete
|
||||
* @return ShareRequest The deleted request
|
||||
*/
|
||||
public function deleteShareRequest(ShareRequest $shareRequest) {
|
||||
return $this->delete($shareRequest);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a share request by it's unique incremental id
|
||||
*
|
||||
* @param int $id
|
||||
* @return ShareRequest
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getShareRequestById(int $id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
/** @var ShareRequest $shareRequest */
|
||||
$shareRequest = $this->findEntity($qb);
|
||||
return $shareRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all share requests by a given item GUID
|
||||
*
|
||||
* @param string $item_guid
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getShareRequestsByItemGuid(string $item_guid) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('item_guid', $qb->createNamedParameter($item_guid, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var ShareRequest[] $shareRequests */
|
||||
$shareRequests = $this->findEntities($qb);
|
||||
return $shareRequests;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the given share request,
|
||||
* @param ShareRequest $shareRequest
|
||||
* @return ShareRequest
|
||||
*/
|
||||
public function updateShareRequest(ShareRequest $shareRequest) {
|
||||
return $this->update($shareRequest);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds pending requests sent to the given user to the given item.
|
||||
* @param $item_guid
|
||||
* @param $user_id
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getPendingShareRequests($item_guid, $user_id){
|
||||
$q = "SELECT * FROM *PREFIX*" . self::TABLE_NAME . " WHERE item_guid = ? and target_user_id= ?";
|
||||
return $this->findEntities($q, [$item_guid, $user_id]);
|
||||
/**
|
||||
* Finds pending requests sent to the given user to the given item.
|
||||
*
|
||||
* @param string $item_guid
|
||||
* @param string $user_id
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getPendingShareRequests(string $item_guid, string $user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('item_guid', $qb->createNamedParameter($item_guid, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->eq('target_user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var ShareRequest[] $shareRequests */
|
||||
$shareRequests = $this->findEntities($qb);
|
||||
return $shareRequests;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates all pending requests with the given permissions
|
||||
* @param $item_guid The item for which to update the requests
|
||||
* @param $user_id The user for which to update the requests
|
||||
* @param $permissions The new permissions to apply
|
||||
* @return \PDOStatement The result of the operation
|
||||
*/
|
||||
public function updatePendingRequestPermissions($item_guid, $user_id, $permissions){
|
||||
$q = "UPDATE *PREFIX*" . self::TABLE_NAME . " SET permissions = ? WHERE item_guid = ? AND target_user_id = ?";
|
||||
return $this->execute($q, [$permissions, $item_guid, $user_id]);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Updates all pending requests with the given permissions
|
||||
*
|
||||
* @param string $item_guid The item for which to update the requests
|
||||
* @param string $user_id The user for which to update the requests
|
||||
* @param int $permissions The new permissions to apply
|
||||
* @return int|IResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public function updatePendingRequestPermissions(string $item_guid, string $user_id, int $permissions) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
return $qb->update(self::TABLE_NAME)
|
||||
->set('permissions', $qb->createNamedParameter($permissions, IQueryBuilder::PARAM_INT))
|
||||
->where($qb->expr()->eq('item_guid', $qb->createNamedParameter($item_guid, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->eq('target_user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)))
|
||||
->execute();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,72 +24,104 @@
|
|||
namespace OCA\Passman\Db;
|
||||
|
||||
|
||||
use OCP\AppFramework\Db\Mapper;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use OCA\Passman\Utility\Utils;
|
||||
|
||||
class SharingACLMapper extends Mapper {
|
||||
const TABLE_NAME = '*PREFIX*passman_sharing_acl';
|
||||
class SharingACLMapper extends QBMapper {
|
||||
const TABLE_NAME = 'passman_sharing_acl';
|
||||
|
||||
public function __construct(IDBConnection $db) {
|
||||
parent::__construct($db, 'passman_sharing_acl');
|
||||
}
|
||||
|
||||
public function createACLEntry(SharingACL $acl){
|
||||
return $this->insert($acl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the currently accepted share requests from the given user for the given vault guid
|
||||
* @param $user_id
|
||||
* @param $vault_guid
|
||||
* @return SharingACL[]
|
||||
*/
|
||||
public function getVaultEntries($user_id, $vault_guid) {
|
||||
$q = "SELECT * FROM ". self::TABLE_NAME ." WHERE user_id = ? AND vault_guid = ?";
|
||||
return $this->findEntities($q, [$user_id, $vault_guid]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the acl for a given item guid
|
||||
* @param $user_id
|
||||
* @param $item_guid
|
||||
* @return SharingACL
|
||||
*/
|
||||
public function getItemACL($user_id, $item_guid) {
|
||||
$q = "SELECT * FROM " . self::TABLE_NAME . " WHERE item_guid = ? AND ";
|
||||
$filter = [$item_guid];
|
||||
$q .= ($user_id === null) ? 'user_id is null' : 'user_id = ? ';
|
||||
if ($user_id !== null){
|
||||
$filter[] = $user_id;
|
||||
}
|
||||
|
||||
return $this->findEntity($q, $filter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the acl for a given item guid
|
||||
* @param $user_id
|
||||
* @param $item_guid
|
||||
* @return SharingACL
|
||||
*/
|
||||
public function updateCredentialACL(SharingACL $sharingACL) {
|
||||
return $this->update($sharingACL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the currently accepted share requests from the given user for the given vault guid
|
||||
* @param $user_id
|
||||
* @param $vault_id
|
||||
* @return SharingACL[]
|
||||
*/
|
||||
public function getCredentialAclList($item_guid) {
|
||||
$q = "SELECT * FROM ". self::TABLE_NAME ." WHERE item_guid = ?";
|
||||
return $this->findEntities($q, [$item_guid]);
|
||||
}
|
||||
|
||||
public function deleteShareACL(SharingACL $ACL){
|
||||
return $this->delete($ACL);
|
||||
public function __construct(IDBConnection $db) {
|
||||
parent::__construct($db, 'passman_sharing_acl');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SharingACL $acl
|
||||
* @return SharingACL|Entity
|
||||
*/
|
||||
public function createACLEntry(SharingACL $acl) {
|
||||
return $this->insert($acl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the currently accepted share requests from the given user for the given vault guid
|
||||
* @param $user_id
|
||||
* @param $vault_guid
|
||||
* @return SharingACL[]
|
||||
*/
|
||||
public function getVaultEntries(string $user_id, string $vault_guid) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->eq('vault_guid', $qb->createNamedParameter($vault_guid, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var SharingACL[] $entities */
|
||||
$entities = $this->findEntities($qb);
|
||||
return $entities;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the acl for a given item guid
|
||||
*
|
||||
* @param string $user_id
|
||||
* @param string $item_guid
|
||||
* @return SharingACL
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getItemACL(string $user_id, string $item_guid) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('item_guid', $qb->createNamedParameter($item_guid, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
if ($user_id === null) {
|
||||
$qb->andWhere($qb->expr()->isNull('user_id'));
|
||||
} else {
|
||||
$qb->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
}
|
||||
|
||||
/** @var SharingACL $entity */
|
||||
$entity = $this->findEntity($qb);
|
||||
return $entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an acl
|
||||
*
|
||||
* @param SharingACL $sharingACL
|
||||
* @return SharingACL|Entity
|
||||
*/
|
||||
public function updateCredentialACL(SharingACL $sharingACL) {
|
||||
return $this->update($sharingACL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the currently accepted share requests from the given user for the given vault guid
|
||||
*
|
||||
* @param string $item_guid
|
||||
* @return SharingACL[]
|
||||
*/
|
||||
public function getCredentialAclList(string $item_guid) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('item_guid', $qb->createNamedParameter($item_guid, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var SharingACL[] $entities */
|
||||
$entities = $this->findEntities($qb);
|
||||
return $entities;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SharingACL $ACL
|
||||
* @return SharingACL|Entity
|
||||
*/
|
||||
public function deleteShareACL(SharingACL $ACL) {
|
||||
return $this->delete($ACL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,61 +24,86 @@
|
|||
namespace OCA\Passman\Db;
|
||||
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\AppFramework\Db\Mapper;
|
||||
|
||||
class VaultMapper extends Mapper {
|
||||
private $utils;
|
||||
class VaultMapper extends QBMapper {
|
||||
const TABLE_NAME = 'passman_vaults';
|
||||
private Utils $utils;
|
||||
|
||||
public function __construct(IDBConnection $db, Utils $utils) {
|
||||
parent::__construct($db, 'passman_vaults');
|
||||
parent::__construct($db, self::TABLE_NAME);
|
||||
$this->utils = $utils;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
* @param int $vault_id
|
||||
* @param string $user_id
|
||||
* @return Vault[]
|
||||
*/
|
||||
public function find($vault_id, $user_id) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_vaults` ' .
|
||||
'WHERE `id`= ? and `user_id` = ?';
|
||||
return $this->findEntities($sql, [$vault_id, $user_id]);
|
||||
public function find(int $vault_id, string $user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($vault_id, IQueryBuilder::PARAM_INT)))
|
||||
->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var Vault[] $vaults */
|
||||
$vaults = $this->findEntities($qb);
|
||||
return $vaults;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
* @param string $vault_guid
|
||||
* @param string $user_id
|
||||
* @return Vault
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function findByGuid($vault_guid, $user_id) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_vaults` ' .
|
||||
'WHERE `guid`= ? and `user_id` = ?';
|
||||
return $this->findEntity($sql, [$vault_guid, $user_id]);
|
||||
public function findByGuid(string $vault_guid, string $user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('guid', $qb->createNamedParameter($vault_guid, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var Vault $vault */
|
||||
$vault = $this->findEntity($qb);
|
||||
return $vault;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
|
||||
* @param string $user_id
|
||||
* @return Vault[]
|
||||
*/
|
||||
public function findVaultsFromUser($userId){
|
||||
$sql = 'SELECT * FROM `*PREFIX*passman_vaults` ' .
|
||||
'WHERE `user_id` = ? ';
|
||||
$params = [$userId];
|
||||
return $this->findEntities($sql, $params);
|
||||
public function findVaultsFromUser(string $user_id) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from(self::TABLE_NAME)
|
||||
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user_id, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
/** @var Vault[] $vaults */
|
||||
$vaults = $this->findEntities($qb);
|
||||
return $vaults;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a vault
|
||||
* @param $vault_name
|
||||
* @param $userId
|
||||
* @return Vault
|
||||
*
|
||||
* @param string $vault_name
|
||||
* @param string $user_id
|
||||
* @return Vault|Entity
|
||||
*/
|
||||
public function create($vault_name, $userId){
|
||||
public function create(string $vault_name, string $user_id) {
|
||||
$vault = new Vault();
|
||||
$vault->setName($vault_name);
|
||||
$vault->setUserId($userId);
|
||||
$vault->setUserId($user_id);
|
||||
$vault->setGuid($this->utils->GUID());
|
||||
$vault->setCreated($this->utils->getTime());
|
||||
$vault->setLastAccess(0);
|
||||
|
@ -87,45 +112,52 @@ class VaultMapper extends Mapper {
|
|||
|
||||
/**
|
||||
* Update last access time of a vault
|
||||
* @param $vault_id
|
||||
* @param $user_id
|
||||
*
|
||||
* @param int $vault_id
|
||||
* @param string $user_id
|
||||
* @return Vault|Entity
|
||||
*/
|
||||
public function setLastAccess($vault_id, $user_id){
|
||||
public function setLastAccess(int $vault_id, string $user_id) {
|
||||
$vault = new Vault();
|
||||
$vault->setId($vault_id);
|
||||
$vault->setUserId($user_id);
|
||||
$vault->setLastAccess(Utils::getTime());
|
||||
$this->update($vault);
|
||||
return $this->update($vault);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update vault
|
||||
*
|
||||
* @param Vault $vault
|
||||
* @return Vault|Entity
|
||||
*/
|
||||
public function updateVault(Vault $vault){
|
||||
$this->update($vault);
|
||||
public function updateVault(Vault $vault) {
|
||||
return $this->update($vault);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the sharing key's
|
||||
* @param $vault_id
|
||||
* @param $privateKey
|
||||
* @param $publicKey
|
||||
*
|
||||
* @param int $vault_id
|
||||
* @param string $privateKey
|
||||
* @param string $publicKey
|
||||
* @return Vault|Entity
|
||||
*/
|
||||
public function updateSharingKeys($vault_id, $privateKey, $publicKey){
|
||||
public function updateSharingKeys(int $vault_id, string $privateKey, string $publicKey) {
|
||||
$vault = new Vault();
|
||||
$vault->setId($vault_id);
|
||||
$vault->setPrivateSharingKey($privateKey);
|
||||
$vault->setPublicSharingKey($publicKey);
|
||||
$vault->setSharingKeysGenerated($this->utils->getTime());
|
||||
$this->update($vault);
|
||||
return $this->update($vault);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a vault
|
||||
*
|
||||
* @param Vault $vault
|
||||
*/
|
||||
public function deleteVault(Vault $vault){
|
||||
public function deleteVault(Vault $vault) {
|
||||
$this->delete($vault);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,22 +24,21 @@
|
|||
namespace OCA\Passman\Service;
|
||||
|
||||
use OCA\Passman\Db\CredentialRevision;
|
||||
use OCP\IConfig;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
|
||||
use OCA\Passman\Db\CredentialRevisionMapper;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\IConfig;
|
||||
|
||||
|
||||
class CredentialRevisionService {
|
||||
|
||||
private $credentialRevisionMapper;
|
||||
private $encryptService;
|
||||
private CredentialRevisionMapper $credentialRevisionMapper;
|
||||
private EncryptService $encryptService;
|
||||
private $server_key;
|
||||
|
||||
public function __construct(CredentialRevisionMapper $credentialRevisionMapper, EncryptService $encryptService) {
|
||||
public function __construct(CredentialRevisionMapper $credentialRevisionMapper, EncryptService $encryptService, IConfig $config) {
|
||||
$this->credentialRevisionMapper = $credentialRevisionMapper;
|
||||
$this->encryptService = $encryptService;
|
||||
$this->server_key = \OC::$server->getConfig()->getSystemValue('passwordsalt', '');
|
||||
$this->server_key = $config->getSystemValue('passwordsalt', '');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -50,6 +49,7 @@ class CredentialRevisionService {
|
|||
* @param $credential_id
|
||||
* @param $edited_by
|
||||
* @return CredentialRevision
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function createRevision($credential, $userId, $credential_id, $edited_by) {
|
||||
$credential = $this->encryptService->encryptCredential($credential);
|
||||
|
@ -59,11 +59,11 @@ class CredentialRevisionService {
|
|||
/**
|
||||
* Get revisions of a credential
|
||||
*
|
||||
* @param $credential_id
|
||||
* @param null $user_id
|
||||
* @param int $credential_id
|
||||
* @param string|null $user_id
|
||||
* @return CredentialRevision[]
|
||||
*/
|
||||
public function getRevisions($credential_id, $user_id = null) {
|
||||
public function getRevisions(int $credential_id, string $user_id = null) {
|
||||
$result = $this->credentialRevisionMapper->getRevisions($credential_id, $user_id);
|
||||
foreach ($result as $index => $revision) {
|
||||
$c = json_decode(base64_decode($revision->getCredentialData()), true);
|
||||
|
@ -74,12 +74,11 @@ class CredentialRevisionService {
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param $credential_id
|
||||
* @param null $user_id
|
||||
* @param int $credential_id
|
||||
* @param string|null $user_id
|
||||
* @return CredentialRevision
|
||||
*/
|
||||
public function getRevision($credential_id, $user_id = null) {
|
||||
public function getRevision(int $credential_id, string $user_id = null) {
|
||||
$revision = $this->credentialRevisionMapper->getRevision($credential_id, $user_id);
|
||||
$c = json_decode(base64_decode($revision->getCredentialData()), true);
|
||||
$revision->setCredentialData($this->encryptService->decryptCredential($c));
|
||||
|
@ -89,11 +88,11 @@ class CredentialRevisionService {
|
|||
/**
|
||||
* Delete a revision
|
||||
*
|
||||
* @param $revision_id
|
||||
* @param $user_id
|
||||
* @param int $revision_id
|
||||
* @param string $user_id
|
||||
* @return CredentialRevision
|
||||
*/
|
||||
public function deleteRevision($revision_id, $user_id) {
|
||||
public function deleteRevision(int $revision_id, string $user_id) {
|
||||
return $this->credentialRevisionMapper->deleteRevision($revision_id, $user_id);
|
||||
}
|
||||
|
||||
|
@ -101,7 +100,8 @@ class CredentialRevisionService {
|
|||
* Update revision
|
||||
*
|
||||
* @param CredentialRevision $credentialRevision
|
||||
* @return CredentialRevision
|
||||
* @return CredentialRevision|Entity
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function updateRevision(CredentialRevision $credentialRevision) {
|
||||
$credential_data = $credentialRevision->getCredentialData();
|
||||
|
@ -110,4 +110,4 @@ class CredentialRevisionService {
|
|||
$credentialRevision->setCredentialData($credential_data);
|
||||
return $this->credentialRevisionMapper->update($credentialRevision);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,27 +24,27 @@
|
|||
namespace OCA\Passman\Service;
|
||||
|
||||
use OCA\Passman\Db\Credential;
|
||||
use OCA\Passman\Db\CredentialRevision;
|
||||
use OCA\Passman\Db\CredentialMapper;
|
||||
use OCA\Passman\Db\SharingACL;
|
||||
use OCA\Passman\Db\SharingACLMapper;
|
||||
use OCP\IConfig;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
|
||||
use OCA\Passman\Db\CredentialMapper;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\IConfig;
|
||||
|
||||
|
||||
class CredentialService {
|
||||
|
||||
private $credentialMapper;
|
||||
private $sharingACL;
|
||||
private $encryptService;
|
||||
private CredentialMapper $credentialMapper;
|
||||
private SharingACLMapper $sharingACL;
|
||||
private EncryptService $encryptService;
|
||||
private $server_key;
|
||||
|
||||
public function __construct(CredentialMapper $credentialMapper, SharingACLMapper $sharingACL, EncryptService $encryptService) {
|
||||
public function __construct(CredentialMapper $credentialMapper, SharingACLMapper $sharingACL, EncryptService $encryptService, IConfig $config) {
|
||||
$this->credentialMapper = $credentialMapper;
|
||||
$this->sharingACL = $sharingACL;
|
||||
$this->encryptService = $encryptService;
|
||||
$this->server_key = \OC::$server->getConfig()->getSystemValue('passwordsalt', '');
|
||||
$this->server_key = $config->getSystemValue('passwordsalt', '');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -52,8 +52,9 @@ class CredentialService {
|
|||
*
|
||||
* @param array $credential
|
||||
* @return Credential
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function createCredential($credential) {
|
||||
public function createCredential(array $credential) {
|
||||
$credential = $this->encryptService->encryptCredential($credential);
|
||||
return $this->credentialMapper->create($credential);
|
||||
}
|
||||
|
@ -61,11 +62,13 @@ class CredentialService {
|
|||
/**
|
||||
* Update credential
|
||||
*
|
||||
* @param $credential array | Credential
|
||||
* @param $useRawUser bool
|
||||
* @return Credential
|
||||
* @param array $credential
|
||||
* @param false $useRawUser
|
||||
* @return Credential|Entity
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function updateCredential($credential, $useRawUser = false) {
|
||||
public function updateCredential(array $credential, $useRawUser = false) {
|
||||
$credential = $this->encryptService->encryptCredential($credential);
|
||||
return $this->credentialMapper->updateCredential($credential, $useRawUser);
|
||||
}
|
||||
|
@ -73,8 +76,10 @@ class CredentialService {
|
|||
/**
|
||||
* Update credential
|
||||
*
|
||||
* @param $credential Credential
|
||||
* @return Credential
|
||||
* @param Credential $credential
|
||||
* @return Credential|Entity
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function upd(Credential $credential) {
|
||||
$credential = $this->encryptService->encryptCredential($credential);
|
||||
|
@ -85,7 +90,7 @@ class CredentialService {
|
|||
* Delete credential
|
||||
*
|
||||
* @param Credential $credential
|
||||
* @return \OCP\AppFramework\Db\Entity
|
||||
* @return Entity
|
||||
*/
|
||||
public function deleteCredential(Credential $credential) {
|
||||
return $this->credentialMapper->deleteCredential($credential);
|
||||
|
@ -94,11 +99,11 @@ class CredentialService {
|
|||
/**
|
||||
* Get credentials by vault id
|
||||
*
|
||||
* @param $vault_id
|
||||
* @param $user_id
|
||||
* @return \OCA\Passman\Db\Credential[]
|
||||
* @param int $vault_id
|
||||
* @param string $user_id
|
||||
* @return Credential[]
|
||||
*/
|
||||
public function getCredentialsByVaultId($vault_id, $user_id) {
|
||||
public function getCredentialsByVaultId(int $vault_id, string $user_id) {
|
||||
$credentials = $this->credentialMapper->getCredentialsByVaultId($vault_id, $user_id);
|
||||
foreach ($credentials as $index => $credential) {
|
||||
$credentials[$index] = $this->encryptService->decryptCredential($credential);
|
||||
|
@ -109,11 +114,11 @@ class CredentialService {
|
|||
/**
|
||||
* Get a random credential from given vault
|
||||
*
|
||||
* @param $vault_id
|
||||
* @param $user_id
|
||||
* @param int $vault_id
|
||||
* @param string $user_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function getRandomCredentialByVaultId($vault_id, $user_id) {
|
||||
public function getRandomCredentialByVaultId(int $vault_id, string $user_id) {
|
||||
$credentials = $this->credentialMapper->getRandomCredentialByVaultId($vault_id, $user_id);
|
||||
foreach ($credentials as $index => $credential) {
|
||||
$credentials[$index] = $this->encryptService->decryptCredential($credential);
|
||||
|
@ -124,10 +129,10 @@ class CredentialService {
|
|||
/**
|
||||
* Get expired credentials.
|
||||
*
|
||||
* @param $timestamp
|
||||
* @return \OCA\Passman\Db\Credential[]
|
||||
* @param int $timestamp
|
||||
* @return Credential[]
|
||||
*/
|
||||
public function getExpiredCredentials($timestamp) {
|
||||
public function getExpiredCredentials(int $timestamp) {
|
||||
$credentials = $this->credentialMapper->getExpiredCredentials($timestamp);
|
||||
foreach ($credentials as $index => $credential) {
|
||||
$credentials[$index] = $this->encryptService->decryptCredential($credential);
|
||||
|
@ -138,12 +143,13 @@ class CredentialService {
|
|||
/**
|
||||
* Get a single credential.
|
||||
*
|
||||
* @param $credential_id
|
||||
* @param $user_id
|
||||
* @return Credential
|
||||
* @param int $credential_id
|
||||
* @param string $user_id
|
||||
* @return array|Credential
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getCredentialById($credential_id, $user_id) {
|
||||
public function getCredentialById(int $credential_id, string $user_id) {
|
||||
$credential = $this->credentialMapper->getCredentialById($credential_id);
|
||||
if ($credential->getUserId() === $user_id) {
|
||||
return $this->encryptService->decryptCredential($credential);
|
||||
|
@ -160,10 +166,12 @@ class CredentialService {
|
|||
/**
|
||||
* Get credential label by credential id.
|
||||
*
|
||||
* @param $credential_id
|
||||
* @return Credential
|
||||
* @param int $credential_id
|
||||
* @return array|Credential
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getCredentialLabelById($credential_id) {
|
||||
public function getCredentialLabelById(int $credential_id) {
|
||||
$credential = $this->credentialMapper->getCredentialLabelById($credential_id);
|
||||
return $this->encryptService->decryptCredential($credential);
|
||||
}
|
||||
|
@ -171,11 +179,13 @@ class CredentialService {
|
|||
/**
|
||||
* Get credential by guid
|
||||
*
|
||||
* @param $credential_guid
|
||||
* @param null $user_id
|
||||
* @return Credential
|
||||
* @param string $credential_guid
|
||||
* @param string|null $user_id
|
||||
* @return array|Credential
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getCredentialByGUID($credential_guid, $user_id = null) {
|
||||
public function getCredentialByGUID(string $credential_guid, string $user_id = null) {
|
||||
$credential = $this->credentialMapper->getCredentialByGUID($credential_guid, $user_id);
|
||||
return $this->encryptService->decryptCredential($credential);
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ namespace OCA\Passman\Service;
|
|||
use OCA\Passman\Activity;
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\DB\Exception;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
|
@ -47,19 +48,20 @@ class CronService {
|
|||
$this->db = $db;
|
||||
}
|
||||
|
||||
|
||||
public function expireCredentials() {
|
||||
$expired_credentials = $this->credentialService->getExpiredCredentials($this->utils->getTime());
|
||||
foreach ($expired_credentials as $credential) {
|
||||
$link = ''; // @TODO create direct link to credential
|
||||
$sql = 'SELECT count(*) as `rows` from `*PREFIX*notifications` WHERE `subject`= \'credential_expired\' AND object_id=?';
|
||||
$id = $credential->getId();
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('notifications')
|
||||
->where($qb->expr()->eq('object_id', $qb->createNamedParameter($credential->getId(), IQueryBuilder::PARAM_INT)))
|
||||
->andWhere($qb->expr()->eq('subject', $qb->createNamedParameter('credential_expired', IQueryBuilder::PARAM_STR)));
|
||||
|
||||
try {
|
||||
$result = $this->db->executeQuery($sql, array($id));
|
||||
$this->logger->debug($credential->getLabel() . ' is expired, checking notifications!', array('app' => 'passman'));
|
||||
$notifications = intval($result->fetch()['rows']);
|
||||
if ($notifications === 0) {
|
||||
$notificationCount = $qb->execute()->rowCount();
|
||||
if ($notificationCount === 0) {
|
||||
$this->logger->debug($credential->getLabel() . ' is expired, adding notification!', array('app' => 'passman'));
|
||||
$this->activityService->add(
|
||||
Activity::SUBJECT_ITEM_EXPIRED, array($credential->getLabel(), $credential->getUserId()),
|
||||
|
|
|
@ -26,12 +26,10 @@ namespace OCA\Passman\Service;
|
|||
use OCA\Passman\Db\DeleteVaultRequest;
|
||||
use OCA\Passman\Db\DeleteVaultRequestMapper;
|
||||
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
|
||||
|
||||
class DeleteVaultRequestService {
|
||||
|
||||
private $deleteVaultRequestMapper;
|
||||
private DeleteVaultRequestMapper $deleteVaultRequestMapper;
|
||||
|
||||
public function __construct(DeleteVaultRequestMapper $deleteVaultRequestMapper) {
|
||||
$this->deleteVaultRequestMapper = $deleteVaultRequestMapper;
|
||||
|
@ -41,7 +39,7 @@ class DeleteVaultRequestService {
|
|||
* Create a new DeleteVaultRequest
|
||||
*
|
||||
* @param $request DeleteVaultRequest
|
||||
* @return \OCA\Passman\Db\DeleteVaultRequest
|
||||
* @return DeleteVaultRequest
|
||||
*/
|
||||
public function createRequest(DeleteVaultRequest $request) {
|
||||
return $this->deleteVaultRequestMapper->insert($request);
|
||||
|
@ -50,20 +48,23 @@ class DeleteVaultRequestService {
|
|||
/**
|
||||
* Create a new DeleteVaultRequest
|
||||
*
|
||||
* @return \OCA\Passman\Db\DeleteVaultRequest[]
|
||||
* @return DeleteVaultRequest[]
|
||||
*/
|
||||
public function getDeleteRequests() {
|
||||
return $this->deleteVaultRequestMapper->getDeleteRequests();
|
||||
/** @var DeleteVaultRequest[] $result */
|
||||
$result = $this->deleteVaultRequestMapper->getDeleteRequests();
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new DeleteVaultRequest
|
||||
*
|
||||
* @param $vault_id integer The vault id
|
||||
* @param $vault_guid string The vault guid
|
||||
* @return bool | DeleteVaultRequest
|
||||
*/
|
||||
public function getDeleteRequestForVault($vault_guid) {
|
||||
public function getDeleteRequestForVault(string $vault_guid) {
|
||||
try {
|
||||
/** @var DeleteVaultRequest $result */
|
||||
$result = $this->deleteVaultRequestMapper->getDeleteRequestsForVault($vault_guid);
|
||||
return $result;
|
||||
} catch (\Exception $e) {
|
||||
|
@ -75,11 +76,9 @@ class DeleteVaultRequestService {
|
|||
* Create a new DeleteVaultRequest
|
||||
*
|
||||
* @param $req DeleteVaultRequest
|
||||
* @return bool | DeleteVaultRequest
|
||||
*/
|
||||
public function removeDeleteRequestForVault(DeleteVaultRequest $req) {
|
||||
$this->deleteVaultRequestMapper->removeDeleteVaultRequest($req);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ namespace OCA\Passman\Service;
|
|||
use Icewind\SMB\Exception\Exception;
|
||||
use OCA\Passman\Db\Credential;
|
||||
use OCA\Passman\Db\File;
|
||||
use OCP\IConfig;
|
||||
|
||||
/**
|
||||
* A class to handle secure encryption and decryption of arbitrary data
|
||||
|
@ -84,14 +85,14 @@ class EncryptService {
|
|||
protected $rounds = 100;
|
||||
|
||||
/**
|
||||
* Constructor!
|
||||
*
|
||||
* EncryptService constructor.
|
||||
* @param SettingsService $settings
|
||||
* @param IConfig $config
|
||||
*/
|
||||
public function __construct(SettingsService $settings) {
|
||||
public function __construct(SettingsService $settings, IConfig $config) {
|
||||
$this->cipher = $settings->getAppSetting('server_side_encryption', 'aes-256-cbc');
|
||||
$password_salt = \OC::$server->getConfig()->getSystemValue('passwordsalt', '');
|
||||
$secret = \OC::$server->getConfig()->getSystemValue('secret', '');
|
||||
$password_salt = $config->getSystemValue('passwordsalt', '');
|
||||
$secret = $config->getSystemValue('secret', '');
|
||||
$this->server_key = $password_salt . $secret;
|
||||
$this->rounds = $settings->getAppSetting('rounds_pbkdf2_stretching', 100);
|
||||
}
|
||||
|
@ -396,4 +397,4 @@ class EncryptService {
|
|||
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,32 +24,35 @@
|
|||
namespace OCA\Passman\Service;
|
||||
|
||||
use OCA\Passman\Db\File;
|
||||
use OCP\IConfig;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
|
||||
use OCA\Passman\Db\FileMapper;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\IConfig;
|
||||
|
||||
|
||||
class FileService {
|
||||
|
||||
private $fileMapper;
|
||||
private $encryptService;
|
||||
private FileMapper $fileMapper;
|
||||
private EncryptService $encryptService;
|
||||
private $server_key;
|
||||
|
||||
public function __construct(FileMapper $fileMapper, EncryptService $encryptService) {
|
||||
public function __construct(FileMapper $fileMapper, EncryptService $encryptService, IConfig $config) {
|
||||
$this->fileMapper = $fileMapper;
|
||||
$this->encryptService = $encryptService;
|
||||
$this->server_key = \OC::$server->getConfig()->getSystemValue('passwordsalt', '');
|
||||
$this->server_key = $config->getSystemValue('passwordsalt', '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single file. This function also returns the file content.
|
||||
*
|
||||
* @param $fileId
|
||||
* @param null $userId
|
||||
* @return \OCA\Passman\Db\File
|
||||
* @param int $fileId
|
||||
* @param string|null $userId
|
||||
* @return array|File
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getFile($fileId, $userId = null) {
|
||||
public function getFile(int $fileId, string $userId = null) {
|
||||
$file = $this->fileMapper->getFile($fileId, $userId);
|
||||
return $this->encryptService->decryptFile($file);
|
||||
}
|
||||
|
@ -57,11 +60,13 @@ class FileService {
|
|||
/**
|
||||
* Get a single file. This function also returns the file content.
|
||||
*
|
||||
* @param $file_guid
|
||||
* @param null $userId
|
||||
* @return \OCA\Passman\Db\File
|
||||
* @param string $file_guid
|
||||
* @param string|null $userId
|
||||
* @return array|File
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getFileByGuid($file_guid, $userId = null) {
|
||||
public function getFileByGuid(string $file_guid, string $userId = null) {
|
||||
$file = $this->fileMapper->getFileByGuid($file_guid, $userId);
|
||||
return $this->encryptService->decryptFile($file);
|
||||
}
|
||||
|
@ -69,11 +74,13 @@ class FileService {
|
|||
/**
|
||||
* Upload a new file,
|
||||
*
|
||||
* @param $file array
|
||||
* @param $userId
|
||||
* @return \OCA\Passman\Db\File
|
||||
* @param array $file
|
||||
* @param string $userId
|
||||
* @return array|File
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function createFile($file, $userId) {
|
||||
public function createFile(array $file, string $userId) {
|
||||
$file = $this->encryptService->encryptFile($file);
|
||||
$file = $this->fileMapper->create($file, $userId);
|
||||
return $this->getFile($file->getId());
|
||||
|
@ -82,11 +89,11 @@ class FileService {
|
|||
/**
|
||||
* Delete file
|
||||
*
|
||||
* @param $file_id
|
||||
* @param $userId
|
||||
* @return \OCA\Passman\Db\File
|
||||
* @param int $file_id
|
||||
* @param string $userId
|
||||
* @return File|Entity
|
||||
*/
|
||||
public function deleteFile($file_id, $userId) {
|
||||
public function deleteFile(int $file_id, string $userId) {
|
||||
return $this->fileMapper->deleteFile($file_id, $userId);
|
||||
}
|
||||
|
||||
|
@ -94,9 +101,9 @@ class FileService {
|
|||
* Update file
|
||||
*
|
||||
* @param File $file
|
||||
* @return \OCA\Passman\Db\File
|
||||
* @return File
|
||||
*/
|
||||
public function updateFile($file) {
|
||||
public function updateFile(File $file) {
|
||||
$file = $this->encryptService->encryptFile($file);
|
||||
return $this->fileMapper->updateFile($file);
|
||||
}
|
||||
|
@ -107,12 +114,12 @@ class FileService {
|
|||
* @param string $userId
|
||||
* @return File[]
|
||||
*/
|
||||
public function getFilesFromUser($userId){
|
||||
public function getFilesFromUser(string $userId) {
|
||||
$files = $this->fileMapper->getFilesFromUser($userId);
|
||||
$results = array();
|
||||
foreach ($files as $file){
|
||||
foreach ($files as $file) {
|
||||
array_push($results, $this->encryptService->decryptFile($file));
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,20 +24,22 @@
|
|||
namespace OCA\Passman\Service;
|
||||
|
||||
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\Notification\IManager;
|
||||
|
||||
class NotificationService {
|
||||
|
||||
private IManager $manager;
|
||||
private IURLGenerator $urlGenerator;
|
||||
|
||||
public function __construct() {
|
||||
$this->manager = \OC::$server->getNotificationManager();
|
||||
public function __construct(IManager $IManager, IURLGenerator $urlGenerator) {
|
||||
$this->manager = $IManager;
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
}
|
||||
|
||||
function credentialExpiredNotification($credential) {
|
||||
$urlGenerator = \OC::$server->getURLGenerator();
|
||||
$link = $urlGenerator->getAbsoluteURL($urlGenerator->linkTo('', 'index.php/apps/passman/#/vault/' . $credential->getVaultId() . '/edit/' . $credential->getId()));
|
||||
$api = $urlGenerator->getAbsoluteURL($urlGenerator->linkTo('', 'index.php/apps/passman'));
|
||||
$link = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman/#/vault/' . $credential->getVaultId() . '/edit/' . $credential->getId()));
|
||||
$api = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman'));
|
||||
$notification = $this->manager->createNotification();
|
||||
$remindAction = $notification->createAction();
|
||||
$remindAction->setLabel('remind')
|
||||
|
@ -61,9 +63,8 @@ class NotificationService {
|
|||
|
||||
|
||||
function credentialSharedNotification($data) {
|
||||
$urlGenerator = \OC::$server->getURLGenerator();
|
||||
$link = $urlGenerator->getAbsoluteURL($urlGenerator->linkTo('', 'index.php/apps/passman/#/'));
|
||||
$api = $urlGenerator->getAbsoluteURL($urlGenerator->linkTo('', 'index.php/apps/passman'));
|
||||
$link = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman/#/'));
|
||||
$api = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman'));
|
||||
$notification = $this->manager->createNotification();
|
||||
|
||||
$declineAction = $notification->createAction();
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
namespace OCA\Passman\Service;
|
||||
|
||||
|
||||
use Icewind\SMB\Share;
|
||||
use OCA\Passman\Db\CredentialMapper;
|
||||
use OCA\Passman\Db\CredentialRevision;
|
||||
use OCA\Passman\Db\ShareRequest;
|
||||
|
@ -33,13 +32,19 @@ use OCA\Passman\Db\SharingACL;
|
|||
use OCA\Passman\Db\SharingACLMapper;
|
||||
use OCA\Passman\Utility\Utils;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\DB\Exception;
|
||||
use OCP\DB\IResult;
|
||||
use OCP\Notification\IManager;
|
||||
|
||||
class ShareService {
|
||||
private $sharingACL;
|
||||
private $shareRequest;
|
||||
private $credential;
|
||||
private $revisions;
|
||||
private $encryptService;
|
||||
private SharingACLMapper $sharingACL;
|
||||
private ShareRequestMapper $shareRequest;
|
||||
private CredentialMapper $credential;
|
||||
private CredentialRevisionService $revisions;
|
||||
private EncryptService $encryptService;
|
||||
private IManager $IManager;
|
||||
|
||||
|
||||
public function __construct(
|
||||
|
@ -47,13 +52,15 @@ class ShareService {
|
|||
ShareRequestMapper $shareRequest,
|
||||
CredentialMapper $credentials,
|
||||
CredentialRevisionService $revisions,
|
||||
EncryptService $encryptService
|
||||
EncryptService $encryptService,
|
||||
IManager $IManager
|
||||
) {
|
||||
$this->sharingACL = $sharingACL;
|
||||
$this->shareRequest = $shareRequest;
|
||||
$this->credential = $credentials;
|
||||
$this->revisions = $revisions;
|
||||
$this->encryptService = $encryptService;
|
||||
$this->IManager = $IManager;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -89,6 +96,10 @@ class ShareService {
|
|||
return $requests;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SharingACL $acl
|
||||
* @return Entity
|
||||
*/
|
||||
public function createACLEntry(SharingACL $acl) {
|
||||
if ($acl->getCreated() === null) $acl->setCreated((new \DateTime())->getTimestamp());
|
||||
return $this->sharingACL->createACLEntry($acl);
|
||||
|
@ -97,11 +108,14 @@ class ShareService {
|
|||
/**
|
||||
* Applies the given share, defaults to no expire
|
||||
*
|
||||
* @param $item_guid
|
||||
* @param $target_vault_guid
|
||||
* @param $final_shared_key
|
||||
* @param string $item_guid
|
||||
* @param string $target_vault_guid
|
||||
* @param string $final_shared_key
|
||||
* @throws DoesNotExistException
|
||||
* @throws Exception
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function applyShare($item_guid, $target_vault_guid, $final_shared_key) {
|
||||
public function applyShare(string $item_guid, string $target_vault_guid, string $final_shared_key) {
|
||||
$request = $this->shareRequest->getRequestByItemAndVaultGuid($item_guid, $target_vault_guid);
|
||||
$permissions = $request->getPermissions();
|
||||
|
||||
|
@ -123,21 +137,23 @@ class ShareService {
|
|||
/**
|
||||
* Obtains pending requests for the given user ID
|
||||
*
|
||||
* @param $user_id
|
||||
* @return \OCA\Passman\Db\ShareRequest[]
|
||||
* @param string $user_id
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getUserPendingRequests($user_id) {
|
||||
public function getUserPendingRequests(string $user_id) {
|
||||
return $this->shareRequest->getUserPendingRequests($user_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get shared credentials from a user
|
||||
*
|
||||
* @param $user_id
|
||||
* @param $vault_guid
|
||||
* @return \OCA\Passman\Db\SharingACL[]
|
||||
* @param string $user_id
|
||||
* @param string $vault_guid
|
||||
* @return array
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getSharedItems($user_id, $vault_guid) {
|
||||
public function getSharedItems(string $user_id, string $vault_guid) {
|
||||
$entries = $this->sharingACL->getVaultEntries($user_id, $vault_guid);
|
||||
|
||||
$return = [];
|
||||
|
@ -159,15 +175,22 @@ class ShareService {
|
|||
/**
|
||||
* Gets the acl for a given item guid
|
||||
*
|
||||
* @param $user_id
|
||||
* @param $item_guid
|
||||
* @param string $user_id
|
||||
* @param string $item_guid
|
||||
* @return SharingACL
|
||||
*/
|
||||
public function getACL($user_id, $item_guid) {
|
||||
public function getACL(string $user_id, string $item_guid) {
|
||||
return $this->sharingACL->getItemACL($user_id, $item_guid);
|
||||
}
|
||||
|
||||
public function getSharedItem($user_id, $item_guid) {
|
||||
/**
|
||||
* @param string $user_id
|
||||
* @param string $item_guid
|
||||
* @return array|mixed
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getSharedItem(string $user_id, string $item_guid) {
|
||||
$acl = $this->sharingACL->getItemACL($user_id, $item_guid);
|
||||
|
||||
// Check if the user can read the credential, probably unnecesary, but just to be sure
|
||||
|
@ -188,11 +211,11 @@ class ShareService {
|
|||
/**
|
||||
* Gets history from the given item checking the user's permissions to access it
|
||||
*
|
||||
* @param $user_id
|
||||
* @param $item_guid
|
||||
* @param string $user_id
|
||||
* @param string $item_guid
|
||||
* @return CredentialRevision[]
|
||||
*/
|
||||
public function getItemHistory($user_id, $item_guid) {
|
||||
public function getItemHistory(string $user_id, string $item_guid) {
|
||||
$acl = $this->sharingACL->getItemACL($user_id, $item_guid);
|
||||
if (!$acl->hasPermission(SharingACL::READ | SharingACL::HISTORY)) return [];
|
||||
|
||||
|
@ -204,7 +227,8 @@ class ShareService {
|
|||
* Deletes a share request by the item ID
|
||||
*
|
||||
* @param ShareRequest $request
|
||||
* @return \PDOStatement
|
||||
* @return int|IResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public function cleanItemRequestsForUser(ShareRequest $request) {
|
||||
return $this->shareRequest->cleanItemRequestsForUser($request->getItemId(), $request->getTargetUserId());
|
||||
|
@ -213,21 +237,25 @@ class ShareService {
|
|||
/**
|
||||
* Get an share request by id
|
||||
*
|
||||
* @param $id
|
||||
* @param int $id
|
||||
* @return ShareRequest
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getShareRequestById($id) {
|
||||
public function getShareRequestById(int $id) {
|
||||
return $this->shareRequest->getShareRequestById($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an share request by $item_guid and $target_vault_guid
|
||||
*
|
||||
* @param $item_guid
|
||||
* @param $target_vault_guid
|
||||
* @param string $item_guid
|
||||
* @param string $target_vault_guid
|
||||
* @return ShareRequest
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getRequestByGuid($item_guid, $target_vault_guid) {
|
||||
public function getRequestByGuid(string $item_guid, string $target_vault_guid) {
|
||||
return $this->shareRequest->getRequestByItemAndVaultGuid($item_guid, $target_vault_guid);
|
||||
}
|
||||
|
||||
|
@ -235,41 +263,48 @@ class ShareService {
|
|||
* Get the access control list by item guid
|
||||
*
|
||||
* @param string $item_guid
|
||||
* @return \OCA\Passman\Db\SharingACL[]
|
||||
* @return SharingACL[]
|
||||
*/
|
||||
public function getCredentialAclList($item_guid) {
|
||||
public function getCredentialAclList(string $item_guid) {
|
||||
return $this->sharingACL->getCredentialAclList($item_guid);
|
||||
}
|
||||
|
||||
public function getCredentialPendingAclList($item_guid) {
|
||||
/**
|
||||
* @param string $item_guid
|
||||
* @return ShareRequest[]
|
||||
* @throws Exception
|
||||
*/
|
||||
public function getCredentialPendingAclList(string $item_guid) {
|
||||
return $this->shareRequest->getRequestsByItemGuidGroupedByUser($item_guid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the ACL on the credential for the user
|
||||
*
|
||||
* @param $user_id
|
||||
* @param $item_guid
|
||||
* @param string $user_id
|
||||
* @param string $item_guid
|
||||
* @return SharingACL
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
*/
|
||||
public function getCredentialAclForUser($user_id, $item_guid) {
|
||||
public function getCredentialAclForUser(string $user_id, string $item_guid) {
|
||||
return $this->sharingACL->getItemACL($user_id, $item_guid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get pending share requests by guid
|
||||
*
|
||||
* @param string $item_guid
|
||||
* @return \OCA\Passman\Db\ShareRequest[]
|
||||
* @param string $item_guid
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getShareRequestsByGuid($item_guid) {
|
||||
public function getShareRequestsByGuid(string $item_guid) {
|
||||
return $this->shareRequest->getShareRequestsByItemGuid($item_guid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get pending share requests by guid
|
||||
*
|
||||
* @param ShareRequest $request
|
||||
* @param ShareRequest $request
|
||||
* @return ShareRequest
|
||||
*/
|
||||
public function deleteShareRequest(ShareRequest $request) {
|
||||
|
@ -279,8 +314,8 @@ class ShareService {
|
|||
/**
|
||||
* Delete ACL
|
||||
*
|
||||
* @param ShareRequest $request
|
||||
* @return \OCA\Passman\Db\ShareRequest[]
|
||||
* @param SharingACL $ACL
|
||||
* @return SharingACL|Entity
|
||||
*/
|
||||
public function deleteShareACL(SharingACL $ACL) {
|
||||
return $this->sharingACL->deleteShareACL($ACL);
|
||||
|
@ -296,6 +331,10 @@ class ShareService {
|
|||
return $this->sharingACL->updateCredentialACL($sharingACL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ShareRequest $shareRequest
|
||||
* @return ShareRequest
|
||||
*/
|
||||
public function updateCredentialShareRequest(ShareRequest $shareRequest) {
|
||||
return $this->shareRequest->updateShareRequest($shareRequest);
|
||||
}
|
||||
|
@ -304,15 +343,22 @@ class ShareService {
|
|||
/**
|
||||
* Get pending share requests by guid and uid
|
||||
*
|
||||
* @param ShareRequest $request
|
||||
* @return \OCA\Passman\Db\ShareRequest[]
|
||||
* @param string $item_guid
|
||||
* @param string $user_id
|
||||
* @return ShareRequest[]
|
||||
*/
|
||||
public function getPendingShareRequestsForCredential($item_guid, $user_id) {
|
||||
public function getPendingShareRequestsForCredential(string $item_guid, string $user_id) {
|
||||
return $this->shareRequest->getPendingShareRequests($item_guid, $user_id);
|
||||
}
|
||||
|
||||
|
||||
public function updatePendingShareRequestsForCredential($item_guid, $user_id, $permissions) {
|
||||
/**
|
||||
* @param string $item_guid
|
||||
* @param string $user_id
|
||||
* @param int $permissions
|
||||
* @return int|IResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public function updatePendingShareRequestsForCredential(string $item_guid, string $user_id, int $permissions) {
|
||||
return $this->shareRequest->updatePendingRequestPermissions($item_guid, $user_id, $permissions);
|
||||
}
|
||||
|
||||
|
@ -321,8 +367,7 @@ class ShareService {
|
|||
* This will delete all ACL's and share requests.
|
||||
* @param string $item_guid
|
||||
*/
|
||||
|
||||
public function unshareCredential($item_guid) {
|
||||
public function unshareCredential(string $item_guid) {
|
||||
$acl_list = $this->getCredentialAclList($item_guid);
|
||||
$request_list = $this->getShareRequestsByGuid($item_guid);
|
||||
foreach ($acl_list as $ACL) {
|
||||
|
@ -330,12 +375,11 @@ class ShareService {
|
|||
}
|
||||
foreach ($request_list as $request) {
|
||||
$this->deleteShareRequest($request);
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
$notification = $this->IManager->createNotification();
|
||||
$notification->setApp('passman')
|
||||
->setObject('passman_share_request', $request->getId())
|
||||
->setUser($request->getTargetUserId());
|
||||
$manager->markProcessed($notification);
|
||||
$this->IManager->markProcessed($notification);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
namespace OCA\Passman\Service;
|
||||
|
||||
use OCA\Passman\Db\Vault;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\IConfig;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
|
||||
|
@ -82,6 +83,7 @@ class VaultService {
|
|||
/**
|
||||
* Update vault
|
||||
* @param $vault
|
||||
* @return Vault|Entity
|
||||
*/
|
||||
public function updateVault($vault) {
|
||||
return $this->vaultMapper->updateVault($vault);
|
||||
|
@ -91,16 +93,18 @@ class VaultService {
|
|||
* Update last access time of a vault.
|
||||
* @param $vault_id
|
||||
* @param $user_id
|
||||
* @return Vault|Entity
|
||||
*/
|
||||
public function setLastAccess($vault_id, $user_id){
|
||||
return $this->vaultMapper->setLastAccess($vault_id, $user_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uodate sharing keys of a vault.
|
||||
* Update sharing keys of a vault.
|
||||
* @param $vault_id
|
||||
* @param $privateKey
|
||||
* @param $publicKey
|
||||
* @return Vault|Entity
|
||||
*/
|
||||
public function updateSharingKeys($vault_id, $privateKey, $publicKey){
|
||||
return $this->vaultMapper->updateSharingKeys($vault_id, $privateKey, $publicKey);
|
||||
|
@ -117,4 +121,4 @@ class VaultService {
|
|||
$this->vaultMapper->deleteVault($vault);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace OCA\Passman\Settings;
|
|||
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use OCP\App;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
|
@ -35,15 +35,18 @@ class Admin implements ISettings {
|
|||
|
||||
protected IConfig $config;
|
||||
private IL10N $l;
|
||||
private IAppManager $appManager;
|
||||
|
||||
/**
|
||||
* Admin constructor.
|
||||
* @param IConfig $config
|
||||
* @param IL10N $l
|
||||
* @param IAppManager $appManager
|
||||
*/
|
||||
public function __construct(IConfig $config, IL10N $l) {
|
||||
public function __construct(IConfig $config, IL10N $l, IAppManager $appManager) {
|
||||
$this->config = $config;
|
||||
$this->l = $l;
|
||||
$this->appManager = $appManager;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -51,8 +54,7 @@ class Admin implements ISettings {
|
|||
*/
|
||||
public function getForm(): TemplateResponse {
|
||||
$checkVersion = $this->config->getAppValue('passman', 'check_version', '1') === '1';
|
||||
$AppInstance = new App();
|
||||
$localVersion = $AppInstance->getAppInfo("passman")["version"];
|
||||
$localVersion = $this->appManager->getAppInfo('passman')["version"];
|
||||
$githubVersion = $this->l->t('Unable to get version info');
|
||||
if ($checkVersion) {
|
||||
// get latest master version
|
||||
|
|
|
@ -29,6 +29,7 @@ use OCA\Passman\Service\CredentialRevisionService;
|
|||
use OCA\Passman\Service\CredentialService;
|
||||
use OCA\Passman\Service\EncryptService;
|
||||
use OCA\Passman\Service\FileService;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Migration\IOutput;
|
||||
use OCP\Migration\IRepairStep;
|
||||
|
@ -59,14 +60,14 @@ class ServerSideEncryption implements IRepairStep {
|
|||
private $fileService;
|
||||
|
||||
public function __construct(EncryptService $encryptService, IDBConnection $db, LoggerInterface $logger, CredentialService $credentialService, CredentialRevisionService $revisionService,
|
||||
FileService $fileService) {
|
||||
FileService $fileService, IConfig $config) {
|
||||
$this->encryptService = $encryptService;
|
||||
$this->db = $db;
|
||||
$this->logger = $logger;
|
||||
$this->credentialService = $credentialService;
|
||||
$this->revisionService = $revisionService;
|
||||
$this->fileService = $fileService;
|
||||
$this->installedVersion = \OC::$server->getConfig()->getAppValue('passman', 'installed_version');
|
||||
$this->installedVersion = $config->getAppValue('passman', 'installed_version');
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
|
@ -83,19 +84,27 @@ class ServerSideEncryption implements IRepairStep {
|
|||
}
|
||||
}
|
||||
|
||||
private function fetchAll($sql) {
|
||||
return $this->db->executeQuery($sql)->fetchAll();
|
||||
private function fetchAll(string $table) {
|
||||
// restrict access to passman tables
|
||||
if (substr($table, 0, strlen('passman_')) === 'passman_') {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$result = $qb->select('*')
|
||||
->from($table)
|
||||
->execute();
|
||||
return $result->fetchAll();
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
private function encryptCredentials() {
|
||||
$credentials = $this->fetchAll('SELECT * FROM `*PREFIX*passman_credentials`');
|
||||
$credentials = $this->fetchAll('passman_credentials');
|
||||
foreach ($credentials as $credential) {
|
||||
$this->credentialService->updateCredential($credential);
|
||||
}
|
||||
}
|
||||
|
||||
private function encryptRevisions() {
|
||||
$revisions = $this->fetchAll('SELECT * FROM `*PREFIX*passman_revisions`');
|
||||
$revisions = $this->fetchAll('passman_revisions');
|
||||
foreach ($revisions as $_revision) {
|
||||
$revision = new CredentialRevision();
|
||||
$revision->setId($_revision['id']);
|
||||
|
@ -110,7 +119,7 @@ class ServerSideEncryption implements IRepairStep {
|
|||
}
|
||||
|
||||
private function encryptFiles() {
|
||||
$files = $this->fetchAll('SELECT * FROM `*PREFIX*passman_files`');
|
||||
$files = $this->fetchAll('passman_files');
|
||||
foreach ($files as $_file) {
|
||||
$file = new File();
|
||||
$file->setId($_file['id']);
|
||||
|
|
Loading…
Add table
Reference in a new issue