/application/third_party/10layer/libraries/Tlsecurity.php

https://github.com/10layer/10Layer-CMS · PHP · 199 lines · 102 code · 13 blank · 84 comment · 18 complexity · 3f0629f0bada385195d892b9f8bd7d87 MD5 · raw file

  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. /**
  3. * 10Layer Security Class
  4. *
  5. * This class handles security
  6. *
  7. * @package 10Layer
  8. * @subpackage Libraries
  9. * @category Libraries
  10. * @author Jason Norwood-Young
  11. * @link http://10layer.com
  12. */
  13. class Tlsecurity {
  14. protected $ci=false;
  15. protected $_ignore_security=false;
  16. /**
  17. * __construct function.
  18. *
  19. * @access public
  20. * @return void
  21. */
  22. public function __construct() {
  23. $this->ci=&get_instance();
  24. //Inheret ignore_security settings from previously initiated Security library
  25. if (isset($this->ci->tlsecurity)) {
  26. $this->_ignore_security=$this->ci->tlsecurity->checkIgnoreSecurity();
  27. }
  28. }
  29. public function securityHook() {
  30. //Check if the controller specifically tells us to ignore security checks
  31. if ($this->_ignore_security) {
  32. return true;
  33. }
  34. //Check if this path is available without logging in
  35. $path=$this->ci->uri->segment_array(0);
  36. if ($this->ci->model_user->security_check_exclude_path($path)) {
  37. return true;
  38. }
  39. $this->checkLogin();
  40. $this->checkStatus();
  41. $this->checkUrl();
  42. }
  43. /**
  44. * checkLogin function.
  45. *
  46. * @access public
  47. * @return boolean
  48. */
  49. public function checkLogin() {
  50. $dologin=$this->ci->input->post("dologin");
  51. if (!empty($dologin)) {
  52. $data=array("id"=>false,"name"=>false,"urlid"=>false);
  53. $this->ci->session->unset_userdata($data);
  54. $result=$this->doLogin();
  55. if ($result) {
  56. $this->ci->load->library("tluserprefs");
  57. $this->ci->tluserprefs->user_setup();
  58. return true;
  59. } else {
  60. $data["error"]=1;
  61. $this->ci->load->view("user/login",$data);
  62. print $this->ci->output->get_output();
  63. die();
  64. }
  65. }
  66. $loggedin=$this->ci->model_user->checklogin();
  67. if (!$loggedin) {
  68. $data["error"]=0;
  69. $this->ci->load->view("user/login",$data);
  70. print $this->ci->output->get_output();
  71. die();
  72. }
  73. return true;
  74. }
  75. public function checkOtp($otp) {
  76. $result=$this->ci->model_user->otpLogin($otp);
  77. if ($result) {
  78. redirect("/manage/users/my_account");
  79. } else {
  80. $this->logout();
  81. redirect("/home");
  82. }
  83. }
  84. /**
  85. * logout function.
  86. *
  87. * @access public
  88. * @return void
  89. */
  90. public function logout() {
  91. $data=array("id"=>false,"name"=>false,"urlid"=>false);
  92. $this->ci->session->unset_userdata($data);
  93. redirect(base_url());
  94. }
  95. protected function doLogin() {
  96. $email=$this->ci->input->post("email");
  97. $password=$this->ci->input->post("password");
  98. return $this->ci->model_user->login($email,$password);
  99. }
  100. protected function checkExcludePath($path) {
  101. $paths=$this->ci->model_user->security_exclude_paths();
  102. }
  103. protected function checkStatus() {
  104. //$status_id=$this->ci->session->userdata("status_id");
  105. //print $this->ci->session->userdata("id");
  106. $status_id=$this->ci->model_user->get_user_status($this->ci->session->userdata("id"));
  107. //print $status_id;
  108. if ($status_id==1) {
  109. return true;
  110. }
  111. //$data=array("id"=>false,"name"=>false,"urlid"=>false);
  112. //$this->ci->session->unset_userdata($data);
  113. $status=$this->ci->model_user->get_status($status_id);
  114. $this->ci->load->view("user/denied",array("status"=>"You cannot log in to your account. Your account status is: {$status->name}"));
  115. print $this->ci->output->get_output();
  116. die();
  117. }
  118. protected function checkUrl() {
  119. $url=$this->ci->uri->uri_string();
  120. if (!empty($url) && $url[0]!='/') {
  121. $url='/'.$url;
  122. }
  123. //Root url
  124. if ($url=="/home" || empty($url)) {
  125. return true;
  126. }
  127. //User accounts
  128. if ($url=="/manage/users/my_account") {
  129. return true;
  130. }
  131. //Exact match
  132. $permission=$this->ci->model_user->checkUrlPermission($this->ci->session->userdata("id"), $url);
  133. if ($permission) {
  134. $this->_permissionDeny();
  135. }
  136. //One of the index urls
  137. $permission=$this->ci->model_user->checkUrlPermission($this->ci->session->userdata("id"), $url."/home");
  138. if ($permission) {
  139. $this->_permissionDeny();
  140. }
  141. //Remap url
  142. $pieces=$this->ci->uri->segment_array();
  143. unset($pieces[sizeof($pieces)-1]);
  144. $url="/".implode("/",$pieces)."/*";
  145. $permission=$this->ci->model_user->checkUrlPermission($this->ci->session->userdata("id"), $url);
  146. if ($permission) {
  147. $this->_permissionDeny();
  148. }
  149. //Last check - look for inheretence
  150. $permission_id=$this->ci->model_user->getUserPermission($this->ci->session->userdata("id"));
  151. $allowedurls=$this->ci->model_user->getUrlsByPermission($permission_id);
  152. foreach($allowedurls as $allowedurl) {
  153. $pieces=$this->ci->uri->segment_array();
  154. while(!empty($pieces)) {
  155. array_pop($pieces);
  156. $url="/".implode("/",$pieces);
  157. if ($url==$allowedurl->url) {
  158. $this->_permissionDeny();
  159. }
  160. }
  161. }
  162. //You made it!
  163. return true;
  164. }
  165. protected function _permissionDeny() {
  166. $this->ci->load->view("user/denied",array("status"=>"Denied"));
  167. print $this->ci->output->get_output();
  168. die();
  169. }
  170. public function ignore_security() {
  171. $this->_ignore_security=true;
  172. }
  173. public function checkIgnoreSecurity() {
  174. return $this->_ignore_security;
  175. }
  176. public function user_id() {
  177. return $this->ci->session->userdata("id");
  178. }
  179. }
  180. ?>