optionally queue jabber confirmations

darcs-hash:20080706035707-84dde-5403fe9bcb017c401fe5847527628df548e54499.gz
This commit is contained in:
Evan Prodromou 2008-07-05 23:57:07 -04:00
parent 13ac93481c
commit e4a1b9cde9
3 changed files with 74 additions and 11 deletions

View File

@ -185,12 +185,12 @@ class ImsettingsAction extends SettingsAction {
return;
}
# XXX: queue for offline sending
jabber_confirm_address($confirm->code,
$user->nickname,
$jabber);
if (!common_config('queue', 'enabled')) {
jabber_confirm_address($confirm->code,
$user->nickname,
$jabber);
}
# XXX: I18N
$msg = 'A confirmation code was sent to the IM address you added. ' .
@ -246,9 +246,7 @@ class ImsettingsAction extends SettingsAction {
}
$user->query('COMMIT');
# Unsubscribe to the old address
jabber_special_presence('unsubscribe', $jabber);
# XXX: unsubscribe to the old address
$this->show_form(_t('The address was removed.'), TRUE);
}

View File

@ -93,7 +93,7 @@ function jabber_confirm_address($code, $nickname, $address) {
'address bar of your browser). If that user isn\'t you, ' .
'or if you didn\'t request this confirmation, just ignore this message.';
jabber_send_message($address, $body);
return jabber_send_message($address, $body);
}
function jabber_special_presence($type, $to=NULL, $show=NULL, $status=NULL) {

View File

@ -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;