Code Duplication    Length = 65-67 lines in 2 locations

lib/Db/AssetMapper.php 1 location

@@ 32-96 (lines=65) @@
29
use OCP\IDBConnection;
30
use OCP\Security\ISecureRandom;
31
32
class AssetMapper extends Mapper {
33
	/** @var int Limetime of a token is 10 minutes */
34
	const tokenLifeTime = 600;
35
36
	/** @var ISecureRandom */
37
	private $random;
38
39
	/** @var ITimeFactory */
40
	private $time;
41
42
	public function __construct(IDBConnection $db, ISecureRandom $random, ITimeFactory $timeFactory) {
43
		parent::__construct($db, 'richdocuments_assets', Asset::class);
44
45
		$this->random = $random;
46
		$this->time = $timeFactory;
47
	}
48
49
	/**
50
	 * @param $uid
51
	 * @param $fileid
52
	 * @return Asset
53
	 */
54
	public function newAsset($uid, $fileid) {
55
		$asset = new Asset();
56
		$asset->setUid($uid);
57
		$asset->setFileid($fileid);
58
		$asset->setTimestamp($this->time->getTime());
59
		$asset->setToken($this->random->generate(64, ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS));
60
61
		$asset = $this->insert($asset);
62
		return $asset;
63
	}
64
65
66
	/**
67
	 * @param $token
68
	 * @return Asset
69
	 * @throws DoesNotExistException
70
	 */
71
	public function getAssetByToken($token) {
72
		$qb = $this->db->getQueryBuilder();
73
		$qb->select('*')
74
			->from('richdocuments_assets')
75
			->where($qb->expr()->eq('token', $qb->createNamedParameter($token)));
76
77
		$cursor = $qb->execute();
78
		$data = $cursor->fetch();
79
		$cursor->closeCursor();
80
81
		//There can only be one row since it is a unqiue field
82
		if ($data === false) {
83
			throw new DoesNotExistException('No asset for token found');
84
		}
85
86
		$asset = Asset::fromRow($data);
87
88
		// Check the token lifetime
89
		if ($asset->getTimestamp() + self::tokenLifeTime < $this->time->getTime()) {
90
			$this->delete($asset);
91
			throw new DoesNotExistException('No asset for token found');
92
		}
93
94
		return $asset;
95
	}
96
}
97

lib/Db/DirectMapper.php 1 location

@@ 33-99 (lines=67) @@
30
use OCP\Security\ISecureRandom;
31
use PhpParser\Node\Scalar\MagicConst\Dir;
32
33
class DirectMapper extends Mapper {
34
35
	/** @var int Limetime of a token is 10 minutes */
36
	const tokenLifeTime = 600;
37
38
	/** @var ISecureRandom */
39
	protected $random;
40
41
	/**@var ITimeFactory */
42
	protected $timeFactory;
43
44
	public function __construct(IDBConnection $db,
45
								ISecureRandom $random,
46
								ITimeFactory $timeFactory) {
47
		parent::__construct($db, 'richdocuments_direct', Direct::class);
48
49
		$this->random = $random;
50
		$this->timeFactory = $timeFactory;
51
	}
52
53
	/**
54
	 * @param string $uid
55
	 * @param int $fileid
56
	 * @param int $destination
57
	 * @return Direct
58
	 */
59
	public function newDirect($uid, $fileid, $destination = null) {
60
		$direct = new Direct();
61
		$direct->setUid($uid);
62
		$direct->setFileid($fileid);
63
		$direct->setToken($this->random->generate(64, ISecureRandom::CHAR_DIGITS . ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_UPPER));
64
		$direct->setTimestamp($this->timeFactory->getTime());
65
		$direct->setTemplateDestination($destination);
66
67
		$direct = $this->insert($direct);
68
		return $direct;
69
	}
70
71
	/**
72
	 * @param string $token
73
	 * @return Direct
74
	 */
75
	public function getByToken($token) {
76
		$qb = $this->db->getQueryBuilder();
77
		$qb->select('*')
78
			->from('richdocuments_direct')
79
			->where($qb->expr()->eq('token', $qb->createNamedParameter($token)));
80
81
		$cursor = $qb->execute();
82
		$row = $cursor->fetch();
83
		$cursor->closeCursor();
84
85
		//There can only be one as the token is unique
86
		if ($row === false) {
87
			throw new DoesNotExistException('Could not find token.');
88
		}
89
90
		$direct = Direct::fromRow($row);
91
92
		if (($direct->getTimestamp() + self::tokenLifeTime) < $this->timeFactory->getTime()) {
93
			$this->delete($direct);
94
			throw new DoesNotExistException('Could not find token.');
95
		}
96
97
		return $direct;
98
	}
99
}
100