<?php defined('SYSPATH') or die('No direct script access.'); class Ulogin extends Kohana_Ulogin {} Kohana::modules(array( ...... 'ulogin' => MODPATH.'ulogin', // uLogin )); echo Ulogin::factory()->render() public static function factory(array $config = array()) { return new Ulogin($config); } public function __construct(array $config = array()) { $this->config = array_merge($this->config, Kohana::$config->load('ulogin')->as_array(), $config); if ($this->config['redirect_uri'] === NULL) $this->config['redirect_uri'] = Request::initial()->url(true); } public function render() { $params = 'display='.$this->config['type']. '&fields='.implode(',', array_merge($this->config['username'], $this->config['fields'])). '&providers='.implode(',', $this->config['providers']). '&hidden='.implode(',', $this->config['hidden']). '&redirect_uri='.$this->config['redirect_uri']. '&optional='.implode(',', $this->config['optional']); if (count(self::$_used_id) == 0) { $view = View::factory('ulogin/first'); self::$_used_id[] = 'uLogin'; } else { $view = View::factory('ulogin/second'); do { $uniq_id = "uLogin_".rand(); } while(in_array($uniq_id, self::$_used_id)); self::$_used_id[] = $uniq_id; $view->set('uniq_id', $uniq_id); } return $view->set('cfg', $this->config)->set('params', $params)->render(); } <?php if ($cfg['type'] == 'window') :?> <a href="#" id="uLogin"> <img src="http://ulogin.ru/img/button.png" width=187 height=30 alt=""/> </a> <script src="http://ulogin.ru/js/widget.js?<?php echo $params; ?>"></script> <?php else: ?> <div id="uLogin"></div> <script src="http://ulogin.ru/js/widget.js?<?php echo $params; ?>"></script> <?php endif; ?> <div id="<?php echo $uniq_id; ?>"></div> <script type='text/javascript'>uLogin.init('id=<?php echo $uniq_id; ?>&<?php echo $params; ?>');</script> $ulogin = Ulogin::factory(); if (!$ulogin->mode()) $this->template->content = $ulogin->render(); else { try { $ulogin->login(); } catch(ORM_Validation_Exception $e) { $this->template->errors = $e->errors(''); } } public function mode() { return !empty($_POST['token']); } public function login() { if (empty($_POST['token'])) throw new Kohana_Exception('Empty token.'); if (!($domain = parse_url(URL::base(), PHP_URL_HOST))) { $domain = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; } $s = Request::factory('http://ulogin.ru/token.php?token=' . $_POST['token'] . '&host=' . $domain)->execute()->body(); $user = json_decode($s, true); $orm_user = ORM::factory('user', array('identity' => $user['identity'])); if (!$orm_user->loaded()) { $data['username'] = ''; foreach($this->config['username'] as $part_of_name) $data['username'] .= (empty($user[$part_of_name]) ? '' : (' '.$user[$part_of_name])); $data['username'] = trim($data['username']); if (!$data['username']) throw new Kohana_Exception('Username fields not set in config/ulogin.php'); $data['password'] = 'ulogin_autogenerated_password'; $data['identity'] = $user['identity']; $data['network'] = $user['network']; $cfg_fields = array_merge($this->config['fields'], $this->config['optional']); foreach($cfg_fields as $field) { if (!empty($user[$field])) $data[$field] = $user[$field]; } $orm_user->values($data); $orm_user->create(); $orm_user->add('roles', ORM::factory('role', array('name' => 'login'))); Auth::instance()->force_login($orm_user); } else { Auth::instance()->force_login($orm_user); } } $s = Request::factory('http://ulogin.ru/token.php?token=' . $_POST['token'] . '&host=' . $domain)->execute()->body(); $user = json_decode($s, true); array(6) ( "network" => string(6) "google" "identity" => string(50) " , https://plus.google.com/u/0/google+ /" "uid" => string(21) "google+ " "email" => string(21) "e-mail" "first_name" => string(10) "" "last_name" => string(14) "" ) $orm_user = ORM::factory('user', array('identity' => $user['identity'])); Auth::instance()->force_login($orm_user); $data['username'] = ''; foreach($this->config['username'] as $part_of_name) $data['username'] .= (empty($user[$part_of_name]) ? '' : (' '.$user[$part_of_name])); $data['username'] = trim($data['username']); $data['password'] = 'ulogin_autogenerated_password'; $data['identity'] = $user['identity']; $data['network'] = $user['network']; $cfg_fields = array_merge($this->config['fields'], $this->config['optional']); foreach($cfg_fields as $field) { if (!empty($user[$field])) $data[$field] = $user[$field]; } $orm_user->values($data); $orm_user->create(); $orm_user->add('roles', ORM::factory('role', array('name' => 'login'))); Auth::instance()->force_login($orm_user); Source: https://habr.com/ru/post/132124/
All Articles