Beispiel #1
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);
     });
 }
Beispiel #2
0
require_once __DIR__ . '/../vendor/autoload.php';
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
Beispiel #3
0
<?php

\Tipsy\Tipsy::service('Db', 'Tipsy\\Doctrine\\Db');
Beispiel #4
0
 public function send($params)
 {
     return $this->_client->sendMessage(Tipsy::service('cfgr')->get('api-' . $this->_service . '-domain'), $params);
 }
Beispiel #5
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);
     }
 }
<?php

require_once __DIR__ . '/bootstrap.php';
use Tipsy\Tipsy;
Tipsy::service('Product', '\\Tipsy\\Doctrine\\Resource\\Product');
Tipsy::router()->post('product', function ($Product, $Request) {
    $p = $Product->create([name => $Request->name]);
    if ($p->id) {
        header('Location: /product/' . $p->id);
    }
})->get('product/:id', function ($Product, $Params, $View) {
    $p = $Product->load($Params->id);
    if ($p) {
        $View->display('product', [product => $p]);
    } else {
        http_response_code(404);
    }
})->otherwise(function ($Db, $Product, $View) {
    $View->display('home');
    return;
    /**
     * if you are more familiar with using doctrine specific code you can do so like below
     **/
    $p = new \Tipsy\Doctrine\Resource\Product();
    $p->setName('test1');
    $Db->entityManager()->persist($p);
    echo $p->getId();
    $s = $Db->query('select * from products where name=?', ['test1']);
    $s->execute();
    while ($row = $s->fetch(PDO::FETCH_OBJ)) {
        print_r($row);