PageRenderTime 76ms CodeModel.GetById 33ms RepoModel.GetById 1ms app.codeStats 0ms

/app/omb/plugins/security.php

https://github.com/tjgillies/openmicroblogger
PHP | 2833 lines | 2048 code | 639 blank | 146 comment | 334 complexity | b52e2ec22cce41309c02e5bf3fc147c6 MD5 | raw file
Possible License(s): LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /**
  3. * dbscript -- restful openid framework
  4. * @version 0.6.0 -- 22-October-2008
  5. * @author Brian Hendrickson <brian@dbscript.net>
  6. * @link http://dbscript.net/
  7. * @copyright Copyright 2009 Brian Hendrickson
  8. * @license http://www.opensource.org/licenses/mit-license.php MIT License
  9. * @package dbscript
  10. */
  11. /**
  12. * Model Security
  13. *
  14. * filter to check permissions in $model->access_list,
  15. * which can be set in the data model via:
  16. * $model->let_read/let_write/let_access( 'group:callback' )
  17. *
  18. * @author Brian Hendrickson <brian@dbscript.net>
  19. * @access public
  20. * @param Mapper $req
  21. * @param Database $db
  22. * @return boolean
  23. * @todo modify to handle a partial set of fields
  24. */
  25. function model_security( &$request, &$db ) {
  26. $action = $request->action;
  27. if ( isset( $request->resource ) )
  28. $model =& $db->get_table( $request->resource );
  29. else
  30. return true; // request is not for a resource
  31. if (public_resource())
  32. return true;
  33. if (virtual_resource())
  34. return true;
  35. if ( !( in_array( $action, $model->allowed_methods, true )))
  36. $action = 'get';
  37. $failed = false;
  38. authenticate_with_openid();
  39. // this switch is now repeated in $model->can($action)
  40. switch( $action ) {
  41. case 'get':
  42. if (!($model && $model->can_read_fields( $model->field_array )))
  43. $failed = true;
  44. break;
  45. case 'put':
  46. $submitted = $model->fields_from_request( $request );
  47. foreach ( $submitted as $table=>$fieldlist ) {
  48. $model =& $db->get_table($table);
  49. if (!($model && $model->can_write_fields( $fieldlist )))
  50. $failed = true;
  51. }
  52. break;
  53. case 'post':
  54. $submitted = $model->fields_from_request( $request );
  55. foreach ( $submitted as $table=>$fieldlist ) {
  56. $model =& $db->get_table($table);
  57. if (!($model && $model->can_create( $table )))
  58. $failed = true;
  59. }
  60. break;
  61. case 'delete':
  62. if (!($model && $model->can_delete( $request->resource )))
  63. $failed = true;
  64. break;
  65. default:
  66. $failed = true;
  67. }
  68. if (!$failed)
  69. return true;
  70. authenticate_with_openid();
  71. trigger_error( "Sorry, you do not have permission to $action ".$request->resource, E_USER_ERROR );
  72. }
  73. function authenticate_with_openid() {
  74. global $request;
  75. if ( !$request->openid_complete )
  76. begin_openid_authentication( $request );
  77. else
  78. complete_openid_authentication( $request );
  79. }
  80. function begin_openid_authentication( &$request ) {
  81. if ( !isset( $request->openid_url ) || empty( $request->openid_url )) {
  82. $_SESSION['requested_url'] = $request->uri;
  83. render( 'action', 'email' );
  84. return;
  85. }
  86. unset_cookie();
  87. $_SESSION['openid_url'] = $request->openid_url;
  88. if (class_exists('MySQL') && environment('openid_version') > 1 && !isset($_SESSION['openid_degrade']) )
  89. start_wp_openid();
  90. else
  91. start_simple_openid();
  92. }
  93. function start_wp_openid() {
  94. global $request;
  95. wp_plugin_include(array(
  96. 'wp-openid'
  97. ));
  98. $logic = new WordPressOpenID_Logic(null);
  99. $logic->activate_plugin();
  100. if( !WordPressOpenID_Logic::late_bind() )
  101. return;
  102. $redirect_to = '';
  103. if( !empty( $_SESSION['requested_url'] ) )
  104. $redirect_to = $_SESSION['requested_url'];
  105. $claimed_url = $request->openid_url;
  106. $consumer = WordPressOpenID_Logic::getConsumer();
  107. $auth_request = $consumer->begin( $claimed_url );
  108. if ( null === $auth_request )
  109. trigger_error('OpenID server not found at '. htmlentities( $claimed_url ), E_USER_ERROR);
  110. $return_to = $request->url_for( 'openid_continue' ).'/';
  111. $store =& WordPressOpenID_Logic::getStore();
  112. $sreg_request = Auth_OpenID_SRegRequest::build(array(),array(
  113. 'nickname',
  114. 'email',
  115. 'fullname'
  116. ));
  117. $auth_request->addExtension($sreg_request);
  118. $_SESSION['oid_return_to'] = $return_to;
  119. WordPressOpenID_Logic::doRedirect($auth_request, $request->protected_url, $return_to);
  120. exit(0);
  121. }
  122. function start_simple_openid() {
  123. global $request;
  124. include_once $GLOBALS['PATH']['library'] . 'openid.php';
  125. $openid = new SimpleOpenID;
  126. $openid->SetIdentity( $request->openid_url );
  127. $openid->SetApprovedURL( $request->url_for( 'openid_continue' ).'/'); // y'all come back now
  128. $openid->SetTrustRoot( $request->protected_url ); // protected site
  129. $openid->SetOptionalFields(array(
  130. 'nickname',
  131. 'email',
  132. 'fullname'
  133. ));
  134. $openid->SetRequiredFields(array());
  135. $server_url = $openid->GetOpenIDServer();
  136. $_SESSION['openid_server_url'] = $server_url;
  137. #echo $server_url; exit;
  138. $openid->SetOpenIDServer( $server_url );
  139. if ($openid->IsError())
  140. trigger_error( 'sorry there was an openid error: '.serialize($openid->GetError()), E_USER_ERROR);
  141. $url = trim($server_url);
  142. if (empty($url))
  143. trigger_error( 'sorry there was an openid error: the server url is not set '.serialize($_SESSION), E_USER_ERROR);
  144. redirect_to( $openid->GetRedirectURL() );
  145. }
  146. function complete_openid_authentication( &$request ) {
  147. if (!(check_cookie())) {
  148. // cookie not set, DO IT
  149. $openid_to_identity = array(
  150. 'email'=>'email_value',
  151. 'dob'=>'dob',
  152. 'postcode'=>'postal_code',
  153. 'country'=>'country_name',
  154. 'gender'=>'gender',
  155. 'language'=>'language',
  156. 'timezone'=>'tz'
  157. );
  158. if ( isset( $_SESSION['openid_url'] )) {
  159. global $db;
  160. $Identity =& $db->get_table( 'identities' );
  161. $Person =& $db->get_table( 'people' );
  162. $openid = $_SESSION['openid_url'];
  163. if (!strstr($openid,'http'))
  164. $openid = 'http://' . $openid;
  165. $i = $Identity->find_by( 'url', $openid );
  166. // OpenID auth complete, URL not exists
  167. // e-mail could be set though
  168. if (!$i && isset($_SESSION['openid_email']))
  169. $i = $Identity->find_by( 'email_value', $_SESSION['openid_email'] );
  170. //if (isset($_GET['openid_sreg_email']))
  171. // $i = $Identity->find_by( 'email_value', $_GET['openid_sreg_email'] );
  172. //if (!$i && isset($_GET['openid_sreg_nickname']))
  173. // $i = $Identity->find_by( 'nickname', $_GET['openid_sreg_nickname'] );
  174. if ($i) {
  175. $p = $Person->find( $i->person_id );
  176. } else {
  177. $p = $Person->base();
  178. $p->save();
  179. $i = $Identity->base();
  180. $i->set_value( 'person_id', $p->id );
  181. $i->set_value( 'label', 'profile 1' );
  182. if (isset($_SESSION['openid_email']))
  183. $i->set_value( 'email_value', $_SESSION['openid_email'] );
  184. }
  185. if (empty($i->url) || strstr( $i->url, "@" )) {
  186. $i->set_value( 'url', $openid );
  187. if (isset($_GET['openid_sreg_nickname']) && empty($i->nickname) ) {
  188. $nick = strtolower(urldecode($_GET['openid_sreg_nickname']));
  189. // set the nickname if it isn't alraedy taken and if it looks like a valid username
  190. if ($Identity->is_unique_value( $nick, 'nickname' ) && ereg("^([a-zA-Z0-9]+)$", $nick))
  191. $i->set_value( 'nickname', $nick );
  192. }
  193. // put SREG data in empty identity fields
  194. foreach($openid_to_identity as $k=>$v )
  195. if (!in_array($k,array('openid_sreg_nickname')) && isset($_GET['openid_sreg_'.$k]))
  196. if (empty($i->$v))
  197. $i->set_value( $v, urldecode($_GET['openid_sreg_'.$k]) );
  198. // split the SREG full name into first, last for VCARD, hCard, etc
  199. if (isset($_GET['openid_sreg_fullname']) && empty($i->given_name)) {
  200. $names = explode(' ',$_GET['openid_sreg_fullname']);
  201. if (strlen($names[0]) > 0 && empty($i->given_name))
  202. $i->set_value( 'given_name', $names[0] );
  203. if (isset($names[2]) && empty($i->family_name)) {
  204. $i->set_value( 'family_name', $names[2] );
  205. } elseif (isset($names[1]) && empty($i->family_name)) {
  206. $i->set_value( 'family_name', $names[1] );
  207. }
  208. $i->set_value( 'fullname', $_GET['openid_sreg_fullname']);
  209. }
  210. $i->set_value( 'avatar', base_path(true).'resource/favicon.png' );
  211. $i->save_changes();
  212. $i->set_etag( $p->id );
  213. }
  214. }
  215. if ( isset( $p->id ) && $p->id != 0) {
  216. // person id is valid
  217. // login complete
  218. set_cookie( $p->id );
  219. if (!(empty($_SESSION['requested_url'])))
  220. redirect_to( $_SESSION['requested_url'] );
  221. else
  222. redirect_to( $request->base );
  223. } else {
  224. // no person defined yet
  225. if ( isset($_SESSION['fb_person_id'])
  226. && $_SESSION['fb_person_id'] > 0 ) {
  227. } elseif ( isset($_SESSION['oauth_person_id'])
  228. && $_SESSION['oauth_person_id'] > 0 ) {
  229. // try to set the cookie
  230. // set_cookie( $_SESSION['oauth_person_id'] );
  231. } else {
  232. trigger_error( "unable to find the Person, sorry", E_USER_ERROR );
  233. }
  234. }
  235. } else {
  236. // cookie OK
  237. }
  238. }
  239. function ldap_login( &$vars ) {
  240. extract( $vars );
  241. $_SESSION['requested_url'] = $request->base;
  242. render( 'action', 'ldap' );
  243. }
  244. function _ldap( &$vars ) {
  245. extract( $vars );
  246. }
  247. function ldap_submit( &$vars ) {
  248. extract($vars);
  249. global $request;
  250. }
  251. function _email( &$vars ) {
  252. extract( $vars );
  253. $submit_url = $request->url_for( environment('authentication').'_submit' );
  254. $return_url = $request->url_for( 'openid_continue' ).'/';
  255. if (isset($_SESSION['requested_url']))
  256. $return_to = $_SESSION['requested_url'];
  257. else
  258. $return_to = $request->base;
  259. $protected_url = base_url(true);
  260. $Identity =& $db->model('Identity');
  261. if (isset($request->params['ident'])) {
  262. $ident = $Identity->find_by('token',$request->params['ident']);
  263. if ($ident) {
  264. $email = $ident->email_value;
  265. $_SESSION['openid_email'] = $email;
  266. $ident->set_value('token','');
  267. $ident->save_changes();
  268. } else {
  269. $email = false;
  270. }
  271. } else {
  272. $email = false;
  273. }
  274. return vars(
  275. array(
  276. &$email,
  277. &$protected_url,
  278. &$return_url,
  279. &$submit_url,
  280. &$return_to
  281. ),
  282. get_defined_vars()
  283. );
  284. }
  285. function _register( &$vars ) {
  286. extract( $vars );
  287. $submit_url = $request->url_for( environment('authentication').'_submit' );
  288. $return_url = $request->url_for( 'openid_continue' ).'/';
  289. if (isset($_SESSION['requested_url']))
  290. $return_to = $_SESSION['requested_url'];
  291. else
  292. $return_to = $request->base;
  293. $protected_url = base_url(true);
  294. if (isset($request->params['ident'])) {
  295. $ident = $Identity->find_by('token',$request->params['ident']);
  296. if ($ident) {
  297. $email = $ident->email_value;
  298. $_SESSION['openid_email'] = $email;
  299. $ident->set_value('token','');
  300. $ident->save_changes();
  301. } else {
  302. $email = false;
  303. }
  304. } else {
  305. $email = false;
  306. }
  307. return vars(
  308. array(
  309. &$email,
  310. &$protected_url,
  311. &$return_url,
  312. &$submit_url,
  313. &$return_to
  314. ),
  315. get_defined_vars()
  316. );
  317. }
  318. function _login( &$vars ) {
  319. extract( $vars );
  320. $submit_url = $request->url_for( 'openid_submit' );
  321. $return_url = $request->url_for( 'openid_continue' ).'/';
  322. if (isset($_SESSION['requested_url']))
  323. $return_to = $_SESSION['requested_url'];
  324. else
  325. $return_to = $request->base;
  326. $protected_url = base_url(true);
  327. if (isset($_SESSION['openid_url']))
  328. $openid_url = $_SESSION['openid_url'];
  329. else
  330. $openid_url = "";
  331. if (strstr($openid_url,'https://'))
  332. $openid_url = substr($openid_url,8);
  333. if (strstr($openid_url,'http://'))
  334. $openid_url = substr($openid_url,7);
  335. return vars(
  336. array(
  337. &$protected_url,
  338. &$return_url,
  339. &$submit_url,
  340. &$return_to,
  341. &$openid_url
  342. ),
  343. get_defined_vars()
  344. );
  345. }
  346. function normalize_url() {
  347. //
  348. }
  349. function password_register( &$vars ) {
  350. extract( $vars );
  351. $Identity =& $db->get_table( 'identities' );
  352. $Person =& $db->get_table( 'people' );
  353. if (!($request->password == $request->password2))
  354. trigger_error( "sorry the passwords do not match", E_USER_ERROR );
  355. //$i = $Identity->find_by(array(
  356. // 'nickname'=>$request->nickname
  357. //),1);
  358. //$p = $Person->find( $i->person_id );
  359. //if ( isset( $p->id ) && $p->id != 0) {
  360. $nick = $request->nickname;
  361. $sql = "SELECT id FROM ".$db->prefix."identities WHERE nickname LIKE '".$db->escape_string($nick)."' AND (post_notice = '' OR post_notice IS NULL)";
  362. $result = $db->get_result( $sql );
  363. if ( $db->num_rows($result) > 0) {
  364. trigger_error( "sorry that username is already taken", E_USER_ERROR );
  365. } else {
  366. // create new user and log them in
  367. $p = $Person->base();
  368. $p->save();
  369. $i = $Identity->base();
  370. $i->set_value( 'person_id', $p->id );
  371. $i->set_value( 'label', 'profile 1' );
  372. $i->set_value( 'nickname', $request->nickname );
  373. $i->set_value( 'url', $request->base."".$request->nickname );
  374. $i->set_value( 'password', md5($request->password) );
  375. $i->set_value( 'avatar', base_path(true).'resource/favicon.png' );
  376. $i->save_changes();
  377. $i->set_etag( $p->id );
  378. $_SESSION['openid_complete'] = true;
  379. set_cookie( $p->id );
  380. if (!(empty($_SESSION['requested_url'])))
  381. redirect_to( $_SESSION['requested_url'] );
  382. else
  383. redirect_to( $request->base );
  384. }
  385. }
  386. function password_submit( &$vars ) {
  387. extract($vars);
  388. global $request;
  389. $Identity =& $db->get_table( 'identities' );
  390. $Person =& $db->get_table( 'people' );
  391. $i = $Identity->find_by(array(
  392. 'nickname'=>$request->nickname,
  393. 'password'=>md5($request->password)
  394. ),1);
  395. if (!$i)
  396. trigger_error( "username or password incorrect, sorry", E_USER_ERROR );
  397. $p = $Person->find( $i->person_id );
  398. if ( isset( $p->id ) && $p->id != 0) {
  399. $_SESSION['openid_complete'] = true;
  400. set_cookie( $p->id );
  401. if (!(empty($_SESSION['requested_url'])))
  402. redirect_to( $_SESSION['requested_url'] );
  403. else
  404. redirect_to( $request->base );
  405. } else {
  406. trigger_error( "unable to find the Person, sorry", E_USER_ERROR );
  407. }
  408. }
  409. function openid_submit( &$vars ) {
  410. unset_cookie();
  411. unset($_SESSION['openid_complete']);
  412. unset($_SESSION['openid_url']);
  413. unset($_SESSION['openid_email']);
  414. authenticate_with_openid();
  415. }
  416. function email_submit( &$vars ) {
  417. extract($vars);
  418. global $request;
  419. unset_cookie();
  420. unset($_SESSION['openid_complete']);
  421. unset($_SESSION['openid_url']);
  422. unset($_SESSION['openid_email']);
  423. $Identity =& $db->get_table( 'identities' );
  424. $i = $Identity->find_by( 'email_value', $request->email );
  425. $_SESSION['openid_email'] = $request->email;
  426. if ( $i && !(strstr( $i->url, "@" )) && !empty($i->url)) {
  427. $request->openid_url = $i->url;
  428. authenticate_with_openid();
  429. } else {
  430. $url = environment('openid_server')."/?action=seek&email=".$request->email;
  431. $curl = curl_init($url);
  432. $method = "GET";
  433. $params = array();
  434. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  435. curl_setopt($curl, CURLOPT_HEADER, false);
  436. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  437. curl_setopt($curl, CURLOPT_HTTPGET, ($method == "GET"));
  438. curl_setopt($curl, CURLOPT_POST, ($method == "POST"));
  439. if ($method == "POST") curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
  440. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  441. $response = curl_exec($curl);
  442. if ( curl_errno($curl) == 0 ) {
  443. if (strstr( $response, "http" )) {
  444. // found a url, need to put it in the openid form
  445. $request->set_param('openid_url',trim($response));
  446. authenticate_with_openid();
  447. } else {
  448. // meh
  449. }
  450. }
  451. $_SESSION['requested_url'] = $request->base;
  452. redirect_to(environment('openid_server')."/?action=register&return=".urlencode($request->base)."&email=".urlencode($request->email));
  453. }
  454. if (!(empty($_SESSION['requested_url'])))
  455. redirect_to( $_SESSION['requested_url'] );
  456. else
  457. redirect_to( $request->base );
  458. }
  459. function openid_logout( &$vars ) {
  460. if (isset($_GET['forward']) && !empty($_SERVER['HTTP_REFERER']))
  461. $_SESSION['logout_forward'] = $_SERVER['HTTP_REFERER'];
  462. unset_cookie();
  463. extract( $vars );
  464. $_SESSION['openid_complete'] = false;
  465. //unset($_SESSION['openid_email']);
  466. //unset($_SESSION['openid_url']);
  467. $_SESSION['oauth_person_id']=0;
  468. $_SESSION['fb_person_id']=0;
  469. unset($_SESSION['fb_session']);
  470. unset($_SESSION['oauth_access_token']);
  471. unset($_SESSION['oauth_access_token_secret']);
  472. unset($_SESSION['oauth_request_token']);
  473. unset($_SESSION['oauth_request_token_secret']);
  474. unset($_SESSION['oauth_state']);
  475. unset($_SESSION['oauth_twitter']);
  476. unset($_SESSION['fb_userid']);
  477. unset($_SESSION['fb_person_id']);
  478. unset($_SESSION['oauth_person_id']);
  479. unset($_SESSION['requested_url']);
  480. unset($_SESSION['openid_complete']);
  481. unset($_SESSION['oid_return_to']);
  482. if (isset($_SESSION['logout_forward']))
  483. redirect_to($_SESSION['logout_forward']);
  484. if (environment('authentication') == 'password')
  485. redirect_to( $request->base );
  486. else
  487. redirect_to( environment('openid_server')."/?action=logout&return=".urlencode($request->base) );
  488. }
  489. function email_login( &$vars ) {
  490. extract( $vars );
  491. $_SESSION['requested_url'] = $request->base;
  492. render( 'action', 'email' );
  493. }
  494. function email_register( &$vars ) {
  495. extract( $vars );
  496. $_SESSION['requested_url'] = $request->base;
  497. render( 'action', 'register' );
  498. }
  499. function oauth_login( &$vars ) {
  500. render( 'action', 'oauth' );
  501. }
  502. function _oauth( &$vars ) {
  503. // top stream, re-connect to subtwitter-db
  504. extract( $vars );
  505. global $prefix;
  506. $Blog =& $db->model('Blog');
  507. if (isset($_GET['forward'])){
  508. if (!empty($_SERVER['HTTP_REFERER']))
  509. $_SESSION['tw_forward'] = $_SERVER['HTTP_REFERER'];
  510. if (isset($_GET['callbackurl']))
  511. $_SESSION['tw_forward'] = $_GET['callbackurl'];
  512. }
  513. if (empty($db->prefix)) {
  514. if (isset($_REQUEST['oauth_token'])) {
  515. $tabresult = $db->get_result("SHOW tables");
  516. $tables = array();
  517. $tablist = array();
  518. for($i=0;$tables[$i]=mysql_fetch_assoc($tabresult);$i++)
  519. foreach($tables[$i] as $k=>$v) $tablist[] = $v;
  520. $Blog->find();
  521. while ($b = $Blog->MoveNext()) {
  522. if (!empty($b->prefix) && in_array($b->prefix."_db_sessions",$tablist)) {
  523. $sql = "SELECT data FROM ".$b->prefix."_db_sessions WHERE data LIKE '%".$db->escape_string($_REQUEST['oauth_token'])."%'";
  524. $result = $db->get_result( $sql );
  525. if ($db->num_rows($result) == 1) {
  526. // XXX subdomain upgrade
  527. $redir = blog_url($b->nickname,true);
  528. $redir .= 'oauth_login';
  529. $redir .= "&oauth_token=".$_REQUEST['oauth_token'];
  530. $content = '<script type="text/javascript">'."\n";
  531. $content .= ' // <![CDATA['."\n";
  532. $content .= " location.replace('".$redir."');"."\n";
  533. $content .= ' // ]]>'."\n";
  534. $content .= '</script>'."\n";
  535. return vars(
  536. array(&$content),
  537. get_defined_vars()
  538. );
  539. }
  540. }
  541. }
  542. }
  543. }
  544. // http://abrah.am
  545. lib_include('twitteroauth');
  546. /* Sessions are used to keep track of tokens while user authenticates with twitter */
  547. /* Consumer key from twitter */
  548. $consumer_key = environment( 'twitterKey' );
  549. /* Consumer Secret from twitter */
  550. $consumer_secret = environment( 'twitterSecret' );
  551. /* Set up placeholder */
  552. $content = NULL;
  553. /* Set state if previous session */
  554. $state = $_SESSION['oauth_state'];
  555. /* Checks if oauth_token is set from returning from twitter */
  556. $session_token = $_SESSION['oauth_request_token'];
  557. /* Checks if oauth_token is set from returning from twitter */
  558. $oauth_token = $_REQUEST['oauth_token'];
  559. /* Set section var */
  560. $section = $_REQUEST['section'];
  561. /* If oauth_token is missing get it */
  562. if ($_REQUEST['oauth_token'] != NULL && $_SESSION['oauth_state'] === 'start') {/*{{{*/
  563. $_SESSION['oauth_state'] = $state = 'returned';
  564. }/*}}}*/
  565. /*
  566. * 'default': Get a request token from twitter for new user
  567. * 'returned': The user has authorize the app on twitter
  568. */
  569. switch ($state) {/*{{{*/
  570. default:
  571. /* Create TwitterOAuth object with app key/secret */
  572. $to = new TwitterOAuth($consumer_key, $consumer_secret);
  573. /* Request tokens from twitter */
  574. $tok = $to->getRequestToken();
  575. /* Save tokens for later */
  576. $Blog =& $db->model('Blog');
  577. $Blog->find();
  578. if (!empty($db->prefix) && isset($_REQUEST['oauth_token'])) {
  579. $tabresult = $db->get_result("SHOW tables");
  580. $tables = array();
  581. $tablist = array();
  582. for($i=0;$tables[$i]=mysql_fetch_assoc($tabresult);$i++)
  583. foreach($tables[$i] as $k=>$v) $tablist[] = $v;
  584. while ($b = $Blog->MoveNext()) {
  585. if (!empty($b->prefix) && in_array($b->prefix."_db_sessions",$tablist)) {
  586. $sql = "SELECT id FROM ".$b->prefix."_db_sessions WHERE data LIKE '%".$db->escape_string($_REQUEST['oauth_token'])."%'";
  587. $result = $db->get_result( $sql );
  588. if ($db->num_rows($result) == 1) {
  589. $sess = $db->result_value( $result, 0, "id" );
  590. $del = $db->get_result( "DELETE FROM ".$b->prefix."_db_sessions WHERE id = '$sess'" );
  591. }
  592. }
  593. }
  594. }
  595. $_SESSION['oauth_request_token'] = $token = $tok['oauth_token'];
  596. $_SESSION['oauth_request_token_secret'] = $tok['oauth_token_secret'];
  597. $_SESSION['oauth_state'] = "start";
  598. if (isset($_GET['forward']) && !empty($_SERVER['HTTP_REFERER']))
  599. $_SESSION['oauth_twitter'] = $_SERVER['HTTP_REFERER'];
  600. else
  601. $_SESSION['oauth_twitter'] = $request->base;
  602. /* Build the authorization URL */
  603. $auth_url = $to->getAuthorizeURL($token);
  604. if (empty($auth_url)) {
  605. $content = 'Request token not found, <a href="'.$request->url_for('oauth_login').'">click here to try again...</a>';
  606. } else {
  607. $content = '<script type="text/javascript">'."\n";
  608. $content .= ' // <![CDATA['."\n";
  609. $content .= " location.replace('".$auth_url."');"."\n";
  610. $content .= ' // ]]>'."\n";
  611. $content .= '</script>'."\n";
  612. }
  613. break;
  614. case 'returned':
  615. if (isset($_SESSION['oauth_twitter']))
  616. $redirect_to = $_SESSION['oauth_twitter'];
  617. else
  618. $redirect_to = $request->base;
  619. /* If the access tokens are already set skip to the API call */
  620. if ($_SESSION['oauth_access_token'] === NULL && $_SESSION['oauth_access_token_secret'] === NULL) {
  621. /* Create TwitterOAuth object with app key/secret and token key/secret from default phase */
  622. $to = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['oauth_request_token'], $_SESSION['oauth_request_token_secret']);
  623. /* Request access tokens from twitter */
  624. $tok = $to->getAccessToken();
  625. /* Save the access tokens. Normally these would be saved in a database for future use. */
  626. $_SESSION['oauth_access_token'] = $tok['oauth_token'];
  627. $_SESSION['oauth_access_token_secret'] = $tok['oauth_token_secret'];
  628. if (!($_SESSION['oauth_access_token'] === NULL && $_SESSION['oauth_access_token_secret'] === NULL)) {
  629. unset( $_SESSION['oauth_request_token'] );
  630. unset( $_SESSION['oauth_request_token_secret'] );
  631. }
  632. }
  633. $to = new TwitterOAuth(
  634. $consumer_key,
  635. $consumer_secret,
  636. $_SESSION['oauth_access_token'],
  637. $_SESSION['oauth_access_token_secret']
  638. );
  639. $session_oauth_token = $_SESSION['oauth_access_token'];
  640. $session_oauth_secret = $_SESSION['oauth_access_token_secret'];
  641. $content = $to->OAuthRequest('https://twitter.com/account/verify_credentials.json', array(), 'GET');
  642. if (!(class_exists('Services_JSON')))
  643. lib_include( 'json' );
  644. $json = new Services_JSON();
  645. $user = $json->decode($content);
  646. if (empty($user))
  647. trigger_error('The server said: '.$content, E_USER_ERROR );
  648. if (empty($prefix) && in_array('invites',$db->tables)) {
  649. $Invite =& $db->model( 'Invite' );
  650. $result = $Invite->find_by( 'nickname',$user->screen_name );
  651. if (!$result)
  652. trigger_error('Sorry, you have not been invited yet '.environment('email_from'), E_USER_ERROR);
  653. }
  654. $Identity =& $db->model('Identity');
  655. $Person =& $db->model('Person');
  656. $TwitterUser =& $db->model('TwitterUser');
  657. $twuser = $TwitterUser->find_by( 'twitter_id',$user->id );
  658. // a) twitter user exists, does not have a profile_id
  659. // b) twitter user exists, HAS a profile_id
  660. // c) twitter user does not exist
  661. if ($twuser) {
  662. if (!$twuser->profile_id) {
  663. // a
  664. $i = make_identity(array(
  665. $user->screen_name,
  666. $user->profile_image_url,
  667. $user->name,
  668. $user->description,
  669. $user->url,
  670. $user->location
  671. ));
  672. if (!$i)
  673. trigger_error('sorry I was unable to create an identity', E_USER_ERROR);
  674. $twuser->set_value('profile_id',$i->id);
  675. $twuser->set_value('oauth_key',$session_oauth_token);
  676. $twuser->set_value('oauth_secret',$session_oauth_secret);
  677. $twuser->save_changes();
  678. if (!$twuser)
  679. trigger_error('sorry I was unable to create a twitter user', E_USER_ERROR);
  680. } else {
  681. // b
  682. $i = $Identity->find($twuser->profile_id);
  683. if (!$i)
  684. trigger_error('sorry I was unable to find the identity', E_USER_ERROR);
  685. if ($session_oauth_token != $twuser->oauth_key) {
  686. $twuser->set_value('oauth_key',$session_oauth_token);
  687. $twuser->set_value('oauth_secret',$session_oauth_secret);
  688. $twuser->save_changes();
  689. }
  690. }
  691. } else {
  692. // c
  693. $i = make_identity(array(
  694. $user->screen_name,
  695. $user->profile_image_url,
  696. $user->name,
  697. $user->description,
  698. $user->url,
  699. $user->location
  700. ));
  701. if (!$i)
  702. trigger_error('sorry I was unable to create an identity', E_USER_ERROR);
  703. $twuser = make_twuser($user,$i->id,$session_oauth_token,$session_oauth_secret);
  704. if (!$twuser)
  705. trigger_error('sorry I was unable to create a twitter user', E_USER_ERROR);
  706. $Setting =& $db->model('Setting');
  707. $cfg = $Setting->base();
  708. $cfg->set_value('profile_id',$i->id);
  709. $cfg->set_value('person_id',$i->person_id);
  710. $cfg->set_value('name','config.env.importtwitter_'.$user->id);
  711. $cfg->set_value('value',1);
  712. $cfg->save_changes();
  713. $cfg->set_etag();
  714. }
  715. $_SESSION['oauth_person_id'] = $i->person_id;
  716. if (isset($_SESSION['tw_forward'])){
  717. $redirect_to = $_SESSION['tw_forward'];
  718. redirect_to($redirect_to);
  719. }
  720. if (empty($redirect_to)) {
  721. $content = "<p>there was an error in the oauth routine, sorry</p>";
  722. } else {
  723. $content = '<script type="text/javascript">'."\n";
  724. $content .= ' // <![CDATA['."\n";
  725. $content .= " location.replace('".$redirect_to."');"."\n";
  726. $content .= ' // ]]>'."\n";
  727. $content .= '</script>'."\n";
  728. }
  729. break;
  730. }/*}}}*/
  731. return vars(
  732. array(
  733. &$content,
  734. ),
  735. get_defined_vars()
  736. );
  737. }
  738. function make_identity( $user, $newperson=false ) {
  739. global $db,$prefix,$request;
  740. $Person =& $db->model('Person');
  741. if ($newperson) {
  742. $p = $Person->base();
  743. $p->save();
  744. } elseif (get_person_id()) {
  745. // make a new identity for the Person
  746. $p = $Person->find(get_person_id());
  747. } else {
  748. $p = $Person->base();
  749. $p->save();
  750. }
  751. if (!(get_class($p) == 'Record')){
  752. $p = $Person->base();
  753. $p->save();
  754. }
  755. $Identity =& $db->model('Identity');
  756. $i = $Identity->base();
  757. $nicker = $db->escape_string($user[0]);
  758. for ( $j=1; $j<50; $j++ ) {
  759. $sql = "SELECT nickname FROM ".$prefix."identities WHERE nickname LIKE '".$nicker."' AND (post_notice = '' OR post_notice IS NULL)";
  760. $result = $db->get_result( $sql );
  761. if ($db->num_rows($result) > 0) {
  762. $nicker = $db->escape_string($user[0]).$j;
  763. } else {
  764. break;
  765. }
  766. }
  767. $i->set_value( 'avatar', base_path(true).'resource/favicon.png' );
  768. $i->set_value( 'nickname', $nicker );
  769. if (!empty($user[1]))
  770. $i->set_value( 'avatar', $user[1] );
  771. $i->set_value( 'fullname', $user[2] );
  772. $i->set_value( 'bio', $user[3] );
  773. $i->set_value( 'homepage', $user[4] );
  774. $i->set_value( 'locality', $user[5] );
  775. $i->set_value( 'label', 'profile 1' );
  776. $i->set_value( 'person_id', $p->id );
  777. $i->save_changes();
  778. $i->set_etag($p->id);
  779. if (empty($prefix) && in_array('invites',$db->tables)) {
  780. $Membership =& $db->model( 'Membership' );
  781. $m = $Membership->base();
  782. $m->set_value( 'group_id', 4 ); // XXX
  783. $m->set_value( 'person_id', $p->id );
  784. $m->save_changes();
  785. }
  786. $i->set_value( 'profile', $request->url_for(array('resource'=>"_".$i->id)) );
  787. $i->set_value( 'profile_url', $request->url_for(array('resource'=>$nicker)) );
  788. $i->save_changes();
  789. //$i->set_value( 'update_profile', $updateProfile );
  790. //$i->set_value( 'post_notice', $postNotice );
  791. return $i;
  792. }
  793. function facebook_dologin(&$vars){
  794. extract($vars);
  795. foreach( array('helper','twitter','facebook') as $module )
  796. require_once $GLOBALS['PATH']['dbscript'] . $module . '.php';
  797. $xd = '/resource/xd_receiver.htm';
  798. $fbkey = environment('facebookKey');
  799. $fbsec = environment('facebookSecret');
  800. $appid = environment('facebookAppId');
  801. $agent = environment('facebookAppName');
  802. $fblogin = $request->url_for('facebook_login');
  803. $fbuid = 0;
  804. if (signed_in() && has_facebook_account()){
  805. $fbuid = $_SESSION['fb_userid'];
  806. }
  807. add_include_path(library_path().'facebook_stream');
  808. require_once "Services/Facebook.php";
  809. if (isset($_SESSION['fb_userid']) && !empty($_SESSION['fb_userid'])) {
  810. global $prefix,$db;
  811. $db->prefix = $prefix;
  812. $uid = $_SESSION['fb_userid'];
  813. $sql = "SELECT DISTINCT oauth_key FROM facebook_users WHERE facebook_id = ".$uid;
  814. $result = $db->get_result( $sql );
  815. if (!(mysql_num_rows($result) == 1))
  816. trigger_error('unable to find facebook user',E_USER_ERROR);
  817. $sess = $db->result_value($result,0,'oauth_key');
  818. } else {
  819. $sess = false;
  820. }
  821. $next = $fblogin;
  822. $f = new Facebook(
  823. $fbkey,
  824. $fbsec,
  825. $appid,
  826. $agent,
  827. $sess,
  828. $next
  829. );
  830. $f->permission_to('publish_stream',false,true);
  831. redirect_to($request->base);
  832. }
  833. function facebook_getloggedin(){
  834. extract($vars);
  835. foreach( array('helper','twitter','facebook') as $module )
  836. require_once $GLOBALS['PATH']['dbscript'] . $module . '.php';
  837. $xd = '/resource/xd_receiver.htm';
  838. $fbkey = environment('facebookKey');
  839. $fbsec = environment('facebookSecret');
  840. $appid = environment('facebookAppId');
  841. $agent = environment('facebookAppName');
  842. global $request;
  843. $fblogin = $request->url_for('facebook_login');
  844. $fbuid = 0;
  845. if (signed_in() && has_facebook_account()){
  846. $fbuid = $_SESSION['fb_userid'];
  847. if (isset($_SESSION['fb_forward']))
  848. redirect_to($_SESSION['fb_forward']);
  849. }
  850. add_include_path(library_path().'facebook_stream');
  851. require_once "Services/Facebook.php";
  852. if (isset($_SESSION['fb_userid']) && !empty($_SESSION['fb_userid'])) {
  853. global $prefix,$db;
  854. $db->prefix = $prefix;
  855. $uid = $_SESSION['fb_userid'];
  856. $sql = "SELECT DISTINCT oauth_key FROM facebook_users WHERE facebook_id = ".$uid;
  857. $result = $db->get_result( $sql );
  858. if (!(mysql_num_rows($result) == 1))
  859. trigger_error('unable to find facebook user',E_USER_ERROR);
  860. $sess = $db->result_value($result,0,'oauth_key');
  861. } else {
  862. $sess = false;
  863. }
  864. $next = $fblogin;
  865. if (isset($_GET['callbackurl']))
  866. $next = $_GET['callbackurl'];
  867. $f = new Facebook(
  868. $fbkey,
  869. $fbsec,
  870. $appid,
  871. $agent,
  872. $sess,
  873. $next
  874. );
  875. $tok = $f->request_token();
  876. redirect_to( $tok->authorize_url().'&fbconnect=true&return_session=true&req_perms=offline_access,publish_stream' );
  877. }
  878. function facebook_login( &$vars ) {
  879. extract($vars);
  880. $app_id = environment('facebookAppId');
  881. $consumer_key = environment('facebookKey');
  882. $consumer_secret = environment('facebookSecret');
  883. $agent = environment('facebookAppName')." (curl)";
  884. add_include_path(library_path());
  885. add_include_path(library_path().'facebook-platform/php');
  886. add_include_path(library_path().'facebook_stream');
  887. require_once "facebook.php";
  888. require_once "FacebookStream.php";
  889. require_once "Services/Facebook.php";
  890. if (isset($_GET['forward'])){
  891. if (!empty($_SERVER['HTTP_REFERER']))
  892. $_SESSION['fb_forward'] = $_SERVER['HTTP_REFERER'];
  893. if (isset($_GET['callbackurl']))
  894. $_SESSION['fb_forward'] = $_GET['callbackurl'];
  895. }
  896. // $sesskey = environment('facebookSession');
  897. $fb = new Facebook($consumer_key, $consumer_secret, true);
  898. // $facebook->api_client->session_key = $sesskey;
  899. $_SESSION['fb_session'] = (string)$fb->api_client->session_key;
  900. $_SESSION['fb_userid'] = (string)$fb->user;
  901. if (isset($_GET['session'])){
  902. if (!(class_exists('Services_JSON')))
  903. lib_include( 'json' );
  904. $data = $_GET['session'];
  905. // print_r(unserialize($data));
  906. $arr = (array)json_decode($data);
  907. if ($arr['uid'])
  908. $_SESSION['fb_userid'] = $arr['uid'];
  909. if ($arr['session_key'])
  910. $_SESSION['fb_session'] = $arr['session_key'];
  911. }
  912. if (!$_SESSION['fb_userid'])
  913. redirect_to($request->url_for('facebook_getloggedin'));
  914. $fs = new FacebookStream($consumer_key,$consumer_secret,$agent,$app_id);
  915. $token = $fs->getAccessToken();
  916. $_SESSION['fb_request_token'] = $token;
  917. $fieldlist = array(
  918. 'last_name',
  919. 'first_name',
  920. 'pic_small',
  921. 'profile_blurb',
  922. 'profile_url',
  923. 'locale',
  924. 'name',
  925. 'proxied_email'
  926. );
  927. $fields = implode(',',$fieldlist);
  928. $user = $fs->getInfo( $_SESSION['fb_userid'], $fields );
  929. $values = array();
  930. $values[] = str_replace(' ','',strtolower((string)$user->user->name));
  931. $values[] = (string)$user->user->pic_small;
  932. $values[] = (string)$user->user->name;
  933. $values[] = (string)$user->user->profile_blurb;
  934. $values[] = (string)$user->user->profile_url;
  935. $values[] = (string)$user->user->locale;
  936. $Identity =& $db->model('Identity');
  937. $Person =& $db->model('Person');
  938. $FacebookUser =& $db->model('FacebookUser');
  939. if (empty($prefix) && in_array('invites',$db->tables)) {
  940. $Invite =& $db->model( 'Invite' );
  941. $result = $Invite->find_by( 'nickname', (string)$user->user->name );
  942. if (!$result)
  943. trigger_error('Sorry, you have not been invited yet '.environment('email_from'), E_USER_ERROR);
  944. }
  945. $faceuser = $FacebookUser->find_by( 'facebook_id',$_SESSION['fb_userid'] );
  946. // a) facebook user exists, does not have a profile_id
  947. // b) facebook user exists, HAS a profile_id
  948. // c) facebook user does not exist
  949. if ($faceuser) {
  950. if (!$faceuser->profile_id) {
  951. $i = make_identity($values);
  952. if (!$i)
  953. trigger_error('sorry I was unable to create an identity', E_USER_ERROR);
  954. $faceuser->set_value('profile_id',$i->id);
  955. $faceuser->save_changes();
  956. if (!$faceuser)
  957. trigger_error('sorry I was unable to create a facebook user', E_USER_ERROR);
  958. } else {
  959. // b
  960. $i = $Identity->find($faceuser->profile_id);
  961. if (!$i)
  962. trigger_error('sorry I was unable to find the identity', E_USER_ERROR);
  963. }
  964. } else {
  965. // c
  966. $i = make_identity($values);
  967. if (!$i)
  968. trigger_error('sorry I was unable to create an identity', E_USER_ERROR);
  969. $faceuser = make_fb_user($user,$i->id);
  970. if (!$faceuser)
  971. trigger_error('sorry I was unable to create a facebook user', E_USER_ERROR);
  972. $Setting =& $db->model('Setting');
  973. $cfg = $Setting->base();
  974. $cfg->set_value('profile_id',$i->id);
  975. $cfg->set_value('person_id',$i->person_id);
  976. $cfg->set_value('name','config.env.importfacebook_'.(string)$user->user->uid);
  977. $cfg->set_value('value',1);
  978. $cfg->save_changes();
  979. $cfg->set_etag();
  980. }
  981. $_SESSION['fb_person_id'] = $i->person_id;
  982. if (isset($_SESSION['fb_forward']))
  983. redirect_to($_SESSION['fb_forward']);
  984. redirect_to($request->base);
  985. }
  986. function make_fb_user( $user, $profile_id ) {
  987. global $db;
  988. $Identity =& $db->model('Identity');
  989. $Person =& $db->model('Person');
  990. $nickname = str_replace(' ','',strtolower((string)$user->user->name));
  991. $FacebookUser =& $db->model('FacebookUser');
  992. $faceuser = $FacebookUser->find_by( 'facebook_id',(string)$user->user->uid );
  993. if ($faceuser)
  994. return $faceuser;
  995. $faceuser = $FacebookUser->base();
  996. $faceuser->set_value('description', (string)$user->user->profile_blurb);
  997. $faceuser->set_value('screen_name', $nickname);
  998. $faceuser->set_value('url', (string)$user->user->profile_url);
  999. $faceuser->set_value('name', (string)$user->user->name);
  1000. $faceuser->set_value('protected', 0);
  1001. $faceuser->set_value('followers_count', 0);
  1002. $faceuser->set_value('profile_image_url', (string)$user->user->pic_small);
  1003. $faceuser->set_value('location', (string)$user->user->locale);
  1004. $faceuser->set_value('facebook_id', (string)$user->user->uid);
  1005. $faceuser->set_value('profile_id', $profile_id);
  1006. $faceuser->set_value('oauth_key', $_SESSION['fb_session']);
  1007. $faceuser->save_changes();
  1008. return $faceuser;
  1009. }
  1010. function make_twuser( $user, $profile_id, $oauthkey, $oauthsecret ) {
  1011. global $db;
  1012. $Identity =& $db->model('Identity');
  1013. $Person =& $db->model('Person');
  1014. $nickname = $user->screen_name;
  1015. $TwitterUser =& $db->model('TwitterUser');
  1016. $twuser = $TwitterUser->find_by( 'twitter_id',$user->id );
  1017. if ($twuser)
  1018. return $twuser;
  1019. $twuser = $TwitterUser->base();
  1020. $twuser->set_value('description',$user->description);
  1021. $twuser->set_value('screen_name',$nickname);
  1022. $twuser->set_value('url',$user->url);
  1023. $twuser->set_value('name',$user->name);
  1024. $twuser->set_value('protected',$user->protected);
  1025. $twuser->set_value('followers_count',$user->followers_count);
  1026. $twuser->set_value('profile_image_url',$user->profile_image_url);
  1027. $twuser->set_value('location',$user->location);
  1028. $twuser->set_value('twitter_id',$user->id);
  1029. $twuser->set_value('profile_id',$profile_id);
  1030. $twuser->set_value('oauth_key',$oauthkey);
  1031. $twuser->set_value('oauth_secret',$oauthsecret);
  1032. $twuser->save_changes();
  1033. return $twuser;
  1034. }
  1035. function openid_login( &$vars ) {
  1036. extract( $vars );
  1037. global $request;
  1038. if (isset($request->params['openid'])) {
  1039. $openid = urldecode($request->params['openid']);
  1040. if (!strstr($openid,'http'))
  1041. $openid = 'http://' . $openid;
  1042. if ("/" == substr($openid,-1))
  1043. $openid = substr( $openid, 0, -1 );
  1044. $request->set_param('return_url',$request->url_for( 'openid_continue' ).'/');
  1045. $request->set_param('protected_url',$request->base);
  1046. $request->set_param('openid_url',trim($openid));
  1047. authenticate_with_openid();
  1048. if (!(empty($_SESSION['requested_url'])))
  1049. redirect_to( $_SESSION['requested_url'] );
  1050. else
  1051. redirect_to( $request->base );
  1052. }
  1053. render( 'action', 'login' );
  1054. }
  1055. function openid_continue( &$vars ) {
  1056. extract( $vars );
  1057. $valid = false;
  1058. if ( class_exists('MySQL') && environment('openid_version') > 1 && !isset($_SESSION['openid_degrade']) ) {
  1059. global $openid;
  1060. wp_plugin_include(array(
  1061. 'wp-openid'
  1062. ));
  1063. $logic = new WordPressOpenID_Logic(null);
  1064. $logic->activate_plugin();
  1065. $consumer = WordPressOpenID_Logic::getConsumer();
  1066. $openid->response = $consumer->complete($_SESSION['oid_return_to']);
  1067. switch( $openid->response->status ) {
  1068. case Auth_OpenID_CANCEL:
  1069. trigger_error('The OpenID assertion was cancelled.', E_USER_ERROR );
  1070. break;
  1071. case Auth_OpenID_FAILURE:
  1072. // if we fail OpenID v2 here, we retry once with OpenID v1
  1073. $_SESSION['openid_degrade'] = true;
  1074. $request->set_param('return_url',$request->url_for( 'openid_continue' ).'/');
  1075. $request->set_param('protected_url',$request->base);
  1076. $request->set_param('openid_url',$_SESSION['openid_url']);
  1077. authenticate_with_openid();
  1078. break;
  1079. case Auth_OpenID_SUCCESS:
  1080. $_SESSION['openid_complete'] = true;
  1081. $valid = true;
  1082. break;
  1083. }
  1084. }
  1085. if (!($valid)) {
  1086. include $GLOBALS['PATH']['library'] . 'openid.php';
  1087. $openid = new SimpleOpenID;
  1088. $openid->SetIdentity( $_SESSION['openid_url'] );
  1089. $openid->SetApprovedURL( $request->url_for( 'openid_continue' ).'/');
  1090. $openid->SetTrustRoot( $request->base );
  1091. $server_url = $_SESSION['openid_server_url'];
  1092. $openid->SetOpenIDServer( $server_url );
  1093. $valid = $openid->ValidateWithServer();
  1094. }
  1095. if ($valid)
  1096. $_SESSION['openid_complete'] = true;
  1097. else
  1098. trigger_error( "Sorry, the openid server $server_url did not validate your identity.", E_USER_ERROR );
  1099. complete_openid_authentication( $request );
  1100. if (!(empty($_SESSION['requested_url'])))
  1101. redirect_to( $_SESSION['requested_url'] );
  1102. else
  1103. redirect_to( $request->base );
  1104. }
  1105. function security_init() {
  1106. global $request;
  1107. // add Routes -- route name, pattern to match, and default request parameters
  1108. $request->connect( 'openid_continue/:fromserver', array('action'=>'openid_continue') );
  1109. $request->connect( 'openid_continue' );
  1110. $request->connect( 'openid_login_return' );
  1111. $request->connect( 'openid_submit' );
  1112. $request->connect( 'password_submit' );
  1113. $request->connect( 'facebook_dologin' );
  1114. $request->connect( 'facebook_getloggedin' );
  1115. $request->connect( 'rsslike/:forurl', array('action'=>'like','resource'=>'posts'));
  1116. $request->connect( 'password_register' );
  1117. $request->connect( 'openid_logout' );
  1118. $request->connect( 'openid_login' );
  1119. $request->connect( 'openid_login/:openid', array('action'=>'openid_login') );
  1120. $request->connect( 'email_login' );
  1121. $request->connect( 'register' );
  1122. $request->connect( 'email_submit' );
  1123. $request->connect( 'ldap_login' );
  1124. $request->connect( 'ldap_submit' );
  1125. $request->connect( 'oauth_login' );
  1126. $request->connect( 'facebook_login' );
  1127. $request->connect( 'authsub' );
  1128. foreach (array(
  1129. 'api/direct_messages/sent'=>'api_direct_messages_sent',
  1130. 'api/direct_messages'=>'api_direct_messages',
  1131. 'api/statuses/mentions'=>'api_statuses_mentions',
  1132. 'api/users/show'=>'api_users_show',
  1133. 'api/rss/textInput'=>'api_rss_textInput'
  1134. ) as $f1=>$f2) {
  1135. $patterns = explode( '/', $f1 );
  1136. $requirements = array();
  1137. foreach ( $patterns as $pos => $str ) {
  1138. if ( substr( $str, 0, 1 ) == ':' ) {
  1139. $requirements[] = '[A-Za-z0-9_.]+';
  1140. }
  1141. }
  1142. $routesetup = array(
  1143. 'action'=>$f2,
  1144. 'resource'=>'posts'
  1145. );
  1146. if (count($requirements) > 0)
  1147. $routesetup['requirements'] = $requirements;
  1148. $request->connect(
  1149. $f1,
  1150. $routesetup
  1151. );
  1152. global $prefix;
  1153. if (!$prefix) {
  1154. global $db;
  1155. $Blog =& $db->model('Blog');
  1156. $Blog->set_limit(200);
  1157. $coll = new Collection('blogs');
  1158. while ($b = $coll->MoveNext()) {
  1159. $sub = $b->nickname;
  1160. $routesetup['stream'] = $sub;
  1161. $routesetup['prefix'] = $b->prefix;
  1162. if (is_array($patterns))
  1163. $request->connect(
  1164. $sub.'/'.implode('/',$patterns),
  1165. $routesetup
  1166. );
  1167. }
  1168. }
  1169. }
  1170. $request->connect( 'permanent_facebook_key/:key', array('action'=>'permanent_facebook_key') );
  1171. $request->routematch();
  1172. if (isset($_SESSION['fb_person_id'])
  1173. && $_SESSION['fb_person_id'] >0) {
  1174. $request->openid_complete = true;
  1175. return $_SESSION['fb_person_id'];
  1176. } elseif (isset($_SESSION['oauth_person_id'])
  1177. && $_SESSION['oauth_person_id'] >0) {
  1178. $request->openid_complete = true;
  1179. return $_SESSION['oauth_person_id'];
  1180. } elseif ( isset( $_SESSION['openid_complete'] ) && check_cookie() ) {
  1181. if ( !isset($request->openid_url) && $_SESSION['openid_complete'] == true)
  1182. $request->openid_complete = true;
  1183. } elseif (check_cookie()) {
  1184. $_SESSION['openid_complete'] = true;
  1185. $request->openid_complete = true;
  1186. }
  1187. }
  1188. function security_install() {
  1189. //
  1190. }
  1191. function security_uninstall() {
  1192. //
  1193. }
  1194. function get_twitter_oauth(){
  1195. global $db,$prefix,$request;
  1196. $sql = "SELECT oauth_key,oauth_secret FROM ".$prefix."twitter_users WHERE profile_id = ".get_profile_id();
  1197. $result = $db->get_result( $sql );
  1198. if ($db->num_rows($result) == 1) {
  1199. // http://abrah.am
  1200. lib_include('twitteroauth');
  1201. $key = $db->result_value($result,0,'oauth_key');
  1202. $secret = $db->result_value($result,0,'oauth_secret');
  1203. $consumer_key = environment( 'twitterKey' );
  1204. $consumer_secret = environment( 'twitterSecret' );
  1205. $to = new TwitterOAuth(
  1206. $consumer_key,
  1207. $consumer_secret,
  1208. $key,
  1209. $secret
  1210. );
  1211. return $to;
  1212. }
  1213. return false;
  1214. }
  1215. function get_twitter_screen_name($person_id=false){
  1216. global $db;
  1217. if (!$person_id)
  1218. $person_id = get_person_id();
  1219. $TwitterUser =& $db->model('TwitterUser');
  1220. $TwitterUser->has_one('profile_id:identities');
  1221. $stat = $TwitterUser->find_by(array(
  1222. 'identities.person_id'=>$person_id
  1223. ));
  1224. if ($stat){
  1225. $tu = $TwitterUser->MoveFirst();
  1226. return $tu->screen_name;
  1227. }
  1228. return false;
  1229. }
  1230. function explode_returned($responseString){
  1231. $r = array();
  1232. foreach (explode('&', $responseString) as $param) {
  1233. $pair = explode('=', $param, 2);
  1234. if (count($pair) != 2) continue;
  1235. $r[urldecode($pair[0])] = urldecode($pair[1]);
  1236. }
  1237. return $r;
  1238. }
  1239. function setup_google_account(){
  1240. if (!isset($_SESSION['googleAccessKey']) && !isset($_SESSION['googleAccessSecret']))
  1241. trigger_error('sorry the oauth credentials were not found', E_USER_ERROR);
  1242. global $request,$db;
  1243. $Setting =& $db->model('Setting');
  1244. $stat = $Setting->find_by(array('name'=>'google_key','profile_id'=>get_profile_id()));
  1245. if (!$stat && !empty($_SESSION['googleAccessKey']) && get_profile_id()) {
  1246. $stat = $Setting->base();
  1247. $stat->set_value('profile_id',get_profile_id());
  1248. $stat->set_value('person_id',get_person_id());
  1249. $stat->set_value('name','google_key');
  1250. $stat->set_value('value',$_SESSION['googleAccessKey']);
  1251. $stat->save_changes();
  1252. $stat->set_etag();
  1253. $stat = $Setting->base();
  1254. $stat->set_value('profile_id',get_profile_id());
  1255. $stat->set_value('person_id',get_person_id());
  1256. $stat->set_value('name','google_secret');
  1257. $stat->set_value('value',$_SESSION['googleAccessSecret']);
  1258. $stat->save_changes();
  1259. $stat->set_etag();
  1260. $cfg = $Setting->base();
  1261. $cfg->set_value('profile_id',get_profile_id());
  1262. $cfg->set_value('person_id',get_person_id());
  1263. $cfg->set_value('name','config.env.importgoogle_'.$_SESSION['googleAccessKey']);
  1264. $cfg->set_value('value',1);
  1265. $cfg->save_changes();
  1266. $cfg->set_etag();
  1267. }
  1268. if (isset($_SESSION['bz_forward']))
  1269. redirect_to($_SESSION['bz_forward']);
  1270. redirect_to($request->base);
  1271. exit;
  1272. // this is how you make a gdata api request
  1273. $endpoint = $scope;
  1274. $parsed = parse_url($endpoint);
  1275. $params = array();
  1276. parse_str($parsed['query'], $params);
  1277. lib_include('twitteroauth');
  1278. $base_url = $request->base;
  1279. $key = environment( 'googleKey' );
  1280. $secret = environment( 'googleSecret' );
  1281. $consumer = new OAuthConsumer($key, $secret, NULL);
  1282. $hmac_method = new OAuthSignatureMethod_HMAC_SHA1();
  1283. $token = get_oauth_token($_SESSION['googleAccessKey'], $_SESSION['googleAccessSecret']);
  1284. $oauth_req = OAuthRequest::from_consumer_and_token($consumer, $token, "GET", $endpoint, $params);
  1285. $oauth_req->sign_request($hmac_method, $consumer, $token);
  1286. $responseString = send_signed_request($oauth_req->get_normalized_http_method(),
  1287. $endpoint, $oauth_req->to_header(), NULL, false);
  1288. echo $responseString;
  1289. exit;
  1290. $key = environment( 'googleKey' );
  1291. $secret = environment( 'googleSecret' );
  1292. $hmac_method = new OAuthSignatureMethod_HMAC_SHA1();
  1293. $consumer = new OAuthConsumer($key, $secret, NULL);
  1294. $token = $arr['oauth_token'];
  1295. $tokensecret = $arr['oauth_token_secret'];
  1296. $token = new OAuthToken($token, $tokensecret);
  1297. $endpoint = 'https://mail.google.com/mail/feed/atom/';
  1298. $oauth_req = OAuthRequest::from_consumer_and_token($consumer, $token, "GET", $endpoint, NULL);
  1299. $oauth_req->sign_request($hmac_method, $consumer, $token);
  1300. $responseString = readUrl($oauth_req->to_url());
  1301. print_r($responseString);
  1302. }
  1303. function authsub( &$vars ) {
  1304. // unset($_SESSION['googleAccessSecret']);
  1305. // unset($_SESSION['googleAccessKey']);
  1306. // exit;
  1307. if (isset($_SESSION['googleAccessKey']) && isset($_SESSION['googleAccessSecret']))
  1308. setup_google_account();
  1309. extract($vars);
  1310. // $scope = 'https://mail.google.com/mail/feed/atom/';
  1311. if (isset($_GET['forward'])){
  1312. if (!empty($_SERVER['HTTP_REFERER']))
  1313. $_SESSION['bz_forward'] = $_SERVER['HTTP_REFERER'];
  1314. if (isset($_GET['callbackurl']))
  1315. $_SESSION['bz_forward'] = $_GET['callbackurl'];
  1316. }
  1317. $scope = 'https://www.googleapis.com/auth/buzz';
  1318. $base_url = $request->base;
  1319. $endpoints = array(
  1320. // 'https://www.google.com/accounts/OAuthGetRequestToken?scope='.$scope,
  1321. 'https://www.google.com/accounts/OAuthGetRequestToken?scope='.$scope,
  1322. // 'https://www.google.com/accounts/OAuthAuthorizeToken',
  1323. 'https://www.google.com/buzz/api/auth/OAuthAuthorizeToken',
  1324. 'https://www.google.com/accounts/OAuthGetAccessToken'
  1325. );
  1326. if (!isset($_SESSION['googleAccessKey']) && !isset($_SESSION['googleAccessSecret']))

Large files files are truncated, but you can click here to view the full file