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