add jabber library and use it

darcs-hash:20080624001523-34904-8d0c052f12301d86aeb9107149b34f22c94da1c4.gz
This commit is contained in:
Evan Prodromou 2008-06-23 20:15:23 -04:00
parent ae40dfe842
commit 63dcbe1e6e
4 changed files with 56 additions and 12 deletions

View File

@ -61,11 +61,11 @@ class ImsettingsAction extends SettingsAction {
function handle_post() { function handle_post() {
$jabber = $this->trimmed('jabber'); $jabber = jabber_normalize_jid($this->trimmed('jabber'));
$jabbernotify = $this->boolean('jabbernotify'); $jabbernotify = $this->boolean('jabbernotify');
$updatefrompresence = $this->boolean('updatefrompresence'); $updatefrompresence = $this->boolean('updatefrompresence');
if (!jabber_validate_jid($jabber)) { if (!jabber_valid_base_jid($jabber)) {
$this->show_form(_('Not a valid Jabber ID')); $this->show_form(_('Not a valid Jabber ID'));
return; return;
} else if ($this->jabber_exists($jabber)) { } else if ($this->jabber_exists($jabber)) {

33
lib/jabber.php Normal file
View File

@ -0,0 +1,33 @@
<?php
/*
* Laconica - a distributed open-source microblogging tool
* Copyright (C) 2008, Controlez-Vous, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('LACONICA')) { exit(1); }
function jabber_valid_base_jid($jid) {
# Cheap but effective
return Validate::email($jid);
}
function jabber_normalize_jid($jid) {
preg_match("/(?:([^\@]+)\@)?([^\/]+)(?:\/(.*))?$/", $jid, $matches);
$node = $matches[1];
$server = $matches[2];
$resource = $matches[3];
return strtolower($node.'@'.$server);
}

View File

@ -319,6 +319,25 @@ function common_input($id, $label, $value=NULL,$instructions=NULL) {
common_element_end('p'); common_element_end('p');
} }
function common_checkbox($id, $label, $value='true',
$instructions=NULL)
{
common_element_start('p');
$attrs = array('name' => $id,
'type' => 'checkbox',
'id' => $id,
'value' => $value);
if ($value) {
$attrs['value'] = htmlspecialchars($value);
}
common_element('input', $attrs);
common_element('label', array('for' => $id), $label);
if ($instructions) {
common_element('span', 'input_instructions', $instructions);
}
common_element_end('p');
}
function common_hidden($id, $value) { function common_hidden($id, $value) {
common_element('input', array('name' => $id, common_element('input', array('name' => $id,
'type' => 'hidden', 'type' => 'hidden',

View File

@ -51,14 +51,6 @@ class XMPPDaemon {
return !$this->conn->disconnected; return !$this->conn->disconnected;
} }
function normalize_jid($jid) {
preg_match("/(?:([^\@]+)\@)?([^\/]+)(?:\/(.*))?$/", $jid, $matches);
$node = $matches[1];
$server = $matches[2];
$resource = $matches[3];
return strtolower($node.'@'.$server);
}
function handle() { function handle() {
while(!$this->conn->disconnected) { while(!$this->conn->disconnected) {
$payloads = $this->conn->processUntil(array('message', 'presence', $payloads = $this->conn->processUntil(array('message', 'presence',
@ -87,7 +79,7 @@ class XMPPDaemon {
if (strlen($pl['body']) == 0) { if (strlen($pl['body']) == 0) {
return; return;
} }
$from = $this->normalize_jid($pl['from']); $from = jabber_normalize_jid($pl['from']);
$user = User::staticGet('jabber', $from); $user = User::staticGet('jabber', $from);
if (!$user) { if (!$user) {
$this->log(LOG_WARNING, 'Message from unknown user ' . $from); $this->log(LOG_WARNING, 'Message from unknown user ' . $from);
@ -162,7 +154,7 @@ class XMPPDaemon {
} }
function handle_presence(&$pl) { function handle_presence(&$pl) {
$from = $this->normalize_jid($pl['from']); $from = jabber_normalize_jid($pl['from']);
$user = User::staticGet('jabber', $from); $user = User::staticGet('jabber', $from);
if (!$user) { if (!$user) {
$this->log(LOG_WARNING, 'Message from unknown user ' . $from); $this->log(LOG_WARNING, 'Message from unknown user ' . $from);