Example #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;
    }
Example #2
0
 public function tipsy($tipsy = null)
 {
     if (!is_null($tipsy)) {
         $this->_tipsy = $tipsy;
     }
     if (is_null($this->_tipsy)) {
         $this->_tipsy = \Tipsy\Tipsy::App();
     }
     return $this->_tipsy;
 }
Example #3
0
 public function init($args = null)
 {
     $this->inject(function ($Request, $Mail, $View) {
         if ($Request->method() == 'POST' && $Request->email) {
             $user = \App\User::byEmail($Request->email);
             if (!$user->email) {
                 http_response_code(403);
                 return;
             }
             $reset = substr(base64_encode(password_hash(rand(1, 999999), PASSWORD_BCRYPT)), 0, 50);
             $user->reset = $reset;
             $user->save();
             $link = $Request->host() . '/reset-password/' . $reset;
             $View->config(['layout' => 'layouts/mail']);
             $template = $View->render('mail/forgot-password', ['link' => $link, 'title' => Tipsy::service('cfgr')->get('title')]);
             $status = $Mail->send(['to' => $user->email, 'from' => Tipsy::service('cfgr')->get('title') . ' <postmaster@' . Tipsy::service('cfgr')->get('api-mailgun-domain') . '>', 'subject' => 'Password Recovery', 'html' => $template]);
             echo json_encode(['status' => $status ? true : false]);
         }
         http_response_code(403);
     });
 }
<?php

error_reporting(E_ALL ^ (E_NOTICE | E_STRICT));
ini_set('display_errors', true);
require_once __DIR__ . '/../vendor/autoload.php';
\Tipsy\Tipsy::config();
\Tipsy\Tipsy::config(__DIR__ . '/config.ini');
if (getenv('DATABASE_URL')) {
    \Tipsy\Tipsy::config([db => [url => getenv('DATABASE_URL')]]);
}
Example #5
0
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();
Example #6
0
<?php

require_once __DIR__ . '/../vendor/autoload.php';
use Tipsy\Tipsy;
Tipsy::config('../config/*.ini');
Tipsy::run();
Tipsy::router()->when('api/user/:id', '\\App\\Controller\\Api\\User');
Example #7
0
<?php

\Tipsy\Tipsy::service('Db', 'Tipsy\\Doctrine\\Db');
Example #8
0
 public function send($params)
 {
     return $this->_client->sendMessage(Tipsy::service('cfgr')->get('api-' . $this->_service . '-domain'), $params);
 }
<?php

require_once __DIR__ . '/app/bootstrap.php';
return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet(\Tipsy\Tipsy::db()->entityManager());
Example #10
0
 public static function all()
 {
     return \Tipsy\Tipsy::db()->get('select * from config');
 }
Example #11
0
        require_once $controller;
    }
    return true;
}, false);
$controller = function ($Request) {
    $find = function ($page, &$controller, &$posiblePage) {
        $pageClass = explode('/', $page);
        \Tipsy\MVC\Find::find($pageClass, $controller, $posiblePage);
    };
    $find($Request->path(), $controller, $posiblePage);
    if (!isset($controller) || !file_exists($controller)) {
        $find('home', $controller, $posiblePage);
    }
    require_once $controller;
    $possibleClass = explode('/', substr($posiblePage, 0, strpos($posiblePage, '.')));
    $fullPageNext = '\\App\\Controller';
    foreach ($possibleClass as $class) {
        if (!$class) {
            continue;
        }
        $fullPageNext .= '\\' . ucfirst($class);
        if (class_exists($fullPageNext, false)) {
            $c = new $fullPageNext(['tipsy' => $this->tipsy()]);
            if (method_exists($fullPageNext, 'init')) {
                $c->init();
            }
        }
    }
};
\Tipsy\Tipsy::router()->when('-tipsy-mvc-', $controller)->otherwise($controller);
Example #12
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);
     }
 }