| 
						
						
						
					 | 
				
				 | 
				
					@ -1,6 +1,6 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					<?php | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					function require_login(&$app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					function require_login(&$app, $redirect=true) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if(array_key_exists('token', $params)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -8,16 +8,25 @@ function require_login(&$app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $_SESSION['user_id'] = $data->user_id; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $_SESSION['me'] = $data->me; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch(DomainException $e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      header('X-Error: DomainException'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $app->redirect('/', 301); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if($redirect) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        header('X-Error: DomainException'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $app->redirect('/', 301); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch(UnexpectedValueException $e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      header('X-Error: UnexpectedValueException'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $app->redirect('/', 301); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if($redirect) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        header('X-Error: UnexpectedValueException'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $app->redirect('/', 301); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if(!array_key_exists('user_id', $_SESSION)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->redirect('/'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if($redirect) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $app->redirect('/'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return ORM::for_table('users')->find_one($_SESSION['user_id']); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -95,6 +104,24 @@ $app->get('/bookmark', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/favorite', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $url = ''; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if(array_key_exists('url', $params)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $url = $params['url']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $html = render('new-favorite', array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'title' => 'New Favorite', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'url' => $url, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'token' => generate_login_token() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    )); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body($html); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->post('/prefs', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -165,6 +192,109 @@ $app->get('/add-to-home', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/settings', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $html = render('settings', array('title' => 'Settings', 'include_facebook' => true)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body($html); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/favorite-popup', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $html = $app->render('favorite-popup.php', array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'url' => $params['url'],  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'token' => $params['token'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    )); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body($html); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					function create_favorite(&$user, $url) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $micropub_request = array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    'like-of' => $url | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $r = micropub_post_for_user($user, $micropub_request); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $facebook_id = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $instagram_id = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $tweet_id = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  /* | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  // Facebook likes are posted via Javascript, so pass the FB ID to the javascript code
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if(preg_match('/https?:\/\/(?:www\.)?facebook\.com\/(?:[^\/]+)\/posts\/(\d+)/', $url, $match)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $facebook_id = $match[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if(preg_match('/https?:\/\/(?:www\.)?facebook\.com\/photo\.php\?fbid=(\d+)/', $url, $match)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $facebook_id = $match[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if(preg_match('/https?:\/\/(?:www\.)?instagram\.com\/p\/([^\/]+)/', $url, $match)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $instagram_id = $match[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if($user->instagram_access_token) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $instagram = instagram_client(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $instagram->setAccessToken($user->instagram_access_token); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $ch = curl_init('https://api.instagram.com/v1/media/shortcode/' . $instagram_id . '?access_token=' . $user->instagram_access_token); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $result = json_decode(curl_exec($ch)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $result = $instagram->likeMedia($result->data->id); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // TODO: indicate that the instagram post couldn't be liked because no access token was available
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if(preg_match('/https?:\/\/(?:www\.)?twitter\.com\/[^\/]+\/status(?:es)?\/(\d+)/', $url, $match)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $tweet_id = $match[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $twitter = new \TwitterOAuth\Api(Config::$twitterClientID, Config::$twitterClientSecret,  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $user->twitter_access_token, $user->twitter_token_secret); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $result = $twitter->post('favorites/create', array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'id' => $tweet_id | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    )); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  return $r; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/favorite.js', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $app->response()->header("Content-type", "text/javascript"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app, false)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if(array_key_exists('url', $params)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $r = create_favorite($user, $params['url']); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $app->response()->body($app->render('favorite-js.php', array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        'url' => $params['url'],  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        'like_url' => $r['location'],  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        'error' => $r['error'], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 'facebook_id' => $facebook_id
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $app->response()->body('alert("no url");'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body('alert("invalid token");'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->post('/favorite', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $r = create_favorite($user, $params['url']); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'location' => $r['location'], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'error' => $r['error'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/micropub/syndications', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $data = get_syndication_targets($user); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -184,31 +314,155 @@ $app->post('/micropub/post', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      return $v !== ''; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Now send to the micropub endpoint
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $r = micropub_post($user->micropub_endpoint, $params, $user->micropub_access_token); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $request = $r['request']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $response = $r['response']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $r = micropub_post_for_user($user, $params); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->last_micropub_response = json_encode($r); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->last_micropub_response_date = date('Y-m-d H:i:s'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'request' => htmlspecialchars($r['request']), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'response' => htmlspecialchars($r['response']), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'location' => $r['location'], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'error' => $r['error'], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'curlinfo' => $r['curlinfo'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->post('/auth/facebook', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app, false)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // User just auth'd with facebook, store the access token
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->facebook_access_token = $params['fb_token']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'result' => 'ok' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'result' => 'error' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					*/ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->post('/auth/twitter', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app, false)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // User just auth'd with twitter, store the access token
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->twitter_access_token = $params['twitter_token']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->twitter_token_secret = $params['twitter_secret']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Check the response and look for a "Location" header containing the URL
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if($response && preg_match('/Location: (.+)/', $response, $match)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $location = $match[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $user->micropub_success = 1; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'result' => 'ok' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'result' => 'error' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					function getTwitterLoginURL(&$twitter) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $request_token = $twitter->getRequestToken(Config::$base_url . 'auth/twitter/callback'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $_SESSION['twitter_auth'] = $request_token; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  return $twitter->getAuthorizeURL($request_token['oauth_token']); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/auth/twitter', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app, false)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // If there is an existing Twitter token, check if it is valid
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Otherwise, generate a Twitter login link
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $twitter_login_url = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $twitter = new \TwitterOAuth\Api(Config::$twitterClientID, Config::$twitterClientSecret,  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $user->twitter_access_token, $user->twitter_token_secret); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if(array_key_exists('login', $params)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $twitter = new \TwitterOAuth\Api(Config::$twitterClientID, Config::$twitterClientSecret); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $twitter_login_url = getTwitterLoginURL($twitter); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $location = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if($user->twitter_access_token) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if ($twitter->get('account/verify_credentials')) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'result' => 'ok' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          // If the existing twitter token is not valid, generate a login link
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          $twitter_login_url = getTwitterLoginURL($twitter); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $twitter_login_url = getTwitterLoginURL($twitter); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'url' => $twitter_login_url | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'result' => 'error' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/auth/twitter/callback', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $twitter = new \TwitterOAuth\Api(Config::$twitterClientID, Config::$twitterClientSecret,  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $_SESSION['twitter_auth']['oauth_token'], $_SESSION['twitter_auth']['oauth_token_secret']); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $credentials = $twitter->getAccessToken($params['oauth_verifier']); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->twitter_access_token = $credentials['oauth_token']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->twitter_token_secret = $credentials['oauth_token_secret']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->twitter_username = $credentials['screen_name']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->redirect('/settings'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/auth/instagram', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app, false)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $instagram = instagram_client(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // If there is an existing Instagram auth token, check if it's valid
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if($user->instagram_access_token) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $instagram->setAccessToken($user->instagram_access_token); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      $igUser = $instagram->getUser(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if($igUser && $igUser->meta->code == 200) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          'result' => 'ok', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          'username' => $igUser->data->username, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          'url' => $instagram->getLoginUrl(array('basic','likes')) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->response()->body(json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'request' => htmlspecialchars($request), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'response' => htmlspecialchars($response), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'location' => $location, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'error' => $r['error'], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'curlinfo' => $r['curlinfo'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'result' => 'error', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      'url' => $instagram->getLoginUrl(array('basic','likes')) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$app->get('/auth/instagram/callback', function() use($app) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  if($user=require_login($app)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $params = $app->request()->params(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $instagram = instagram_client(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $data = $instagram->getOAuthToken($params['code']); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->instagram_access_token = $data->access_token; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $user->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $app->redirect('/settings'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 |