Made message signing in Cryptography use SHA512 as the message content for... #1

Closed
netkas wants to merge 421 commits from master into dev
Showing only changes of commit 1fedaa27c4 - Show all commits

View file

@ -5,7 +5,9 @@
use InvalidArgumentException; use InvalidArgumentException;
use PDO;
use PDOException; use PDOException;
use Socialbox\Classes\Configuration;
use Socialbox\Classes\Cryptography; use Socialbox\Classes\Cryptography;
use Socialbox\Classes\Database; use Socialbox\Classes\Database;
use Socialbox\Classes\Validator; use Socialbox\Classes\Validator;
@ -262,21 +264,102 @@
/** /**
* Returns an array of channels that are outgoing from the specified peer address * Returns an array of channels that are outgoing from the specified peer address
* *
* @param string $peerAddress The Peer Address of the caller * @param string|PeerAddress $peerAddress The Peer Address of the caller
* @param int $page The page number
* @param int $limit The limit of records to return
* @return EncryptionChannelRecord[] An array of channel records * @return EncryptionChannelRecord[] An array of channel records
* @throws DatabaseOperationException Thrown if there was a database error while retrieving the records * @throws DatabaseOperationException Thrown if there was a database error while retrieving the records
*/ */
public static function getIncomingChannels(string $peerAddress): array public static function getChannels(string|PeerAddress $peerAddress, int $page=1, int $limit=100): array
{ {
if(!Validator::validatePeerAddress($peerAddress)) if($peerAddress instanceof PeerAddress)
{
$peerAddress = $peerAddress->getAddress();
}
elseif(!Validator::validatePeerAddress($peerAddress))
{ {
throw new InvalidArgumentException('Invalid Peer Address'); throw new InvalidArgumentException('Invalid Peer Address');
} }
if($page < 1)
{
throw new InvalidArgumentException('The page number cannot be less than 1');
}
if($limit < 1)
{
throw new InvalidArgumentException('The limit cannot be less than 1');
}
elseif($limit > Configuration::getPoliciesConfiguration()->getEncryptionChannelsLimit())
{
throw new InvalidArgumentException(sprintf('The limit cannot exceed a value of %d', Configuration::getPoliciesConfiguration()->getEncryptionChannelsLimit()));
}
try try
{ {
$stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE receiving_peer_address=:peer_address'); $offset = ($page - 1) * $limit;
$stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE calling_peer_address=:peer_address OR receiving_peer_address=:peer_address LIMIT :limit OFFSET :offset');
$stmt->bindParam(':peer_address', $peerAddress); $stmt->bindParam(':peer_address', $peerAddress);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll();
if(!$results)
{
return [];
}
return array_map(fn($result) => EncryptionChannelRecord::fromArray($result), $results);
}
catch(PDOException $e)
{
throw new DatabaseOperationException('Failed to retrieve encryption channels', $e);
}
}
/**
* Returns an array of channels that are outgoing from the specified peer address
*
* @param string|PeerAddress $peerAddress The Peer Address of the caller
* @param int $page The page number
* @param int $limit The limit of records to return
* @return EncryptionChannelRecord[] An array of channel records
* @throws DatabaseOperationException Thrown if there was a database error while retrieving the records
*/
public static function getIncomingChannels(string|PeerAddress $peerAddress, int $page=1, int $limit=100): array
{
if($peerAddress instanceof PeerAddress)
{
$peerAddress = $peerAddress->getAddress();
}
elseif(!Validator::validatePeerAddress($peerAddress))
{
throw new InvalidArgumentException('Invalid Peer Address');
}
if($page < 1)
{
throw new InvalidArgumentException('The page number cannot be less than 1');
}
if($limit < 1)
{
throw new InvalidArgumentException('The limit cannot be less than 1');
}
elseif($limit > Configuration::getPoliciesConfiguration()->getEncryptionChannelIncomingLimit())
{
throw new InvalidArgumentException(sprintf('The limit cannot exceed a value of %d', Configuration::getPoliciesConfiguration()->getEncryptionChannelIncomingLimit()));
}
try
{
$offset = ($page - 1) * $limit;
$stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE receiving_peer_address=:peer_address LIMIT :limit OFFSET :offset');
$stmt->bindParam(':peer_address', $peerAddress);
$stmt->bindParam(':limit', $limit);
$stmt->bindParam(':offset', $offset);
$stmt->execute(); $stmt->execute();
$results = $stmt->fetchAll(); $results = $stmt->fetchAll();
@ -297,21 +380,44 @@
/** /**
* Returns an array of outgoing channels for the given peer address * Returns an array of outgoing channels for the given peer address
* *
* @param string $peerAddress The Peer Address of the caller * @param string|PeerAddress $peerAddress The Peer Address of the caller
* @param int $page The page number
* @param int $limit The limit of records to return
* @return EncryptionChannelRecord[] An array of channel records * @return EncryptionChannelRecord[] An array of channel records
* @throws DatabaseOperationException Thrown if there was a database error while retrieving the records * @throws DatabaseOperationException Thrown if there was a database error while retrieving the records
*/ */
public static function getOutgoingChannels(string $peerAddress): array public static function getOutgoingChannels(string|PeerAddress $peerAddress, int $page=1, int $limit=100): array
{ {
if(!Validator::validatePeerAddress($peerAddress)) if($peerAddress instanceof PeerAddress)
{
$peerAddress = $peerAddress->getAddress();
}
elseif(!Validator::validatePeerAddress($peerAddress))
{ {
throw new InvalidArgumentException('Invalid Peer Address'); throw new InvalidArgumentException('Invalid Peer Address');
} }
if($page < 1)
{
throw new InvalidArgumentException('The page number cannot be less than 1');
}
if($limit < 1)
{
throw new InvalidArgumentException('The limit cannot be less than 1');
}
elseif($limit > Configuration::getPoliciesConfiguration()->getEncryptionChannelOutgoingLimit())
{
throw new InvalidArgumentException(sprintf('The limit cannot exceed a value of %d', Configuration::getPoliciesConfiguration()->getEncryptionChannelOutgoingLimit()));
}
try try
{ {
$stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE calling_peer_address=:peer_address'); $offset = ($page -1) * $limit;
$stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE calling_peer_address=:peer_address LIMIT :limit OFFSET :offset');
$stmt->bindParam(':peer_address', $peerAddress); $stmt->bindParam(':peer_address', $peerAddress);
$stmt->bindParam(':limit', $limit);
$stmt->bindParam(':offset', $offset);
$stmt->execute(); $stmt->execute();
$results = $stmt->fetchAll(); $results = $stmt->fetchAll();
@ -332,23 +438,48 @@
/** /**
* Returns an array of channels that are awaiting the receiver to accept the channel * Returns an array of channels that are awaiting the receiver to accept the channel
* *
* @param string $peerAddress The Peer Address of the receiver * @param string|PeerAddress $peerAddress The Peer Address of the receiver
* @param int $page The page number
* @param int $limit The limit of records to return
* @return EncryptionChannelRecord[] An array of channel records * @return EncryptionChannelRecord[] An array of channel records
* @throws DatabaseOperationException Thrown if there was a database error while retrieving the records * @throws DatabaseOperationException Thrown if there was a database error while retrieving the records
*/ */
public static function getChannelRequests(string $peerAddress): array public static function getChannelRequests(string|PeerAddress $peerAddress, int $page=1, int $limit=100): array
{ {
if(!Validator::validatePeerAddress($peerAddress)) if($peerAddress instanceof PeerAddress)
{
$peerAddress = $peerAddress->getAddress();
}
elseif(!Validator::validatePeerAddress($peerAddress))
{ {
throw new InvalidArgumentException('Invalid Peer Address'); throw new InvalidArgumentException('Invalid Peer Address');
} }
if($page < 1)
{
throw new InvalidArgumentException('The page number cannot be less than 1');
}
if($limit < 1)
{
throw new InvalidArgumentException('The limit cannot be less than 1');
}
elseif($limit > Configuration::getPoliciesConfiguration()->getEncryptionChannelRequestsLimit())
{
throw new InvalidArgumentException(sprintf('The limit cannot exceed a value of %d', Configuration::getPoliciesConfiguration()->getEncryptionChannelRequestsLimit()));
}
try try
{ {
$stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE receiving_peer_address=:peer_address AND status=:status'); $offset = ($page -1) * $limit;
$stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE receiving_peer_address=:peer_address AND status=:status LIMIT :limit OFFSET :offset');
$stmt->bindParam(':peer_address', $peerAddress); $stmt->bindParam(':peer_address', $peerAddress);
$status = EncryptionChannelStatus::AWAITING_RECEIVER->value; $status = EncryptionChannelStatus::AWAITING_RECEIVER->value;
$stmt->bindParam(':status', $status); $stmt->bindParam(':status', $status);
$stmt->bindParam(':limit', $limit);
$stmt->bindParam(':offset', $offset);
$stmt->execute(); $stmt->execute();
$results = $stmt->fetchAll(); $results = $stmt->fetchAll();