| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Laconica - a distributed open-source microblogging tool | 
					
						
							|  |  |  |  * Copyright (C) 2008, Controlez-Vous, 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/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!defined('LACONICA')) { exit(1); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require_once(INSTALLDIR.'/lib/settingsaction.php'); | 
					
						
							|  |  |  | require_once(INSTALLDIR.'/lib/openid.php'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class OpenidsettingsAction extends SettingsAction { | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	function get_instructions() { | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 		return _('[OpenID](%%doc.openid%%) lets you log into many sites ' . | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 		          ' with the same user account. '. | 
					
						
							|  |  |  | 		          ' Manage your associated OpenIDs from here.'); | 
					
						
							| 
									
										
										
										
											2008-06-18 15:02:02 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-18 15:02:02 -04:00
										 |  |  | 	function show_form($msg=NULL, $success=false) { | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-18 15:02:02 -04:00
										 |  |  | 		$user = common_current_user(); | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 		$this->form_header(_('OpenID settings'), $msg, $success); | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-02 09:15:07 -04:00
										 |  |  | 		common_element_start('form', array('method' => 'post', | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 										   'id' => 'openidadd', | 
					
						
							|  |  |  | 										   'action' => | 
					
						
							|  |  |  | 										   common_local_url('openidsettings'))); | 
					
						
							| 
									
										
										
										
											2008-08-29 00:29:08 -04:00
										 |  |  | 		common_hidden('token', common_session_token()); | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 		common_element('h2', NULL, _('Add OpenID')); | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 		common_element('p', NULL, | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 					   _('If you want to add an OpenID to your account, ' . | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 						  'enter it in the box below and click "Add".')); | 
					
						
							| 
									
										
										
										
											2008-06-18 12:01:11 -04:00
										 |  |  | 		common_element_start('p'); | 
					
						
							|  |  |  | 		common_element('label', array('for' => 'openid_url'), | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 					   _('OpenID URL')); | 
					
						
							| 
									
										
										
										
											2008-06-18 12:01:11 -04:00
										 |  |  | 		common_element('input', array('name' => 'openid_url', | 
					
						
							|  |  |  | 									  'type' => 'text', | 
					
						
							|  |  |  | 									  'id' => 'openid_url')); | 
					
						
							|  |  |  | 		common_element('input', array('type' => 'submit', | 
					
						
							|  |  |  | 									  'id' => 'add', | 
					
						
							|  |  |  | 									  'name' => 'add', | 
					
						
							| 
									
										
										
										
											2008-06-18 12:35:16 -04:00
										 |  |  | 									  'class' => 'submit', | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 									  'value' => _('Add'))); | 
					
						
							| 
									
										
										
										
											2008-06-18 12:01:11 -04:00
										 |  |  | 		common_element_end('p'); | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 		common_element_end('form'); | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 		$oid = new User_openid(); | 
					
						
							|  |  |  | 		$oid->user_id = $user->id; | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 		$cnt = $oid->find(); | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 		if ($cnt > 0) { | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 			common_element('h2', NULL, _('Remove OpenID')); | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 			if ($cnt == 1 && !$user->password) { | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 				common_element('p', NULL, | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 							   _('Removing your only OpenID would make it impossible to log in! ' . | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 								  'If you need to remove it, add another OpenID first.')); | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 11:37:19 -04:00
										 |  |  | 				if ($oid->fetch()) { | 
					
						
							|  |  |  | 					common_element_start('p'); | 
					
						
							|  |  |  | 					common_element('a', array('href' => $oid->canonical), | 
					
						
							|  |  |  | 								   $oid->display); | 
					
						
							|  |  |  | 					common_element_end('p'); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 				common_element('p', NULL, | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 							   _('You can remove an OpenID from your account '. | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 								  'by clicking the button marked "Remove".')); | 
					
						
							|  |  |  | 				$idx = 0; | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 				while ($oid->fetch()) { | 
					
						
							|  |  |  | 					common_element_start('form', array('method' => 'POST', | 
					
						
							|  |  |  | 													   'id' => 'openiddelete' . $idx, | 
					
						
							| 
									
										
										
										
											2008-06-19 13:20:31 -04:00
										 |  |  | 													   'action' => | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 													   common_local_url('openidsettings'))); | 
					
						
							|  |  |  | 					common_element_start('p'); | 
					
						
							| 
									
										
										
										
											2008-08-29 00:29:08 -04:00
										 |  |  | 					common_hidden('token', common_session_token()); | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 					common_element('a', array('href' => $oid->canonical), | 
					
						
							|  |  |  | 								   $oid->display); | 
					
						
							|  |  |  | 					common_element('input', array('type' => 'hidden', | 
					
						
							|  |  |  | 												  'id' => 'openid_url'.$idx, | 
					
						
							|  |  |  | 												  'name' => 'openid_url', | 
					
						
							|  |  |  | 												  'value' => $oid->canonical)); | 
					
						
							|  |  |  | 					common_element('input', array('type' => 'submit', | 
					
						
							|  |  |  | 												  'id' => 'remove'.$idx, | 
					
						
							|  |  |  | 												  'name' => 'remove', | 
					
						
							|  |  |  | 												  'class' => 'submit', | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 												  'value' => _('Remove'))); | 
					
						
							| 
									
										
										
										
											2008-06-19 11:32:31 -04:00
										 |  |  | 					common_element_end('p'); | 
					
						
							|  |  |  | 					common_element_end('form'); | 
					
						
							|  |  |  | 					$idx++; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-19 13:20:31 -04:00
										 |  |  | 		common_show_footer(); | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 	function handle_post() { | 
					
						
							| 
									
										
										
										
											2008-08-29 00:29:08 -04:00
										 |  |  | 		# CSRF protection
 | 
					
						
							|  |  |  | 		$token = $this->trimmed('token'); | 
					
						
							|  |  |  | 		if (!$token || $token != common_session_token()) { | 
					
						
							|  |  |  | 			$this->show_form(_('There was a problem with your session token. Try again, please.')); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 		if ($this->arg('add')) { | 
					
						
							| 
									
										
										
										
											2008-06-18 09:32:51 -04:00
										 |  |  | 			$result = oid_authenticate($this->trimmed('openid_url'), 'finishaddopenid'); | 
					
						
							|  |  |  | 			if (is_string($result)) { # error message
 | 
					
						
							|  |  |  | 				$this->show_form($result); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 		} else if ($this->arg('remove')) { | 
					
						
							|  |  |  | 			$this->remove_openid(); | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 			$this->show_form(_('Something weird happened.')); | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 	function remove_openid() { | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 		$openid_url = $this->trimmed('openid_url'); | 
					
						
							|  |  |  | 		$oid = User_openid::staticGet('canonical', $openid_url); | 
					
						
							|  |  |  | 		if (!$oid) { | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 			$this->show_form(_('No such OpenID.')); | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		$cur = common_current_user(); | 
					
						
							|  |  |  | 		if (!$cur || $oid->user_id != $cur->id) { | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 			$this->show_form(_('That OpenID does not belong to you.')); | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		$oid->delete(); | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 		$this->show_form(_('OpenID removed.'), true); | 
					
						
							| 
									
										
										
										
											2008-06-18 02:53:20 -04:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-06-30 13:03:42 -04:00
										 |  |  | } |