summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/imsettings.php4
-rw-r--r--lib/jabber.php33
-rw-r--r--lib/util.php19
-rw-r--r--xmppdaemon.php12
4 files changed, 56 insertions, 12 deletions
diff --git a/actions/imsettings.php b/actions/imsettings.php
index b34f8ca12..d8680c98b 100644
--- a/actions/imsettings.php
+++ b/actions/imsettings.php
@@ -61,11 +61,11 @@ class ImsettingsAction extends SettingsAction {
function handle_post() {
- $jabber = $this->trimmed('jabber');
+ $jabber = jabber_normalize_jid($this->trimmed('jabber'));
$jabbernotify = $this->boolean('jabbernotify');
$updatefrompresence = $this->boolean('updatefrompresence');
- if (!jabber_validate_jid($jabber)) {
+ if (!jabber_valid_base_jid($jabber)) {
$this->show_form(_('Not a valid Jabber ID'));
return;
} else if ($this->jabber_exists($jabber)) {
diff --git a/lib/jabber.php b/lib/jabber.php
new file mode 100644
index 000000000..141b9231f
--- /dev/null
+++ b/lib/jabber.php
@@ -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);
+}
diff --git a/lib/util.php b/lib/util.php
index d990b8e1f..7a9bed2c9 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -319,6 +319,25 @@ function common_input($id, $label, $value=NULL,$instructions=NULL) {
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) {
common_element('input', array('name' => $id,
'type' => 'hidden',
diff --git a/xmppdaemon.php b/xmppdaemon.php
index aa402b1e2..b71c93dc8 100644
--- a/xmppdaemon.php
+++ b/xmppdaemon.php
@@ -51,14 +51,6 @@ class XMPPDaemon {
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() {
while(!$this->conn->disconnected) {
$payloads = $this->conn->processUntil(array('message', 'presence',
@@ -87,7 +79,7 @@ class XMPPDaemon {
if (strlen($pl['body']) == 0) {
return;
}
- $from = $this->normalize_jid($pl['from']);
+ $from = jabber_normalize_jid($pl['from']);
$user = User::staticGet('jabber', $from);
if (!$user) {
$this->log(LOG_WARNING, 'Message from unknown user ' . $from);
@@ -162,7 +154,7 @@ class XMPPDaemon {
}
function handle_presence(&$pl) {
- $from = $this->normalize_jid($pl['from']);
+ $from = jabber_normalize_jid($pl['from']);
$user = User::staticGet('jabber', $from);
if (!$user) {
$this->log(LOG_WARNING, 'Message from unknown user ' . $from);