From e4a1b9cde9e975209c76e5e7322a14336b42f18f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 5 Jul 2008 23:57:07 -0400 Subject: optionally queue jabber confirmations darcs-hash:20080706035707-84dde-5403fe9bcb017c401fe5847527628df548e54499.gz --- xmppdaemon.php | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) (limited to 'xmppdaemon.php') diff --git a/xmppdaemon.php b/xmppdaemon.php index b07f44cff..772e99d3d 100755 --- a/xmppdaemon.php +++ b/xmppdaemon.php @@ -93,6 +93,7 @@ class XMPPDaemon { } $this->broadcast_queue(); + $this->confirmation_queue(); } } @@ -312,7 +313,6 @@ class XMPPDaemon { function clear_old_claims() { $qi = new Queue_item(); - $qi->claimed = NULL; $qi->whereAdd('now() - claimed > '.CLAIM_TIMEOUT); $qi->update(DB_DATAOBJECT_WHEREADD_ONLY); } @@ -321,6 +321,71 @@ class XMPPDaemon { $user = User::staticGet($notice->profile_id); return !$user; } + + function confirmation_queue() { + $this->clear_old_confirm_claims(); + $this->log(LOG_INFO, 'checking for queued confirmations'); + do { + $confirm = $this->next_confirm(); + if ($confirm) { + $this->log(LOG_INFO, 'Sending confirmation for ' . $confirm->address); + $user = User::staticGet($confirm->user_id); + if (!$user) { + $this->log(LOG_WARNING, 'Confirmation for unknown user ' . $confirm->user_id); + continue; + } + + $success = jabber_confirm_address($confirm->code, + $user->nickname, + $jabber); + if (!$success) { + $this->log(LOG_ERROR, 'Confirmation failed for ' . $confirm->address); + # Just let the claim age out; hopefully things work then + continue; + } else { + $this->log(LOG_INFO, 'Confirmation sent for ' . $confirm->address); + # Mark confirmation sent + $original = clone($confirm); + $confirm->sent = DB_DataObject_Cast::dateTime(); + $result = $confirm->update($original); + if (!$result) { + $this->log(LOG_ERROR, 'Cannot mark sent for ' . $confirm->address); + # Just let the claim age out; hopefully things work then + continue; + } + } + } + } while ($confirm); + } + + function next_confirm() { + $confirm = new Confirm_address(); + $confirm->sent = NULL; + $confirm->claimed = NULL; + $confirm->orderBy('modified DESC'); + $confirm->limit(1); + if ($confirm->find(TRUE)) { + $this->log(LOG_INFO, 'Claiming confirmation for ' . $confirm->address); + $original = clone($confirm); + $confirm->claimed = DB_DataObject_Cast::dateTime(); + $result = $confirm->update($original); + if ($result) { + $this->log(LOG_INFO, 'Succeeded in claim!'); + return $confirm; + } else { + $this->log(LOG_INFO, 'Failed in claim!'); + return false; + } + } + return NULL; + } + + function clear_old_confirm_claims() { + $confirm = new Confirm(); + $confirm->whereAdd('now() - claimed > '.CLAIM_TIMEOUT); + $confirm->update(DB_DATAOBJECT_WHEREADD_ONLY); + } + } $resource = ($argc > 1) ? $argv[1] : NULL; -- cgit v1.2.3-54-g00ecf