| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							|  |  |  |  * Copyright (C) 2009, StatusNet, Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Send and receive notices using the AIM network | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  IM | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							|  |  |  |  * @author    Craig Andrews <candrews@integralblue.com> | 
					
						
							|  |  |  |  * @copyright 2009 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!defined('STATUSNET')) { | 
					
						
							|  |  |  |     // This check helps protect against security problems;
 | 
					
						
							|  |  |  |     // your code file can't be executed directly from the web.
 | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | // We bundle the phptoclib library...
 | 
					
						
							|  |  |  | set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/phptoclib'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Plugin for AIM | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Plugin | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							|  |  |  |  * @author    Craig Andrews <candrews@integralblue.com> | 
					
						
							|  |  |  |  * @copyright 2009 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AimPlugin extends ImPlugin | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public $user =  null; | 
					
						
							|  |  |  |     public $password = null; | 
					
						
							|  |  |  |     public $publicFeed = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public $transport = 'aim'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function getDisplayName() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return _m('AIM'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function normalize($screenname) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 		$screenname = str_replace(" ","", $screenname); | 
					
						
							|  |  |  |         return strtolower($screenname); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-31 00:04:16 -04:00
										 |  |  |     function daemonScreenname() | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |     { | 
					
						
							|  |  |  |         return $this->user; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function validate($screenname) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if(preg_match('/^[a-z]\w{2,15}$/i', $screenname)) { | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         }else{ | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Load related modules when needed | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $cls Name of the class to be loaded | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value; true means continue processing, false means stop. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function onAutoload($cls) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $dir = dirname(__FILE__); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         switch ($cls) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |         case 'Aim': | 
					
						
							|  |  |  |             require_once(INSTALLDIR.'/plugins/Aim/extlib/phptoclib/aimclassw.php'); | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         case 'AimManager': | 
					
						
							|  |  |  |             include_once $dir . '/'.strtolower($cls).'.php'; | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         case 'Fake_Aim': | 
					
						
							|  |  |  |             include_once $dir . '/'. $cls .'.php'; | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function onStartImDaemonIoManagers(&$classes) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::onStartImDaemonIoManagers(&$classes); | 
					
						
							|  |  |  |         $classes[] = new AimManager($this); // handles sending/receiving
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function microiduri($screenname) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return 'aim:' . $screenname;     | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-31 00:01:55 -04:00
										 |  |  |     function sendMessage($screenname, $body) | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |     { | 
					
						
							|  |  |  |         $this->fake_aim->sendIm($screenname, $body); | 
					
						
							| 
									
										
										
										
											2010-08-31 00:05:03 -04:00
										 |  |  | 	    $this->enqueueOutgoingRaw($this->fake_aim->would_be_sent); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-30 14:41:54 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Accept a queued input message. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return true if processing completed, false if message should be reprocessed | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-08-31 00:03:37 -04:00
										 |  |  |     function receiveRawMessage($message) | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |     { | 
					
						
							|  |  |  |         $info=Aim::getMessageInfo($message); | 
					
						
							|  |  |  |         $from = $info['from']; | 
					
						
							| 
									
										
										
										
											2010-08-31 00:14:47 -04:00
										 |  |  |         $user = $this->getUser($from); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $notice_text = $info['message']; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-31 00:11:57 -04:00
										 |  |  |         $this->handleIncoming($from, $notice_text); | 
					
						
							| 
									
										
										
										
											2010-04-30 14:41:54 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return true; | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function initialize(){ | 
					
						
							|  |  |  |         if(!isset($this->user)){ | 
					
						
							|  |  |  |             throw new Exception("must specify a user"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if(!isset($this->password)){ | 
					
						
							|  |  |  |             throw new Exception("must specify a password"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->fake_aim = new Fake_Aim($this->user,$this->password,4); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function onPluginVersion(&$versions) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $versions[] = array('name' => 'AIM', | 
					
						
							|  |  |  |                             'version' => STATUSNET_VERSION, | 
					
						
							|  |  |  |                             'author' => 'Craig Andrews', | 
					
						
							|  |  |  |                             'homepage' => 'http://status.net/wiki/Plugin:AIM', | 
					
						
							|  |  |  |                             'rawdescription' => | 
					
						
							|  |  |  |                             _m('The AIM plugin allows users to send and receive notices over the AIM network.')); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |