2016-09-09 23:36:35 +08:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Nextcloud - passman
|
|
|
|
*
|
|
|
|
* This file is licensed under the Affero General Public License version 3 or
|
|
|
|
* later. See the COPYING file.
|
|
|
|
*
|
|
|
|
* @author Sander Brand <brantje@gmail.com>
|
|
|
|
* @copyright Sander Brand 2016
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace OCA\Passman\Controller;
|
|
|
|
|
|
|
|
use OCP\IRequest;
|
2016-09-12 01:45:20 +08:00
|
|
|
use OCP\AppFramework\Http\JSONResponse;
|
2016-09-10 00:02:53 +08:00
|
|
|
use OCP\AppFramework\ApiController;
|
2016-09-12 01:45:20 +08:00
|
|
|
use OCA\Passman\Service\CredentialService;
|
2016-09-23 22:52:41 +08:00
|
|
|
use OCA\Passman\Activity;
|
|
|
|
use OCA\Passman\Service\ActivityService;
|
2016-09-24 17:40:15 +08:00
|
|
|
use OCA\Passman\Service\CredentialRevisionService;
|
2016-09-24 18:59:19 +08:00
|
|
|
|
2016-09-12 01:45:20 +08:00
|
|
|
class CredentialController extends ApiController {
|
2016-09-09 23:36:35 +08:00
|
|
|
private $userId;
|
2016-09-12 01:45:20 +08:00
|
|
|
private $credentialService;
|
2016-09-23 22:52:41 +08:00
|
|
|
private $activityService;
|
2016-09-24 17:40:15 +08:00
|
|
|
private $credentialRevisionService;
|
2016-09-15 03:12:10 +08:00
|
|
|
|
2016-09-12 01:45:20 +08:00
|
|
|
public function __construct($AppName,
|
|
|
|
IRequest $request,
|
|
|
|
$UserId,
|
2016-09-23 22:52:41 +08:00
|
|
|
CredentialService $credentialService,
|
2016-09-24 17:40:15 +08:00
|
|
|
ActivityService $activityService,
|
|
|
|
CredentialRevisionService $credentialRevisionService) {
|
2016-09-09 23:36:35 +08:00
|
|
|
parent::__construct($AppName, $request);
|
|
|
|
$this->userId = $UserId;
|
2016-09-12 01:45:20 +08:00
|
|
|
$this->credentialService = $credentialService;
|
2016-09-23 22:52:41 +08:00
|
|
|
$this->activityService = $activityService;
|
2016-09-24 17:40:15 +08:00
|
|
|
$this->credentialRevisionService = $credentialRevisionService;
|
2016-09-09 23:36:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @NoAdminRequired
|
|
|
|
*/
|
2016-09-12 01:45:20 +08:00
|
|
|
public function createCredential($changed, $created,
|
|
|
|
$credential_id, $custom_fields, $delete_time,
|
|
|
|
$description, $email, $expire_time, $favicon, $files, $guid,
|
|
|
|
$hidden, $label, $otp, $password, $renew_interval,
|
|
|
|
$tags, $url, $username, $vault_id) {
|
|
|
|
$credential = array(
|
|
|
|
'credential_id' => $credential_id,
|
|
|
|
'guid' => $guid,
|
|
|
|
'user_id' => $this->userId,
|
|
|
|
'vault_id' => $vault_id,
|
|
|
|
'label' => $label,
|
|
|
|
'description' => $description,
|
|
|
|
'created' => $created,
|
|
|
|
'changed' => $changed,
|
|
|
|
'tags' => $tags,
|
|
|
|
'email' => $email,
|
|
|
|
'username' => $username,
|
|
|
|
'password' => $password,
|
|
|
|
'url' => $url,
|
|
|
|
'favicon' => $favicon,
|
|
|
|
'renew_interval' => $renew_interval,
|
|
|
|
'expire_time' => $expire_time,
|
|
|
|
'delete_time' => $delete_time,
|
|
|
|
'files' => $files,
|
|
|
|
'custom_fields' => $custom_fields,
|
|
|
|
'otp' => $otp,
|
|
|
|
'hidden' => $hidden,
|
|
|
|
|
|
|
|
);
|
|
|
|
$credential = $this->credentialService->createCredential($credential);
|
2016-09-23 22:52:41 +08:00
|
|
|
$link = ''; // @TODO create direct link to credential
|
|
|
|
$this->activityService->add(
|
|
|
|
Activity::SUBJECT_ITEM_CREATED_SELF, array($label, $this->userId),
|
|
|
|
'', array(),
|
|
|
|
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
|
2016-09-12 01:45:20 +08:00
|
|
|
return new JSONResponse($credential);
|
2016-09-09 23:36:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @NoAdminRequired
|
|
|
|
*/
|
2016-09-10 00:46:20 +08:00
|
|
|
public function getCredential($credential_id) {
|
2016-09-24 00:17:47 +08:00
|
|
|
return new JSONResponse($this->credentialService->getCredentialById($credential_id, $this->userId));
|
2016-09-09 23:36:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @NoAdminRequired
|
|
|
|
*/
|
2016-09-15 03:12:10 +08:00
|
|
|
public function updateCredential($changed, $created,
|
|
|
|
$credential_id, $custom_fields, $delete_time,
|
|
|
|
$description, $email, $expire_time, $favicon, $files, $guid,
|
|
|
|
$hidden, $label, $otp, $password, $renew_interval,
|
2016-10-03 00:59:20 +08:00
|
|
|
$tags, $url, $username, $vault_id, $revision_created, $shared_key) {
|
2016-09-15 03:12:10 +08:00
|
|
|
$credential = array(
|
|
|
|
'credential_id' => $credential_id,
|
|
|
|
'guid' => $guid,
|
|
|
|
'user_id' => $this->userId,
|
|
|
|
'label' => $label,
|
|
|
|
'description' => $description,
|
|
|
|
'created' => $created,
|
|
|
|
'changed' => $changed,
|
2016-09-16 20:01:25 +08:00
|
|
|
'vault_id' => $vault_id,
|
2016-09-15 03:12:10 +08:00
|
|
|
'tags' => $tags,
|
|
|
|
'email' => $email,
|
|
|
|
'username' => $username,
|
|
|
|
'password' => $password,
|
|
|
|
'url' => $url,
|
|
|
|
'favicon' => $favicon,
|
|
|
|
'renew_interval' => $renew_interval,
|
|
|
|
'expire_time' => $expire_time,
|
|
|
|
'files' => $files,
|
|
|
|
'custom_fields' => $custom_fields,
|
2016-09-16 20:01:25 +08:00
|
|
|
'delete_time' => $delete_time,
|
|
|
|
'hidden' => $hidden,
|
2016-09-15 03:12:10 +08:00
|
|
|
'otp' => $otp,
|
2016-10-03 23:38:45 +08:00
|
|
|
'shared_key' => (!empty($shared_key)) ? $shared_key : '',
|
2016-09-15 03:12:10 +08:00
|
|
|
);
|
2016-09-23 22:52:41 +08:00
|
|
|
|
2016-09-24 02:50:14 +08:00
|
|
|
$storedCredential = $this->credentialService->getCredentialById($credential_id, $this->userId);
|
|
|
|
|
2016-09-23 22:52:41 +08:00
|
|
|
$link = ''; // @TODO create direct link to credential
|
2016-09-24 18:59:19 +08:00
|
|
|
if ($revision_created) {
|
|
|
|
$this->activityService->add(
|
|
|
|
'item_apply_revision_self', array($label, $this->userId, $revision_created),
|
|
|
|
'', array(),
|
|
|
|
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
|
|
|
|
} else if (($storedCredential->getDeleteTime() == 0) && $delete_time > 0) {
|
2016-09-23 22:52:41 +08:00
|
|
|
$this->activityService->add(
|
|
|
|
'item_deleted_self', array($label, $this->userId),
|
|
|
|
'', array(),
|
|
|
|
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
|
|
|
|
} else if (($storedCredential->getDeleteTime() > 0) && $delete_time == 0) {
|
|
|
|
$this->activityService->add(
|
|
|
|
'item_recovered_self', array($label, $this->userId),
|
|
|
|
'', array(),
|
|
|
|
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
|
|
|
|
} else if ($label != $storedCredential->getLabel()) {
|
|
|
|
$this->activityService->add(
|
|
|
|
'item_renamed_self', array($storedCredential->getLabel(), $label, $this->userId),
|
|
|
|
'', array(),
|
2016-09-24 18:59:19 +08:00
|
|
|
$link, $this->userId, Activity::TYPE_ITEM_RENAMED);
|
2016-09-23 22:52:41 +08:00
|
|
|
} else {
|
|
|
|
$this->activityService->add(
|
|
|
|
'item_edited_self', array($label, $this->userId),
|
|
|
|
'', array(),
|
|
|
|
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
|
|
|
|
}
|
|
|
|
|
2016-09-24 18:16:07 +08:00
|
|
|
$this->credentialRevisionService->createRevision($storedCredential, $this->userId, $credential_id);
|
2016-10-03 21:47:00 +08:00
|
|
|
$credential = $this->credentialService->updateCredential($credential);
|
2016-09-23 22:52:41 +08:00
|
|
|
|
2016-09-15 03:12:10 +08:00
|
|
|
return new JSONResponse($credential);
|
2016-09-09 23:36:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @NoAdminRequired
|
|
|
|
*/
|
2016-09-10 00:46:20 +08:00
|
|
|
public function deleteCredential($credential_id) {
|
2016-09-24 03:30:07 +08:00
|
|
|
$credential = $this->credentialService->getCredentialById($credential_id, $this->userId);
|
2016-09-24 18:59:19 +08:00
|
|
|
if ($credential) {
|
2016-09-24 03:30:07 +08:00
|
|
|
$result = $this->credentialService->deleteCredential($credential);
|
|
|
|
$this->activityService->add(
|
|
|
|
'item_destroyed_self', array($credential->getLabel()),
|
|
|
|
'', array(),
|
|
|
|
'', $this->userId, Activity::TYPE_ITEM_ACTION);
|
|
|
|
} else {
|
|
|
|
$result = false;
|
|
|
|
}
|
|
|
|
return new JSONResponse($result);
|
2016-09-10 00:46:20 +08:00
|
|
|
}
|
|
|
|
|
2016-09-23 23:22:47 +08:00
|
|
|
|
2016-09-10 00:46:20 +08:00
|
|
|
/**
|
|
|
|
* @NoAdminRequired
|
|
|
|
*/
|
|
|
|
public function getRevision($credential_id) {
|
2016-09-24 17:40:15 +08:00
|
|
|
$result = $this->credentialRevisionService->getRevisions($credential_id, $this->userId);
|
|
|
|
return new JSONResponse($result);
|
2016-09-10 00:46:20 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @NoAdminRequired
|
|
|
|
*/
|
2016-09-24 18:59:19 +08:00
|
|
|
public function deleteRevision($credential_id, $revision_id) {
|
|
|
|
$result = $this->credentialRevisionService->deleteRevision($revision_id, $this->userId);
|
|
|
|
return new JSONResponse($result);
|
2016-09-10 00:46:20 +08:00
|
|
|
}
|
2016-09-09 23:36:35 +08:00
|
|
|
}
|