Revision backend working

This commit is contained in:
brantje 2016-09-24 11:40:15 +02:00
parent fb0fabfd44
commit 6b6eaaf070
8 changed files with 183 additions and 7 deletions

View file

@ -126,7 +126,6 @@
<type>clob</type>
<notnull>false</notnull>
</field>
<field>
<name>created</name>
<type>integer</type>
@ -332,10 +331,18 @@
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>created</name>
<type>integer</type>
<length>8</length>
<default>0</default>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>credential_data</name>
<type>clob</type>
<notnull>false</notnull>
<notnull>true</notnull>
</field>
<index>
<name>passman_revision_id_index</name>

View file

@ -5,7 +5,7 @@
<description>A password manager for Nextcloud</description>
<licence>AGPL</licence>
<author>Sander Brand</author>
<version>1.0.2.5</version>
<version>1.0.2.6</version>
<namespace>Passman</namespace>
<category>other</category>
<website>https://github.com/nextcloud/passman/</website>

View file

@ -17,21 +17,24 @@ use OCP\AppFramework\ApiController;
use OCA\Passman\Service\CredentialService;
use OCA\Passman\Activity;
use OCA\Passman\Service\ActivityService;
use OCA\Passman\Service\CredentialRevisionService;
class CredentialController extends ApiController {
private $userId;
private $credentialService;
private $activityService;
private $credentialRevisionService;
public function __construct($AppName,
IRequest $request,
$UserId,
CredentialService $credentialService,
ActivityService $activityService) {
ActivityService $activityService,
CredentialRevisionService $credentialRevisionService) {
parent::__construct($AppName, $request);
$this->userId = $UserId;
$this->credentialService = $credentialService;
$this->activityService = $activityService;
$this->credentialRevisionService = $credentialRevisionService;
}
/**
@ -141,7 +144,7 @@ class CredentialController extends ApiController {
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
}
$this->credentialRevisionService->createRevision($credential, $this->userId, $credential_id);
$credential = $this->credentialService->updateCredential($credential);
return new JSONResponse($credential);
@ -169,7 +172,8 @@ class CredentialController extends ApiController {
* @NoAdminRequired
*/
public function getRevision($credential_id) {
return;
$result = $this->credentialRevisionService->getRevisions($credential_id, $this->userId);
return new JSONResponse($result);
}
/**

View file

@ -28,14 +28,24 @@ angular.module('passmanApp')
}
var storedCredential = SettingsService.getSetting('edit_credential');
var getRevisions = function () {
CredentialService.getRevisions($scope.storedCredential.credential_id).then(function (revisions) {
console.log(revisions)
})
};
if (!storedCredential) {
CredentialService.getCredential($routeParams.credential_id).then(function(result){
$scope.storedCredential = CredentialService.decryptCredential(angular.copy(result));
getRevisions();
});
} else {
$scope.storedCredential = CredentialService.decryptCredential(angular.copy(storedCredential));
getRevisions();
}
$scope.cancel = function () {
$location.path('/vault/' + $routeParams.vault_id);
$scope.storedCredential = null;

View file

@ -115,6 +115,16 @@ angular.module('passmanApp')
}
return credential;
},
getRevisions: function(id){
var queryUrl = OC.generateUrl('apps/passman/api/v2/credentials/' + id + '/revision');
return $http.get(queryUrl).then(function (response) {
if (response.data) {
return response.data;
} else {
return response;
}
});
}
}
}]);

View file

@ -0,0 +1,58 @@
<?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\Db;
use \OCP\AppFramework\Db\Entity;
/**
* @method void setId(integer $value)
* @method integer getId()
* @method void setGuid(string $value)
* @method string getGuid()
* @method void setCredentialId(integer $value)
* @method string getCredentialId()
* @method void setUserId(string $value)
* @method string getUserid()
* @method void setCreated(integer $value)
* @method integer getCreated()
* @method void setCredentialData(string $value)
* @method string getCredentialData()
*/
class CredentialRevision extends Entity implements \JsonSerializable {
use EntityJSONSerializer;
protected $guid;
protected $credentialId;
protected $userId;
protected $created;
protected $credentialData;
public function __construct() {
// add types in constructor
$this->addType('created', 'integer');
$this->addType('credentialId', 'integer');
}
/**
* Turns entity attributes into an array
*/
public function jsonSerialize() {
return [
'revision_id' => $this->getId(),
'guid' => $this->getGuid(),
'created' => $this->getCreated(),
'credential_data' => unserialize(base64_decode($this->getCredentialData())),
];
}
}

View file

@ -0,0 +1,52 @@
<?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\Db;
use OCA\Passman\Utility\Utils;
use OCP\IDBConnection;
use OCP\AppFramework\Db\Mapper;
class CredentialRevisionMapper extends Mapper {
private $utils;
public function __construct(IDBConnection $db, Utils $utils) {
parent::__construct($db, 'passman_revisions');
$this->utils = $utils;
}
/**
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result
*/
public function getRevisions($credential_id, $user_id) {
$sql = 'SELECT * FROM `*PREFIX*passman_revisions` ' .
'WHERE `credential_id` = ? and `user_id` = ? ';
return $this->findEntities($sql, [$credential_id, $user_id]);
}
public function create($credential, $userId, $credential_id) {
$revision = new CredentialRevision();
$revision->setGuid($this->utils->GUID());
$revision->setUserId($userId);
$revision->setCreated($this->utils->getTime());
$revision->setCredentialId($credential_id);
$revision->setCredentialData(base64_encode(serialize($credential)));
return $this->insert($revision);
}
public function deleteFile($revision_id, $user_id) {
$file = new CredentialRevision();
$file->setId($revision_id);
$file->setUserId($user_id);
$this->delete($file);
}
}

View file

@ -0,0 +1,35 @@
<?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\Service;
use OCP\IConfig;
use OCP\AppFramework\Db\DoesNotExistException;
use OCA\Passman\Db\CredentialRevisionMapper;
class CredentialRevisionService {
private $credentialRevisionMapper;
public function __construct(CredentialRevisionMapper $credentialRevisionMapper) {
$this->credentialRevisionMapper = $credentialRevisionMapper;
}
public function createRevision($credential, $userId, $credential_id) {
return $this->credentialRevisionMapper->create($credential, $userId, $credential_id);
}
public function getRevisions($credential_id, $user_id){
return $this->credentialRevisionMapper->getRevisions($credential_id, $user_id);
}
}