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; }
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; }
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')]]); }
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();
<?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');
<?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); }
<?php require_once __DIR__ . '/app/bootstrap.php'; return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet(\Tipsy\Tipsy::db()->entityManager());
public static function all() { return \Tipsy\Tipsy::db()->get('select * from config'); }
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);
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); } }