| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |  * Copyright (C) 2010, StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |  * Send and receive notices using an IRC network | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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    Luke Fitzgerald <lw.fitzgerald@googlemail.com> | 
					
						
							|  |  |  |  * @copyright 2010 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); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2010-07-20 11:16:59 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  | // We bundle the Phergie library...
 | 
					
						
							|  |  |  | set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/phergie'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Plugin for IRC | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Plugin | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							|  |  |  |  * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com> | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class IrcPlugin extends ImPlugin { | 
					
						
							| 
									
										
										
										
											2010-07-20 11:16:59 -07:00
										 |  |  |     public $host =  null; | 
					
						
							|  |  |  |     public $port = null; | 
					
						
							|  |  |  |     public $username = null; | 
					
						
							|  |  |  |     public $realname = null; | 
					
						
							|  |  |  |     public $nick = null; | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |     public $password = null; | 
					
						
							| 
									
										
										
										
											2010-07-26 11:13:00 -07:00
										 |  |  |     public $nickservidentifyregexp = null; | 
					
						
							| 
									
										
										
										
											2010-07-20 11:16:59 -07:00
										 |  |  |     public $nickservpassword = null; | 
					
						
							|  |  |  |     public $channels = null; | 
					
						
							|  |  |  |     public $transporttype = null; | 
					
						
							|  |  |  |     public $encoding = null; | 
					
						
							| 
									
										
										
										
											2010-08-11 10:49:09 -07:00
										 |  |  |     public $pinginterval = null; | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |     public $regcheck = null; | 
					
						
							| 
									
										
										
										
											2010-07-26 11:13:00 -07:00
										 |  |  |     public $unregregexp = null; | 
					
						
							|  |  |  |     public $regregexp = null; | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |     public $transport = 'irc'; | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |     protected $whiteList; | 
					
						
							|  |  |  |     protected $fake_irc; | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get the internationalized/translated display name of this IM service | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string Name of service | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getDisplayName() { | 
					
						
							| 
									
										
										
										
											2011-04-24 19:28:26 +02:00
										 |  |  |         // TRANS: Service name for IRC.
 | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         return _m('IRC'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Normalize a screenname for comparison | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |      * @param string $screenname Screenname to normalize | 
					
						
							|  |  |  |      * @return string An equivalent screenname in normalized form | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |      */ | 
					
						
							|  |  |  |     public function normalize($screenname) { | 
					
						
							|  |  |  |         $screenname = str_replace(" ","", $screenname); | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         return strtolower($screenname); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get the screenname of the daemon that sends and receives messages | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string Screenname | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-08-31 00:04:16 -04:00
										 |  |  |     public function daemonScreenname() { | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |         return $this->nick; | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Validate (ensure the validity of) a screenname | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |      * @param string $screenname Screenname to validate | 
					
						
							|  |  |  |      * @return boolean true if screenname is valid | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |      */ | 
					
						
							|  |  |  |     public function validate($screenname) { | 
					
						
							|  |  |  |         if (preg_match('/\A[a-z0-9\-_]{1,1000}\z/i', $screenname)) { | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |             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. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     public function onAutoload($cls) { | 
					
						
							| 
									
										
										
										
											2013-08-28 15:54:26 +02:00
										 |  |  |         // in the beginning of this file, we have added an include path
 | 
					
						
							|  |  |  |         if (substr($cls, 0, 7) == 'Phergie') { | 
					
						
							|  |  |  |             include_once str_replace('_', DIRECTORY_SEPARATOR, $cls) . '.php'; | 
					
						
							|  |  |  |             return false; | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-08-28 15:54:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return parent::onAutoload($cls); | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * Start manager on daemon start | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |      * @param array &$versions Array to insert manager into | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |      * @return boolean | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function onStartImDaemonIoManagers(&$classes) { | 
					
						
							| 
									
										
										
										
											2013-06-19 11:16:05 +02:00
										 |  |  |         parent::onStartImDaemonIoManagers($classes); | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         $classes[] = new IrcManager($this); // handles sending/receiving
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-10 17:27:02 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Ensure the database table is present | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function onCheckSchema() { | 
					
						
							|  |  |  |         $schema = Schema::get(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // For storing messages while sessions become ready
 | 
					
						
							| 
									
										
										
										
											2013-08-19 17:08:18 +02:00
										 |  |  |         $schema->ensureTable('irc_waiting_message', Irc_waiting_message::schemaDef()); | 
					
						
							| 
									
										
										
										
											2010-08-10 17:27:02 -07:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Get a microid URI for the given screenname | 
					
						
							|  |  |  |     * | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |     * @param string $screenname Screenname | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     * @return string microid URI | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function microiduri($screenname) { | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         return 'irc:' . $screenname; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Send a message to a given screenname | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $screenname Screenname to send to | 
					
						
							|  |  |  |      * @param string $body Text to send | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |      * @return boolean true on success | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-08-31 00:01:55 -04:00
										 |  |  |     public function sendMessage($screenname, $body) { | 
					
						
							| 
									
										
										
										
											2010-08-04 09:10:57 -07:00
										 |  |  |         $lines = explode("\n", $body); | 
					
						
							|  |  |  |         foreach ($lines as $line) { | 
					
						
							|  |  |  |             $this->fake_irc->doPrivmsg($screenname, $line); | 
					
						
							| 
									
										
										
										
											2010-08-31 00:05:03 -04:00
										 |  |  |             $this->enqueueOutgoingRaw(array('type' => 'message', 'prioritise' => 0, 'data' => $this->fake_irc->would_be_sent)); | 
					
						
							| 
									
										
										
										
											2010-08-04 09:10:57 -07:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Accept a queued input message. | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |      * @return boolean true if processing completed, false if message should be reprocessed | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-08-31 00:03:37 -04:00
										 |  |  |     public function receiveRawMessage($data) { | 
					
						
							| 
									
										
										
										
											2010-08-05 10:48:15 -07:00
										 |  |  |         if (strpos($data['source'], '#') === 0) { | 
					
						
							|  |  |  |             $message = $data['message']; | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |             $parts = explode(' ', $message, 2); | 
					
						
							|  |  |  |             $command = $parts[0]; | 
					
						
							|  |  |  |             if (in_array($command, $this->whiteList)) { | 
					
						
							|  |  |  |                 $this->handle_channel_incoming($data['sender'], $data['source'], $message); | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2010-08-31 00:11:57 -04:00
										 |  |  |                 $this->handleIncoming($data['sender'], $message); | 
					
						
							| 
									
										
										
										
											2010-08-05 10:48:15 -07:00
										 |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2010-08-31 00:11:57 -04:00
										 |  |  |             $this->handleIncoming($data['sender'], $data['message']); | 
					
						
							| 
									
										
										
										
											2010-08-05 10:48:15 -07:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Helper for handling incoming messages from a channel requiring response | 
					
						
							|  |  |  |      * to the channel instead of via PM | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $nick Screenname the message was sent from | 
					
						
							|  |  |  |      * @param string $channel Channel the message originated from | 
					
						
							|  |  |  |      * @param string $message Message text | 
					
						
							|  |  |  |      * @param boolean true on success | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |     protected function handle_channel_incoming($nick, $channel, $notice_text) { | 
					
						
							| 
									
										
										
										
											2010-08-31 00:14:47 -04:00
										 |  |  |         $user = $this->getUser($nick); | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |         // For common_current_user to work
 | 
					
						
							|  |  |  |         global $_cur; | 
					
						
							|  |  |  |         $_cur = $user; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!$user) { | 
					
						
							| 
									
										
										
										
											2010-08-31 00:07:52 -04:00
										 |  |  |             $this->sendFromSite($nick, 'Unknown user; go to ' . | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |                              common_local_url('imsettings') . | 
					
						
							|  |  |  |                              ' to add your address to your account'); | 
					
						
							|  |  |  |             common_log(LOG_WARNING, 'Message from unknown user ' . $nick); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if ($this->handle_channel_command($user, $channel, $notice_text)) { | 
					
						
							|  |  |  |             common_log(LOG_INFO, "Command message by $nick handled."); | 
					
						
							|  |  |  |             return; | 
					
						
							| 
									
										
										
										
											2010-08-31 00:20:05 -04:00
										 |  |  |         } else if ($this->isAutoreply($notice_text)) { | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |             common_log(LOG_INFO, 'Ignoring auto reply from ' . $nick); | 
					
						
							|  |  |  |             return; | 
					
						
							| 
									
										
										
										
											2010-08-31 00:21:51 -04:00
										 |  |  |         } else if ($this->isOtr($notice_text)) { | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |             common_log(LOG_INFO, 'Ignoring OTR from ' . $nick); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             common_log(LOG_INFO, 'Posting a notice from ' . $user->nickname); | 
					
						
							| 
									
										
										
										
											2010-08-31 00:13:17 -04:00
										 |  |  |             $this->addNotice($nick, $user, $notice_text); | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $user->free(); | 
					
						
							|  |  |  |         unset($user); | 
					
						
							|  |  |  |         unset($_cur); | 
					
						
							|  |  |  |         unset($message); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Attempt to handle a message from a channel as a command | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |      * @param User $user User the message is from | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |      * @param string $channel Channel the message originated from | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |      * @param string $body Message text | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  |      * @return boolean true if the message was a command and was executed, false if it was not a command | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function handle_channel_command($user, $channel, $body) { | 
					
						
							|  |  |  |         $inter = new CommandInterpreter(); | 
					
						
							|  |  |  |         $cmd = $inter->handle_command($user, $body); | 
					
						
							|  |  |  |         if ($cmd) { | 
					
						
							|  |  |  |             $chan = new ChannelResponseChannel($this, $channel); | 
					
						
							|  |  |  |             $cmd->execute($chan); | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Send a confirmation code to a user | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $screenname screenname sending to | 
					
						
							|  |  |  |      * @param string $code the confirmation code | 
					
						
							|  |  |  |      * @param User $user user sending to | 
					
						
							|  |  |  |      * @return boolean success value | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-08-31 00:08:28 -04:00
										 |  |  |     public function sendConfirmationCode($screenname, $code, $user, $checked = false) { | 
					
						
							| 
									
										
										
										
											2011-04-24 19:28:26 +02:00
										 |  |  |         // TRANS: Body text for e-mail confirmation message for IRC.
 | 
					
						
							|  |  |  |         // TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
 | 
					
						
							|  |  |  |         // TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
 | 
					
						
							| 
									
										
										
										
											2011-03-30 22:30:23 +02:00
										 |  |  |         $body = sprintf(_m('User "%1$s" on %2$s has said that your %3$s screenname belongs to them. ' . | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |           'If that\'s true, you can confirm by clicking on this URL: ' . | 
					
						
							| 
									
										
										
										
											2011-03-30 22:30:23 +02:00
										 |  |  |           '%4$s' . | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |           ' . (If you cannot click it, copy-and-paste it into the ' . | 
					
						
							| 
									
										
										
										
											2011-03-30 22:30:23 +02:00
										 |  |  |           'address bar of your browser). If that user is not you, ' . | 
					
						
							|  |  |  |           'or if you did not request this confirmation, just ignore this message.'), | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |           $user->nickname, common_config('site', 'name'), $this->getDisplayName(), common_local_url('confirmaddress', array('code' => $code))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->regcheck && !$checked) { | 
					
						
							| 
									
										
										
										
											2010-08-31 00:08:28 -04:00
										 |  |  |             return $this->checked_sendConfirmationCode($screenname, $code, $user); | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2010-08-31 00:01:55 -04:00
										 |  |  |             return $this->sendMessage($screenname, $body); | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 14:13:23 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Only sends the confirmation message if the nick is | 
					
						
							|  |  |  |     * registered | 
					
						
							|  |  |  |     * | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |     * @param string $screenname Screenname sending to | 
					
						
							|  |  |  |     * @param string $code The confirmation code | 
					
						
							|  |  |  |     * @param User $user User sending to | 
					
						
							|  |  |  |     * @return boolean true on succes | 
					
						
							| 
									
										
										
										
											2010-07-23 14:13:23 -07:00
										 |  |  |     */ | 
					
						
							| 
									
										
										
										
											2010-08-31 00:08:28 -04:00
										 |  |  |     public function checked_sendConfirmationCode($screenname, $code, $user) { | 
					
						
							| 
									
										
										
										
											2010-07-23 14:13:23 -07:00
										 |  |  |         $this->fake_irc->doPrivmsg('NickServ', 'INFO '.$screenname); | 
					
						
							| 
									
										
										
										
											2010-08-31 00:05:03 -04:00
										 |  |  |         $this->enqueueOutgoingRaw( | 
					
						
							| 
									
										
										
										
											2010-07-23 14:13:23 -07:00
										 |  |  |             array( | 
					
						
							|  |  |  |                 'type' => 'nickcheck', | 
					
						
							| 
									
										
										
										
											2010-08-10 17:27:02 -07:00
										 |  |  |                 'prioritise' => 1, | 
					
						
							| 
									
										
										
										
											2010-07-23 14:13:23 -07:00
										 |  |  |                 'data' => $this->fake_irc->would_be_sent, | 
					
						
							|  |  |  |                 'nickdata' => | 
					
						
							|  |  |  |                     array( | 
					
						
							|  |  |  |                         'screenname' => $screenname, | 
					
						
							|  |  |  |                         'code' => $code, | 
					
						
							|  |  |  |                         'user' => $user | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Initialize plugin | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * @return boolean | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function initialize() { | 
					
						
							|  |  |  |         if (!isset($this->host)) { | 
					
						
							| 
									
										
										
										
											2011-04-24 19:28:26 +02:00
										 |  |  |             // TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
 | 
					
						
							|  |  |  |             throw new Exception(_m('You must specify a host.')); | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |         } | 
					
						
							|  |  |  |         if (!isset($this->username)) { | 
					
						
							| 
									
										
										
										
											2011-04-24 19:28:26 +02:00
										 |  |  |             // TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
 | 
					
						
							|  |  |  |             throw new Exception(_m('You must specify a username.')); | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |         } | 
					
						
							|  |  |  |         if (!isset($this->realname)) { | 
					
						
							| 
									
										
										
										
											2011-04-24 19:28:26 +02:00
										 |  |  |             // TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
 | 
					
						
							|  |  |  |             throw new Exception(_m('You must specify a "real name".')); | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |         if (!isset($this->nick)) { | 
					
						
							| 
									
										
										
										
											2011-04-24 19:28:26 +02:00
										 |  |  |             // TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
 | 
					
						
							|  |  |  |             throw new Exception(_m('You must specify a nickname.')); | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |         if (!isset($this->port)) { | 
					
						
							|  |  |  |             $this->port = 6667; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (!isset($this->transporttype)) { | 
					
						
							|  |  |  |             $this->transporttype = 'tcp'; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (!isset($this->encoding)) { | 
					
						
							|  |  |  |             $this->encoding = 'UTF-8'; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-08-11 10:49:09 -07:00
										 |  |  |         if (!isset($this->pinginterval)) { | 
					
						
							|  |  |  |             $this->pinginterval = 120; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!isset($this->regcheck)) { | 
					
						
							|  |  |  |             $this->regcheck = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-02 14:07:53 +02:00
										 |  |  |         $this->fake_irc = new FakeIrc; | 
					
						
							| 
									
										
										
										
											2010-08-07 13:25:05 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         /* | 
					
						
							|  |  |  |          * Commands allowed to return output to a channel | 
					
						
							|  |  |  |          */ | 
					
						
							|  |  |  |         $this->whiteList = array('stats', 'last', 'get'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get plugin information | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-08-07 16:32:17 -07:00
										 |  |  |      * @param array $versions Array to insert information into | 
					
						
							| 
									
										
										
										
											2010-07-18 12:26:11 -07:00
										 |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function onPluginVersion(&$versions) { | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |         $versions[] = array('name' => 'IRC', | 
					
						
							| 
									
										
										
										
											2013-11-01 13:51:41 +01:00
										 |  |  |                             'version' => GNUSOCIAL_VERSION, | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |                             'author' => 'Luke Fitzgerald', | 
					
						
							|  |  |  |                             'homepage' => 'http://status.net/wiki/Plugin:IRC', | 
					
						
							|  |  |  |                             'rawdescription' => | 
					
						
							| 
									
										
										
										
											2011-04-24 19:28:26 +02:00
										 |  |  |                             // TRANS: Plugin description.
 | 
					
						
							| 
									
										
										
										
											2010-07-04 09:51:44 -07:00
										 |  |  |                             _m('The IRC plugin allows users to send and receive notices over an IRC network.')); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |