more robust handling of new JIDs

darcs-hash:20080624015616-34904-c1ff985257c8c57aacf68439488d628a8b4d2e38.gz
This commit is contained in:
Evan Prodromou 2008-06-23 21:56:16 -04:00
parent 939a3e48d8
commit e330eb50d2
2 changed files with 24 additions and 14 deletions

View File

@ -62,19 +62,26 @@ class ImsettingsAction extends SettingsAction {
function handle_post() { function handle_post() {
$jabber = jabber_normalize_jid($this->trimmed('jabber')); $jabber = $this->trimmed('jabber');
$jabbernotify = $this->boolean('jabbernotify'); $jabbernotify = $this->boolean('jabbernotify');
$updatefrompresence = $this->boolean('updatefrompresence'); $updatefrompresence = $this->boolean('updatefrompresence');
# Some validation
if ($jabber) {
$jabber = jabber_normalize_jid($jabber);
if (!$jabber) {
$this->show_form(_('Cannot normalize that Jabber ID'));
return;
}
if (!jabber_valid_base_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)) {
$this->show_form(_('Not a valid Jabber ID')); $this->show_form(_('Jabber ID already belongs to another user.'));
return; return;
} }
}
# Some validation
$user = common_current_user(); $user = common_current_user();

View File

@ -27,11 +27,14 @@ function jabber_valid_base_jid($jid) {
} }
function jabber_normalize_jid($jid) { function jabber_normalize_jid($jid) {
preg_match("/(?:([^\@]+)\@)?([^\/]+)(?:\/(.*))?$/", $jid, $matches); if (preg_match("/(?:([^\@]+)\@)?([^\/]+)(?:\/(.*))?$/", $jid, $matches)) {
$node = $matches[1]; $node = $matches[1];
$server = $matches[2]; $server = $matches[2];
$resource = $matches[3]; $resource = $matches[3];
return strtolower($node.'@'.$server); return strtolower($node.'@'.$server);
} else {
return NULL;
}
} }
function jabber_connect($resource=NULL) { function jabber_connect($resource=NULL) {