Beispiel #1
0
    public function exports()
    {
        $props = $this->properties();
        // properties viewable by anyone
        $public = ['id', 'name', 'location', 'website', 'image'];
        // properties viewable only by the logged in user
        $private = ['email', 'gender', 'auth'];
        $props['image'] = $props['avatar'] ? $props['avatar'] : 'https://gravatar.com/avatar/' . md5(strtolower(trim($props['email']))) . '?s=200';
        $user = Tipsy::middleware('Session')->user();
        if ($user && $user->id == $this->id) {
            $auths = $this->db()->get('
				select auth.* from auth
				where
					user=?
			', [$this->id]);
            foreach ($auths as $auth) {
                $props['auth'][$auth->type] = $auth->value;
            }
            if ($this->password) {
                $props['auth']['local'] = true;
            }
            $public = array_merge($public, $private);
        }
        foreach ($props as $key => $prop) {
            if (!in_array($key, $public)) {
                unset($props[$key]);
            }
        }
        return $props;
    }
Beispiel #2
0
use Tipsy\Tipsy;
Tipsy::config('../config/*.ini');
Tipsy::config('../config/*.yml');
Tipsy::config(['path' => __DIR__ . '/../']);
if (getenv('DATABASE_URL')) {
    Tipsy::config(['db' => ['url' => getenv('DATABASE_URL')]]);
    // CLEARDB_DATABASE_URL
}
// define routes here for anything that uses route params
Tipsy::router()->when('api/user/:id', '\\App\\Controller\\Api\\User')->when('auth/:service', '\\App\\Controller\\Auth')->when('/\\.scss$/i', '\\App\\Controller\\Scss');
// initilize config from database, config files, and env variables
Tipsy::service('cfgr', '\\App\\Cfgr');
Tipsy::service('Mail', '\\App\\Mail');
Tipsy::service('User', '\\App\\User');
//echo Tipsy::service('cfgr')->get('auth-facebook-key');
//echo Tipsy::service('cfgr')->set('auth-facebook-key', 'test');
// simple session management using redis
Tipsy::middleware('Session', ['run' => function () {
    $redis = getenv('REDIS_URL');
    if ($redis) {
        $client = new \Predis\Client($redis);
        $handler = new App\Session($client);
        session_set_save_handler($handler);
    }
    session_start();
}, 'user' => function () {
    return $_SESSION['user'] ? $this->tipsy()->service('User')->load($_SESSION['user']) : null;
}]);
// pointless headers
header('X-Powered-By: PHP/' . phpversion() . '; arzynik/hackathon-starter');
Tipsy::run();
Beispiel #3
0
 public function init($args = null)
 {
     $name = $this->tipsy()->request()->loc(1);
     if (!Tipsy::service('cfgr')->get('api-' . $name . '-key') || !Tipsy::service('cfgr')->get('api-' . $name . '-secret')) {
         die('no auth config for ' . $name);
     }
     $storage = new Session();
     $credentials = new Credentials(Tipsy::service('cfgr')->get('api-' . $name . '-key'), Tipsy::service('cfgr')->get('api-' . $name . '-secret'), $this->tipsy()->request()->url());
     $serviceFactory = new \OAuth\ServiceFactory();
     $scope = [];
     $email = Tipsy::service('cfgr')->get('apiconfig-email');
     if ($email) {
         switch ($name) {
             case 'facebook':
                 $scope = ['public_profile', 'email'];
                 break;
             case 'linkedin':
                 $scope = ['r_basicprofile', 'r_emailaddress'];
                 break;
             case 'github':
                 $scope = ['user:email'];
                 break;
             case 'google':
                 $scope = ['userinfo_email', 'userinfo_profile'];
                 break;
             case 'instagram':
                 $scope = ['basic'];
                 break;
         }
     } else {
         switch ($name) {
             case 'instagram':
                 $scope = ['basic'];
                 break;
         }
     }
     $service = $serviceFactory->createService($name, $credentials, $storage, $scope);
     $code = $name == 'twitter' ? 'oauth_token' : 'code';
     if (!empty($_GET[$code])) {
         switch ($name) {
             case 'twitter':
                 $token = $storage->retrieveAccessToken('Twitter');
                 $service->requestAccessToken($_GET['oauth_token'], $_GET['oauth_verifier'], $token->getRequestTokenSecret());
                 break;
             default:
                 $state = isset($_GET['state']) ? $_GET['state'] : null;
                 $token = $service->requestAccessToken($_GET[$code], $state);
                 break;
         }
         switch ($name) {
             case 'facebook':
                 $data = json_decode($service->request('/me?fields=name,gender' . ($email ? ',email' : '')), true);
                 $result = [id => $data['id'], name => $data['name'], email => $data['email'], gender => $data['gender']];
                 break;
             case 'twitter':
                 $data = json_decode($service->request('account/verify_credentials.json'), true);
                 $result = [id => $data['id'], name => $data['name']];
                 break;
             case 'instagram':
                 $data = json_decode($service->request('users/self'), true);
                 $result = [id => $data['data']['id'], name => $data['data']['full_name'], avatar => $data['data']['profile_picture'], website => $data['data']['website']];
                 break;
             case 'google':
                 $data = json_decode($service->request('userinfo'), true);
                 $result = [id => $data['id'], name => $data['name'], email => $data['email'], gender => $data['gender'], avatar => $data['picture']];
                 break;
             case 'linkedin':
                 $emailQ = Tipsy::service('cfgr')->get('apiconfig-email') ? ':(id,firstName,lastName,email-address)' : ':(id,firstName,lastName)';
                 $data = json_decode($service->request('/people/~' . $emailQ . '?format=json'), true);
                 $result = [id => $data['id'], name => $data['firstName'] . ' ' . $data['lastName'], email => $data['emailAddress']];
                 break;
             case 'github':
                 $data = json_decode($service->request('user'), true);
                 $result = [id => $data['id'], name => $data['name'], location => $data['location'], website => $data['blog'], email => $data['email'], avatar => $data['avatar_url']];
                 if ($email && !$result['email']) {
                     $data = json_decode($service->request('user/emails'), true);
                     $result['email'] = $data[0];
                 }
                 break;
         }
         if ($result['id']) {
             $user = \App\User::byAuth($result['id'], $name);
             if (!$user) {
                 if (!Tipsy::middleware('Session')->user()) {
                     $user = new \App\User();
                     foreach ($result as $key => $value) {
                         if ($key == 'id') {
                             continue;
                         }
                         $user->{$key} = $value;
                     }
                     $user->save();
                 } else {
                     $user = Tipsy::middleware('Session')->user();
                 }
                 $auth = new \App\Auth(['value' => $result['id'], 'type' => $name, 'user' => $user->id]);
                 $auth->save();
             }
             // user mismatch. fail
             if ($user && Tipsy::middleware('Session')->user() && $user->id != Tipsy::middleware('Session')->user()->id) {
                 header('Location: /account');
                 exit;
             }
             $_SESSION['user'] = $user->id;
             header('Location: /account');
         }
     } else {
         $request = [];
         if ($name == 'twitter') {
             $request = ['oauth_token' => $service->requestRequestToken()->getRequestToken()];
         }
         $url = $service->getAuthorizationUri($request);
         header('Location: ' . $url);
     }
 }