diff --git a/.gitmodules b/.gitmodules index 700aa5cb..3642af3e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "modules/lnapp"] path = modules/lnapp url = git@dev.leenooks.net:deon/lnapp.git +[submodule "modules/lnauth"] + path = modules/lnauth + url = git@dev.leenooks.net:deon/lnauth.git diff --git a/application/bootstrap.php b/application/bootstrap.php index 11edc392..deb95ecf 100644 --- a/application/bootstrap.php +++ b/application/bootstrap.php @@ -131,6 +131,7 @@ Kohana::$config->attach(new Config_File); */ Kohana::modules(array( 'oauth' => MODPATH.'oauth', // OAuth Module for External Authentication + 'lnauth' => MODPATH.'lnauth', // lnAuth Base Authentication Tools 'lnapp' => MODPATH.'lnapp', // lnApp Base Application Tools 'auth' => SMDPATH.'auth', // Basic authentication 'cache' => SMDPATH.'cache', // Caching with multiple backends diff --git a/application/classes/Controller/Admin/Module.php b/application/classes/Controller/Admin/Module.php deleted file mode 100644 index c70286f8..00000000 --- a/application/classes/Controller/Admin/Module.php +++ /dev/null @@ -1,197 +0,0 @@ -TRUE, - 'edit'=>TRUE, - 'list'=>TRUE, - ); - - protected function _classes($dir,$class,$array=NULL,$key='') { - $result = array(); - - if (is_null($array)) { - $array = Kohana::list_files('classes'); - $array = $array['classes/Controller']; - $key = 'classes/Controller'; - } - - if (! $class) - return array_keys($array); - - if (! $dir) { - if (! empty($array[$key.'/'.$class])) - $result = Arr::merge($result,$this->_classes('','',$array[$key.'/'.$class],$key.'/'.$class)); - - if (! empty($array[$key.'/'.$class.'.php'])) - array_push($result,$key.'/'.$class); - - } else { - if (! empty($array[$key.'/'.$dir])) - $result = Arr::merge($result,$this->_classes('',$class,$array[$key.'/'.$dir],$key.'/'.$dir)); - - if (! empty($array[$key.'/'.$dir.'/'.$class.'.php'])) - array_push($result,$key.'/'.$dir.'/'.$class); - } - - foreach ($result as $k=>$v) - $result[$k] = str_replace('.php','',str_replace('/','_',preg_replace('/^classes\//','',$v))); - - return $result; - } - - /** - * Get the list of methods for a class - */ - protected function _methods($class) { - $class = Kohana::classname($class); - // Get a list of methods this module has - $methods = $secure_actions = $auth_required = array(); - - // List of classes where all our methods are, including this one. - $classes = URL::$method_directory; - array_unshift($classes,''); - - foreach ($classes as $c) { - $x = URL::dir($c); - $cp = $this->_classes($x,$class); - - foreach ($cp as $cn) - if (class_exists($cn)) { - $sc = preg_replace(sprintf('/^Controller_%s%s_?/',$x ? $x.'_' : '',$class),'',$cn); - $r = new ReflectionClass($cn); - - $rdp = $r->getDefaultProperties(); - $secure_actions[$cn] = $rdp['secure_actions']; - $auth_required[$cn] = $rdp['auth_required']; - - foreach ($r->getMethods() as $method) - if (preg_match('/^action_/',$method->name)) - array_push($methods, - str_replace('action_', - #strtolower(($x ? $x.'_' : '').($sc ? $sc.'_' : '')), - strtolower($x.($sc ? '_'.$sc : '').':'), - $method->name) - ); - } - } - - return array('methods'=>$methods,'secure_actions'=>$secure_actions,'auth_required'=>$auth_required); - } - - /** - * Edit a Module Configuration - */ - public function action_edit() { - $id = $this->request->param('id'); - $mo = ORM::factory('Module',$id); - - $this->meta->title = 'Module: '.$mo->name(); - - $methods = array(); - - if (! $mo->loaded()) { - SystemMessage::factory() - ->title(_('Invalid Module ID')) - ->type('error') - ->body(sprintf(_('Module with ID %s doesnt appear to exist?'),$id)); - - HTTP::redirect(URL::link('admin','module/list')); - } - - $mm = $this->_methods($mo->name); - $methods['exist'] = array(); - foreach ($mo->module_method->find_all() as $mmo) { - if (in_array($mmo->name,$mm['methods'])) { - $k = array_search($mmo->name,$mm['methods']); - unset($mm['methods'][$k]); - - $mmo->status('INDB'); - } else - $mmo->status('ORPHAN'); - - if (! empty($mm['secure_actions'][$mmo->controller()][$mmo->method()])) - unset($mm['secure_actions'][$mmo->controller()][$mmo->method()]); - - array_push($methods['exist'],$mmo); - } - - $methods['missing'] = array(); - foreach ($mm['methods'] as $k=>$method) { - $mmo = ORM::factory('Module_Method'); - $mmo->module_id = $mo->id; - $mmo->name = $method; - - if (! empty($mm['auth_required'][$mmo->controller()]) AND $mm['auth_required'][$mmo->controller()]) - $mmo->status('MISSING'); - - array_push($methods['missing'],$mmo); - } - - Block::factory() - ->title(sprintf('%s: %s ',_('Defined Module Methods For'),$mo->display('name'))) - ->title_icon('fa fa-cog') - ->body(Table::factory() - ->data($methods['exist']) - ->columns(array( - 'id'=>'ID', - 'name'=>'Name', - 'notes'=>'Notes', - 'menu_display'=>'Menu', - 'status()'=>'Status', - )) - ->prepend(array( - 'id'=>array('url'=>URL::link('admin','module_method/edit/')), - )) - ); - - Block::factory() - ->title(sprintf('%s: %s ',_('Missing Module Methods For'),$mo->display('name'))) - ->title_icon('fa fa-question') - ->body(Table::factory() - ->data($methods['missing']) - ->columns(array( - 'name'=>'Name', - 'status()'=>'Status', - )) - ->prepend(array( - 'name'=>array('url'=>URL::link('admin','module_method/add/'.$mo->id.'/')), - )) - ); - } - - /** - * List our installed modules - */ - public function action_list() { - $this->meta->title = 'Module List'; - - Block::factory() - ->title('Defined Modules') - ->title_icon('fa fa-cog') - ->body(Table::factory() - ->data(ORM::factory('Module')->where('parent_id','is',NULL)->find_all()) - ->jssort(TRUE) - ->columns(array( - 'id'=>'ID', - 'name'=>'Name', - 'notes'=>'Notes', - 'status'=>'Active', - 'external'=>'External', - )) - ->prepend(array( - 'id'=>array('url'=>URL::link('admin','module/edit/')), - )) - ); - } -} -?> diff --git a/application/classes/Controller/Admin/Module/Method.php b/application/classes/Controller/Admin/Module/Method.php deleted file mode 100644 index d62ae561..00000000 --- a/application/classes/Controller/Admin/Module/Method.php +++ /dev/null @@ -1,107 +0,0 @@ -request->param('id'); - $method = $this->request->param('sid'); - - $mo = ORM::factory('Module',$id); - $mm = $this->_methods($mo->name); - - if (! $mo->loaded() OR ! in_array($method,$mm['methods'])) - HTTP::redirect(URL::link('admin','module/list')); - - if ($this->request->post()) { - $mmo = $mo->module_method; - $mmo->name = $method; - $mmo->module_id = $mo->id; - $mmo->values($this->request->post()); - - if (! $this->save($mmo)) - throw HTTP_Exception::factory(501,'Unable to save data :post',array(':post'=>serialize($this->request->post()))); - - HTTP::redirect(URL::link('admin','module/edit/'.$mo->id)); - } - - Block::factory() - ->title(sprintf(_('Add Method (%s) to Database for (%s)'),strtoupper($method),strtoupper($mo->name))) - ->title_icon('fa fa-plus') - ->type('form-horizontal') - ->body(View::factory('module/method/admin/add') - ->set('name',$method) - ->set('o',$mo) - ); - } - - /** - * Edit a Module Configuration - */ - public function action_edit() { - $id = $this->request->param('id'); - $mmo = ORM::factory('Module_Method',$id); - - if (! $mmo->loaded()) { - SystemMessage::factory() - ->title(_('Invalid Method ID')) - ->type('error') - ->body(sprintf(_('Method with ID %s doesnt appear to exist?'),$id)); - - HTTP::redirect(URL::link('admin','module/list')); - } - - if ($this->request->post()) { - $mmo->values($this->request->post()); - - if (! $this->save($mmo)) - throw HTTP_Exception::factory(501,'Unable to save data :post',array(':post'=>serialize($this->request->post()))); - - foreach (ORM::factory('Group')->find_all() as $go) { - // If the group was defined and no longer - if ($mmo->has('group',$go) AND (! $this->request->post('groups') OR ! in_array($go->id,$this->request->post('groups')))) { - $gmo = ORM::factory('Group_Method',array('method_id'=>$mmo->id,'group_id'=>$go->id)); - - if (! $gmo->delete()) - SystemMessage::factory() - ->title(_('Unable to DELETE Group Method')) - ->type('error') - ->body(sprintf(_('Unable to delete Group Method for method %s and group %s'),$mmo->name,$go->name)); - - // If the group was not defined and now is - } elseif (! $mmo->has('group',$go) AND $this->request->post('groups') AND in_array($go->id,$this->request->post('groups'))) { - $gmo = ORM::factory('Group_Method') - ->values(array( - 'method_id'=>$mmo->id, - 'group_id'=>$go->id, - )); - - if (! $this->save($gmo)) - SystemMessage::factory() - ->title(_('Unable to SAVE Group Method')) - ->type('error') - ->body(sprintf(_('Unable to save Group Method for method %s and group %s'),$mmo->name,$go->name)); - } - } - - HTTP::redirect(URL::link('admin','module/edit/'.$mmo->module_id)); - } - - Block::factory() - ->title(sprintf(_('Configure access to method (%s::%s)'),$mmo->controller(),$mmo->method())) - ->title_icon('fa fa-lock') - ->type('form') - ->body(View::factory('module/method/admin/edit')->set('o',$mmo)); - } -} -?> diff --git a/application/classes/Controller/Module.php b/application/classes/Controller/Module.php deleted file mode 100644 index 8c4829fa..00000000 --- a/application/classes/Controller/Module.php +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/application/classes/Controller/TemplateDefault.php b/application/classes/Controller/TemplateDefault.php index c20ff51f..982cc1d7 100644 --- a/application/classes/Controller/TemplateDefault.php +++ b/application/classes/Controller/TemplateDefault.php @@ -9,7 +9,7 @@ * @copyright (c) 2009-2013 Open Source Billing * @license http://dev.osbill.net/license.html */ -abstract class Controller_TemplateDefault extends lnApp_Controller_TemplateDefault { +abstract class Controller_TemplateDefault extends lnAuth_Controller_TemplateDefault { protected $auth_required = TRUE; protected function save(Model $o) { @@ -25,22 +25,5 @@ abstract class Controller_TemplateDefault extends lnApp_Controller_TemplateDefau return FALSE; } } - - protected function setup(array $config_items=array()) { - $mo = ORM::factory('Module',array('name'=>Request::current()->controller())); - if (! $mo->loaded()) - throw HTTP_Exception::factory(501,'Unknown module :module',array(':module'=>Request::current()->controller())); - - if ($this->request->post() AND array_key_exists($mo->id,$this->request->post('module_config'))) - Config::instance()->module_config($mo->name,$this->request->post('module_config.'.$mo->id))->save(); - - if ($config_items) { - Block::factory() - ->title('Update Module Configuration') - ->title_icon('fa fa-wrench') - ->type('form-horizontal') - ->body(View::factory('setup/admin/module')->set('o',Company::instance()->so())->set('mid',$mo->id)); - } - } } ?> diff --git a/application/classes/Controller/User/Account.php b/application/classes/Controller/User/Account.php deleted file mode 100644 index 4bc6fb0e..00000000 --- a/application/classes/Controller/User/Account.php +++ /dev/null @@ -1,104 +0,0 @@ -TRUE, - 'resetpassword'=>TRUE, - ); - - /** - * Enable User to Edit their Account Details - */ - public function action_edit() { - if ($this->request->post() AND $this->ao->values($this->request->post())->changed() AND (! $this->save($this->ao))) - $this->ao->reload(); - - Block::factory() - ->title(sprintf('Account: %s',$this->ao->refnum())) - ->title_icon('icon-wrench') - ->type('form-horizontal') - ->body(View::factory('account/user/edit')->set('o',$this->ao)); - } - - public function action_resetpassword() { - if ($this->request->post()) { - $validation = Validation::factory($this->request->post()) - ->rule('password','not_empty') - ->rule('password','min_length',array(':value',6)) - ->rule('password_confirm','matches',array(':validation',':field','password')); - - // Store our new values - $this->ao->values($this->request->post()); - - if (! $validation->check()) - SystemMessage::factory() - ->title(_('Record NOT updated')) - ->type('error') - ->body(_('Your password didnt pass validation.')); - - // Run validation and save - elseif ($this->ao->changed()) - if ($this->ao->save()) { - SystemMessage::factory() - ->title('Record updated') - ->type('success') - ->body(_('Your account record has been updated.')); - - // Log the password reset - $this->ao->log('Password reset'); - - HTTP::redirect('login'); - } - } - - if (Kohana::$environment >= Kohana::TESTING OR Request::current()->secure()) - Script::factory() - ->type('src') - ->data('media/js/jquery/jquery.validate-1.11.1.min.js'); - else - Script::factory() - ->type('src') - ->data('http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js'); - - Script::factory() - ->type('stdin') - ->data(' -$("#reset").validate({ - wrapper: "div", - errorElement: "span", - - rules: { - password_confirm: { - equalTo: "input[name=password]", - }, - }, - highlight: function(element) { - $(element).parents(".control-group").removeClass("success").addClass("error"); - }, - success: function(element) { - $(element).parents(".control-group").removeClass("error").addClass("success"); - }, - errorPlacement: function(error, element) { - error.appendTo(element.parents(".controls")); - } -}); - '); - - Block::factory() - ->title(sprintf('Password Reset: %s',$this->ao->refnum())) - ->title_icon('icon-cog') - ->id('reset') - ->type('form-horizontal') - ->body(View::factory('account/user/resetpassword')->set('o',$this->ao)); - } -} -?> diff --git a/application/classes/DB.php b/application/classes/DB.php deleted file mode 100644 index 3f9f5d8b..00000000 --- a/application/classes/DB.php +++ /dev/null @@ -1,35 +0,0 @@ -where($table.'.site_id','=',Company::instance()->site()); - else - return $db; - } - - // Add the site_id to the update query - final public static function update($table = NULL) - { - $db = new Database_Query_Builder_Update($table); - - if (! in_array($table,ORM::$no_site_id_tables)) - return $db->where($table.'.site_id','=',Company::instance()->site()); - else - return $db; - } -} -?> diff --git a/application/classes/Kohana/Exception.php b/application/classes/Kohana/Exception.php index 463bb109..31546b14 100644 --- a/application/classes/Kohana/Exception.php +++ b/application/classes/Kohana/Exception.php @@ -19,17 +19,19 @@ class Kohana_Exception extends Kohana_Kohana_Exception { */ public static function log(Exception $e,$level=Log::EMERGENCY) { try { - $eo = ORM::factory('Log_Error'); - $eo->message = Kohana_Exception::text($e); - $eo->account_id = (PHP_SAPI === 'cli' OR ! Auth::instance()->logged_in()) ? NULL : Auth::instance()->get_user()->id; + if (class_exists('Model_Log_Error')) { + $eo = ORM::factory('Log_Error'); + $eo->message = Kohana_Exception::text($e); + $eo->account_id = (PHP_SAPI === 'cli' OR ! Auth::instance()->logged_in()) ? NULL : Auth::instance()->get_user()->id; - if (Request::current()) { - $eo->module = (Request::current()->directory() ? Request::current()->directory().'_' : '').Request::current()->controller(); - $eo->method = Request::current()->action(); + if (Request::current()) { + $eo->module = (Request::current()->directory() ? Request::current()->directory().'_' : '').Request::current()->controller(); + $eo->method = Request::current()->action(); + } + + $eo->save(); } - $eo->save(); - } catch (Exception $x) { return parent::log($e,$level); } @@ -48,11 +50,13 @@ class Kohana_Exception extends Kohana_Kohana_Exception { return parent::response($e); } else { - SystemMessage::add(array( - 'title'=>'An Error Occured.', - 'type'=>'error', - 'body'=>'Dont panic, its been logged.', - )); + if (class_exists('SystemMessage')) { + SystemMessage::add(array( + 'title'=>'An Error Occured.', + 'type'=>'error', + 'body'=>'Dont panic, its been logged.', + )); + } // We'll redirect to the main page. $response = Response::factory(); diff --git a/application/classes/Menu.php b/application/classes/Menu.php deleted file mode 100644 index 234b1a66..00000000 --- a/application/classes/Menu.php +++ /dev/null @@ -1,71 +0,0 @@ -module->name])) { - if (! is_array($result[$mmo->module->name])) - $result[$mmo->module->name] = array($result[$mmo->module->name]); - - array_push($result[$mmo->module->name],$mmo); - - continue; - - } else { - $result[$mmo->module->name] = $mmo; - } - } - - return $result; - } - - public static function items($type,array $list=array()) { - $result = array(); - - if (empty(URL::$method_directory[$type])) - return NULL; - - $ao = Auth::instance()->get_user(); - - if (is_object($ao)) - foreach ($ao->methods() as $mmo) - if ($mmo->menu_display AND $type == $mmo->directory()) - if (empty($result[$mmo->id])) - $result[$mmo->id] = $mmo; - - return self::collapse($result); - } - - public static function ul($type,array $result,array $append=NULL,$sub=FALSE,$method=NULL) { - $output = $sub ? '