migrate deprecated (database access) methods

This commit is contained in:
binsky 2021-03-14 18:24:02 +01:00
parent a361f31022
commit c7c3f24215
21 changed files with 872 additions and 573 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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()),

View file

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

View file

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

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

View file

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

View file

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

View file

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

View file

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

View file

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