return $stmt->fetchObject();
}
+ /**
+ * Remove a topic
+ *
+ * @param string $topic Topic URL
+ *
+ * @return void
+ */
+ public function remove($topic)
+ {
+ $stmt = $this->db->prepare(
+ 'DELETE FROM subscriptions'
+ . ' WHERE sub_topic = :topic'
+ );
+ $stmt->execute([':topic' => $topic]);
+ }
+
/**
* Count number of subscriptions
*
{
$stmt = $this->db->prepare(
'SELECT * FROM subscriptions'
- . ' WHERE sub_status IN ("active", "expired")'
- . ' AND DATEDIFF(sub_expires, NOW()) <= 2'
+ . ' WHERE'
+ . '('
+ //expire soon
+ . ' sub_status IN ("active", "expired")'
+ . ' AND DATEDIFF(sub_expires, NOW()) <= 2'
+ . ') OR ('
+ //no reaction to subscription within 10 minutes
+ . ' sub_status = "subscribing"'
+ . ' AND TIMEDIFF(NOW(), sub_created) > "00:10:00"'
+ . ')'
);
$stmt->execute();
* - send subscription requests to the hub
*
* @param string $topic URL to subscribe to
+ * @param string $hub URL of the hub subscribing to
*
* @return void
*/
- public function create($topic)
+ public function create($topic, $hub)
{
$stmt = $this->db->prepare(
'INSERT INTO subscriptions'
. ' (sub_topic, sub_status, sub_lease_seconds, sub_expires'
- . ', sub_secret, sub_capkey, sub_created, sub_updated'
+ . ', sub_secret, sub_capkey, sub_hub, sub_created, sub_updated'
. ', sub_pings, sub_lastping, sub_statusmessage)'
. ' VALUES '
. ' (:topic, "subscribing", :lease_seconds, "0000-00-00 00:00:00"'
- . ', :secret, :capkey, NOW(), NOW()'
+ . ', :secret, :capkey, :hub, NOW(), NOW()'
. ', 0, "0000-00-00 00:00:00", "")'
);
$stmt->execute(
':lease_seconds' => 86400 * 30,
':secret' => bin2hex(openssl_random_pseudo_bytes(16)),
':capkey' => bin2hex(openssl_random_pseudo_bytes(16)),
+ ':hub' => $hub,
]
);
}