forked from GNUsocial/gnu-social
		
	Basic splitting/validation code submitted via http://status.net/wiki/XMPP/JID_validation -- Copyright 2009 Patrick Georgi <patrick@georgi-clan.de> Licensed under ISC-L, which is compatible with everything else that keeps the copyright notice intact. Added PEAR Net_IDNA package to extlib to handle IDN normalization (also used by Validate's email verifier if present). * added test suite, supplemented my own test cases with JID validation and normalization test cases from libpurple * follows XMPP rules for validation of name part * fixes for normalization with non-ASCII names * will do domain checks if $config['email']['check_domain'] is on, checking for an XMPP-server SRV record or any lookup. (We don't actually need to ping those direct though.) * some more obscure stringprep validation rules aren't quite followed yet, but we err on the side of permissiveness. * we still don't actually let you save your address with a resource on it, as we strip resources when looking up users who've sent us presence or message updates. I would recommend saving the outgoing resource as a separate field if/when we add that..?
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| // {{{ license
 | |
| 
 | |
| /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
 | |
| //
 | |
| // +----------------------------------------------------------------------+
 | |
| // | This library is free software; you can redistribute it and/or modify |
 | |
| // | it under the terms of the GNU Lesser General Public License as       |
 | |
| // | published by the Free Software Foundation; either version 2.1 of the |
 | |
| // | License, or (at your option) any later version.                      |
 | |
| // |                                                                      |
 | |
| // | This library 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    |
 | |
| // | Lesser General Public License for more details.                      |
 | |
| // |                                                                      |
 | |
| // | You should have received a copy of the GNU Lesser General Public     |
 | |
| // | License along with this library; if not, write to the Free Software  |
 | |
| // | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 |
 | |
| // | USA.                                                                 |
 | |
| // +----------------------------------------------------------------------+
 | |
| //
 | |
| 
 | |
| // }}}
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Encode/decode Internationalized Domain Names.
 | |
|  * Factory class to get correct implementation either for php4 or php5.
 | |
|  *
 | |
|  * @author  Markus Nix <mnix@docuverse.de>
 | |
|  * @author  Matthias Sommerfeld <mso@phlylabs.de>
 | |
|  * @package Net
 | |
|  * @version $Id: IDNA.php 284681 2009-07-24 04:24:27Z clockwerx $
 | |
|  */
 | |
| 
 | |
| class Net_IDNA
 | |
| {
 | |
|     // {{{ factory
 | |
|     /**
 | |
|      * Attempts to return a concrete IDNA instance for either php4 or php5.
 | |
|      *
 | |
|      * @param  array  $params   Set of paramaters
 | |
|      * @return object IDNA      The newly created concrete Log instance, or an
 | |
|      *                          false on an error.
 | |
|      * @access public
 | |
|      */
 | |
|     function getInstance($params = array())
 | |
|     {
 | |
|         $version   = explode( '.', phpversion() );
 | |
|         $handler   = ((int)$version[0] > 4) ? 'php5' : 'php4';
 | |
|         $class     = 'Net_IDNA_' . $handler;
 | |
|         $classfile = 'Net/IDNA/' . $handler . '.php';
 | |
| 
 | |
|         /*
 | |
|          * Attempt to include our version of the named class, but don't treat
 | |
|          * a failure as fatal.  The caller may have already included their own
 | |
|          * version of the named class.
 | |
|          */
 | |
|         @include_once $classfile;
 | |
| 
 | |
|         /* If the class exists, return a new instance of it. */
 | |
|         if (class_exists($class)) {
 | |
|             return new $class($params);
 | |
|         }
 | |
| 
 | |
|         return false;
 | |
|     }
 | |
|     // }}}
 | |
| 
 | |
|     // {{{ singleton
 | |
|     /**
 | |
|      * Attempts to return a concrete IDNA instance for either php4 or php5,
 | |
|      * only creating a new instance if no IDNA instance with the same
 | |
|      * parameters currently exists.
 | |
|      *
 | |
|      * @param  array  $params   Set of paramaters
 | |
|      * @return object IDNA      The newly created concrete Log instance, or an
 | |
|      *                          false on an error.
 | |
|      * @access public
 | |
|      */
 | |
|     function singleton($params = array())
 | |
|     {
 | |
|         static $instances;
 | |
|         if (!isset($instances)) {
 | |
|             $instances = array();
 | |
|         }
 | |
| 
 | |
|         $signature = serialize($params);
 | |
|         if (!isset($instances[$signature])) {
 | |
|             $instances[$signature] = Net_IDNA::getInstance($params);
 | |
|         }
 | |
| 
 | |
|         return $instances[$signature];
 | |
|     }
 | |
|     // }}}
 | |
| }
 | |
| 
 | |
| ?>
 |