| 
									
										
										
										
											2011-01-05 14:27:53 -08:00
										 |  |  | #!/usr/bin/env php
 | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * StatusNet - a distributed open-source microblogging tool | 
					
						
							|  |  |  |  * Copyright (C) 2010, StatusNet, 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/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $longoptions = array('verify', 'slap=', 'notice='); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $helptext = <<<END_OF_HELP | 
					
						
							|  |  |  | slap.php [options] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Test generation and sending of magic envelopes for Salmon slaps. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      --notice=N   generate entry for this notice number | 
					
						
							|  |  |  |      --verify     send signed magic envelope to Tuomas Koski's test service | 
					
						
							|  |  |  |      --slap=<url> send signed Salmon slap to the destination endpoint | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | END_OF_HELP; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require_once INSTALLDIR.'/scripts/commandline.inc'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!have_option('--notice')) { | 
					
						
							|  |  |  |     print "$helptext"; | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $notice_id = get_option_value('--notice'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-18 13:04:58 +02:00
										 |  |  | $notice = Notice::getKV('id', $notice_id); | 
					
						
							| 
									
										
										
										
											2011-01-05 14:27:53 -08:00
										 |  |  | $profile = $notice->getProfile(); | 
					
						
							|  |  |  | $entry = $notice->asAtomEntry(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "== Original entry ==\n\n"; | 
					
						
							|  |  |  | print $entry; | 
					
						
							|  |  |  | print "\n\n"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-02 19:44:57 +02:00
										 |  |  | $magic_env = MagicEnvelope::signAsUser($entry, $profile->getUser()); | 
					
						
							| 
									
										
										
										
											2014-05-27 11:32:12 +02:00
										 |  |  | $envxml = $magic_env->toXML(); | 
					
						
							| 
									
										
										
										
											2011-01-05 14:27:53 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo "== Signed envelope ==\n\n"; | 
					
						
							| 
									
										
										
										
											2014-05-27 11:32:12 +02:00
										 |  |  | print $envxml; | 
					
						
							| 
									
										
										
										
											2011-01-05 14:27:53 -08:00
										 |  |  | print "\n\n"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "== Testing local verification ==\n\n"; | 
					
						
							| 
									
										
										
										
											2014-05-27 11:32:12 +02:00
										 |  |  | $magic_env = new MagicEnvelope($envxml); | 
					
						
							| 
									
										
										
										
											2014-06-02 14:20:58 +02:00
										 |  |  | $activity = new Activity($magic_env->getPayload()->documentElement); | 
					
						
							| 
									
										
										
										
											2014-06-02 19:44:57 +02:00
										 |  |  | $actprofile = Profile::fromUri($activity->actor->id); | 
					
						
							|  |  |  | $ok = $magic_env->verify($actprofile); | 
					
						
							| 
									
										
										
										
											2011-01-05 14:27:53 -08:00
										 |  |  | if ($ok) { | 
					
						
							|  |  |  |     print "OK\n\n"; | 
					
						
							|  |  |  | } else { | 
					
						
							|  |  |  |     print "FAIL\n\n"; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (have_option('--verify')) { | 
					
						
							|  |  |  |     $url = 'http://www.madebymonsieur.com/ostatus_discovery/magic_env/validate/'; | 
					
						
							|  |  |  |     echo "== Testing remote verification ==\n\n"; | 
					
						
							|  |  |  |     print "Sending for verification to $url ...\n"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $client = new HTTPClient(); | 
					
						
							| 
									
										
										
										
											2014-05-27 11:32:12 +02:00
										 |  |  |     $response = $client->post($url, array(), array('magic_env' => $envxml)); | 
					
						
							| 
									
										
										
										
											2011-01-05 14:27:53 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     print $response->getStatus() . "\n\n"; | 
					
						
							|  |  |  |     print $response->getBody() . "\n\n"; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (have_option('--slap')) { | 
					
						
							|  |  |  |     $url = get_option_value('--slap'); | 
					
						
							|  |  |  |     echo "== Remote salmon slap ==\n\n"; | 
					
						
							|  |  |  |     print "Sending signed Salmon slap to $url ...\n"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-02 19:44:57 +02:00
										 |  |  |     $ok = Salmon::post($url, $entry, $profile->getUser()); | 
					
						
							| 
									
										
										
										
											2011-01-05 14:27:53 -08:00
										 |  |  |     if ($ok) { | 
					
						
							|  |  |  |         print "OK\n\n"; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         print "FAIL\n\n"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |