源码分享站 - 分享有用的

fatfree 展示 auth.php源代码

返回 下载fatfree: 单独下载auth.php源代码 - 下载整个fatfree源代码 - 类型:.php文件
  1. <?php
  2.  
  3. /*
  4.  
  5.         Copyright (c) 2009-2016 F3::Factory/Bong Cosca, All rights reserved.
  6.  
  7.         This file is part of the Fat-Free Framework (http://fatfreeframework.com).
  8.  
  9.         This is free software: you can redistribute it and/or modify it under the
  10.         terms of the GNU General Public License as published by the Free Software
  11.         Foundation, either version 3 of the License, or later.
  12.  
  13.         Fat-Free Framework is distributed in the hope that it will be useful,
  14.         but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.         General Public License for more details.
  17.  
  18.         You should have received a copy of the GNU General Public License along
  19.         with Fat-Free Framework.  If not, see <http://www.gnu.org/licenses/>.
  20.  
  21. */
  22.  
  23. //! Authorization/authentication plug-in
  24. class Auth {
  25.  
  26.         //@{ Error messages
  27.         const
  28.                 E_LDAP='LDAP connection failure',
  29.                 E_SMTP='SMTP connection failure';
  30.         //@}
  31.  
  32.         protected
  33.                 //! Auth storage
  34.                 $storage,
  35.                 //! Mapper object
  36.                 $mapper,
  37.                 //! Storage options
  38.                 $args;
  39.  
  40.         /**
  41.         *       Jig storage handler
  42.         *       @return bool
  43.         *       @param $id string
  44.         *       @param $pw string
  45.         *       @param $realm string
  46.         **/
  47.         protected function _jig($id,$pw,$realm) {
  48.                 return (bool)
  49.                         call_user_func_array(
  50.                                 [$this->mapper,'load'],
  51.                                 [
  52.                                         array_merge(
  53.                                                 [
  54.                                                         '@'.$this->args['id'].'==? AND '.
  55.                                                         '@'.$this->args['pw'].'==?'.
  56.                                                         (isset($this->args['realm'])?
  57.                                                                 (' AND @'.$this->args['realm'].'==?'):''),
  58.                                                         $id,$pw
  59.                                                 ],
  60.                                                 (isset($this->args['realm'])?[$realm]:[])
  61.                                         )
  62.                                 ]
  63.                         );
  64.         }
  65.  
  66.         /**
  67.         *       MongoDB storage handler
  68.         *       @return bool
  69.         *       @param $id string
  70.         *       @param $pw string
  71.         *       @param $realm string
  72.         **/
  73.         protected function _mongo($id,$pw,$realm) {
  74.                 return (bool)
  75.                         $this->mapper->load(
  76.                                 [
  77.                                         $this->args['id']=>$id,
  78.                                         $this->args['pw']=>$pw
  79.                                 ]+
  80.                                 (isset($this->args['realm'])?
  81.                                         [$this->args['realm']=>$realm]:[])
  82.                         );
  83.         }
  84.  
  85.         /**
  86.         *       SQL storage handler
  87.         *       @return bool
  88.         *       @param $id string
  89.         *       @param $pw string
  90.         *       @param $realm string
  91.         **/
  92.         protected function _sql($id,$pw,$realm) {
  93.                 return (bool)
  94.                         call_user_func_array(
  95.                                 [$this->mapper,'load'],
  96.                                 [
  97.                                         array_merge(
  98.                                                 [
  99.                                                         $this->args['id'].'=? AND '.
  100.                                                         $this->args['pw'].'=?'.
  101.                                                         (isset($this->args['realm'])?
  102.                                                                 (' AND '.$this->args['realm'].'=?'):''),
  103.                                                         $id,$pw
  104.                                                 ],
  105.                                                 (isset($this->args['realm'])?[$realm]:[])
  106.                                         )
  107.                                 ]
  108.                         );
  109.         }
  110.  
  111.         /**
  112.         *       LDAP storage handler
  113.         *       @return bool
  114.         *       @param $id string
  115.         *       @param $pw string
  116.         **/
  117.         protected function _ldap($id,$pw) {
  118.                 $dc=@ldap_connect($this->args['dc']);
  119.                 if ($dc &&
  120.                         ldap_set_option($dc,LDAP_OPT_PROTOCOL_VERSION,3) &&
  121.                         ldap_set_option($dc,LDAP_OPT_REFERRALS,0) &&
  122.                         ldap_bind($dc,$this->args['rdn'],$this->args['pw']) &&
  123.                         ($result=ldap_search($dc,$this->args['base_dn'],
  124.                                 'uid='.$id)) &&
  125.                         ldap_count_entries($dc,$result) &&
  126.                         ($info=ldap_get_entries($dc,$result)) &&
  127.                         @ldap_bind($dc,$info[0]['dn'],$pw) &&
  128.                         @ldap_close($dc)) {
  129.                         return $info[0]['uid'][0]==$id;
  130.                 }
  131.                 user_error(self::E_LDAP,E_USER_ERROR);
  132.         }
  133.  
  134.         /**
  135.         *       SMTP storage handler
  136.         *       @return bool
  137.         *       @param $id string
  138.         *       @param $pw string
  139.         **/
  140.         protected function _smtp($id,$pw) {
  141.                 $socket=@fsockopen(
  142.                         (strtolower($this->args['scheme'])=='ssl'?
  143.                                 'ssl://':'').$this->args['host'],
  144.                                 $this->args['port']);
  145.                 $dialog=function($cmd=NULL) use($socket) {
  146.                         if (!is_null($cmd))
  147.                                 fputs($socket,$cmd."\r\n");
  148.                         $reply='';
  149.                         while (!feof($socket) &&
  150.                                 ($info=stream_get_meta_data($socket)) &&
  151.                                 !$info['timed_out'] && $str=fgets($socket,4096)) {
  152.                                 $reply.=$str;
  153.                                 if (preg_match('/(?:^|\n)\d{3} .+\r\n/s',
  154.                                         $reply))
  155.                                         break;
  156.                         }
  157.                         return $reply;
  158.                 };
  159.                 if ($socket) {
  160.                         stream_set_blocking($socket,TRUE);
  161.                         $dialog();
  162.                         $fw=Base::instance();
  163.                         $dialog('EHLO '.$fw->get('HOST'));
  164.                         if (strtolower($this->args['scheme'])=='tls') {
  165.                                 $dialog('STARTTLS');
  166.                                 stream_socket_enable_crypto(
  167.                                         $socket,TRUE,STREAM_CRYPTO_METHOD_TLS_CLIENT);
  168.                                 $dialog('EHLO '.$fw->get('HOST'));
  169.                         }
  170.                         // Authenticate
  171.                         $dialog('AUTH LOGIN');
  172.                         $dialog(base64_encode($id));
  173.                         $reply=$dialog(base64_encode($pw));
  174.                         $dialog('QUIT');
  175.                         fclose($socket);
  176.                         return (bool)preg_match('/^235 /',$reply);
  177.                 }
  178.                 user_error(self::E_SMTP,E_USER_ERROR);
  179.         }
  180.  
  181.         /**
  182.         *       Login auth mechanism
  183.         *       @return bool
  184.         *       @param $id string
  185.         *       @param $pw string
  186.         *       @param $realm string
  187.         **/
  188.         function login($id,$pw,$realm=NULL) {
  189.                 return $this->{'_'.$this->storage}($id,$pw,$realm);
  190.         }
  191.  
  192.         /**
  193.         *       HTTP basic auth mechanism
  194.         *       @return bool
  195.         *       @param $func callback
  196.         **/
  197.         function basic($func=NULL) {
  198.                 $fw=Base::instance();
  199.                 $realm=$fw->get('REALM');
  200.                 $hdr=NULL;
  201.                 if (isset($_SERVER['HTTP_AUTHORIZATION']))
  202.                         $hdr=$_SERVER['HTTP_AUTHORIZATION'];
  203.                 elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']))
  204.                         $hdr=$_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
  205.                 if (!empty($hdr))
  206.                         list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW'])=
  207.                                 explode(':',base64_decode(substr($hdr,6)));
  208.                 if (isset($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) &&
  209.                         $this->login(
  210.                                 $_SERVER['PHP_AUTH_USER'],
  211.                                 $func?
  212.                                         $fw->call($func,$_SERVER['PHP_AUTH_PW']):
  213.                                         $_SERVER['PHP_AUTH_PW'],
  214.                                 $realm
  215.                         ))
  216.                         return TRUE;
  217.                 if (PHP_SAPI!='cli')
  218.                         header('WWW-Authenticate: Basic realm="'.$realm.'"');
  219.                 $fw->status(401);
  220.                 return FALSE;
  221.         }
  222.  
  223.         /**
  224.         *       Instantiate class
  225.         *       @return object
  226.         *       @param $storage string|object
  227.         *       @param $args array
  228.         **/
  229.         function __construct($storage,array $args=NULL) {
  230.                 if (is_object($storage) && is_a($storage,'DB\Cursor')) {
  231.                         $this->storage=$storage->dbtype();
  232.                         $this->mapper=$storage;
  233.                         unset($ref);
  234.                 }
  235.                 else
  236.                         $this->storage=$storage;
  237.                 $this->args=$args;
  238.         }
  239.  
  240. }
  241.  
单独下载 单独下载auth.php源码 - 下载整个fatfree源程序
相关源码/软件:
TSA-Travel-Sentry-master-keys - TSA 主密钥的 3D 再现 2017-05-12
python3-cookbook - 《Python Cookbook》 3rd Edition Translatio 2017-05-12
isso - Disqus 替代 https://posativ.org/isso/ 2017-05-12
hologram - 降价基于文件系统的风格指南。 http://trulia.github.io... 2017-05-12
www.html5rocks.com - .......a 争创一流资源为 web 开发人员 2017-05-12
rolify - Role management library with resource scoping ... 2017-05-13
jquery-mockjax - JQuery Mockjax 插件提供了简单、 极其灵活的接口,以嘲笑或模拟 ajax 请求和响应 2017-05-13
yo - CLI 工具运行自耕农发电机 http://yeoman.io 2017-05-13
GrowingTextView - UITextView 增长/收缩与文本并开始滚动时的含量达到一定数量的行。类似于苹果在 SMS 应用... 2017-05-13
phan - 潘是 php 的静态分析器。潘倾向于避免误报,并试图证明不正确,而不是正确性。 2017-05-13
CRYENGINE - CRYENGINE 是由 Crytek 创建一个功能强大的实时游戏开发平台。 ... 2017-06-11
postal - 2017-06-11
reactide - Reactide 是反应 web 应用程序开发的第一个专用的 IDE。http://reactide... 2017-06-11
rkt - rkt 是为 Linux 的 pod 本机容器引擎。它是可组合、 安全和建筑标准。 2017-06-11
uWebSockets - 小小的 Websocket https://forest.webvrexpe... 2017-06-11
realworld - 真实的世界-动力反应、 角、 节点,Django,和更多的模范 fullstack Medium.c... 2017-06-11
goreplay - GoReplay 是用于捕获和重播活 HTTP 交通到测试环境以不断地测试您的系统与实际数据的开源工... 2017-06-10
pyenv - 简单的 Python 版本管理 2017-06-10
redux-saga - Redux 应用程序替代副作用模型 https://redux-saga.g... 2017-06-10
angular-starter - 2017-06-10

 返回顶部