From 25c192e75d52f5bd7db4da22bb9213421fa36b4c Mon Sep 17 00:00:00 2001 From: nickw Date: Tue, 11 May 2010 21:37:12 +0000 Subject: Do not display site pages when in Walled Garden mode, excepting system-defined whitelist. git-svn-id: http://code.elgg.org/elgg/trunk@6004 36083f99-b078-4883-b0ff-0f9b5a30f544 --- actions/admin/site/update_advanced.php | 7 ++++++ actions/systemsettings/install.php | 1 + engine/lib/elgglib.php | 19 +++++++++++++- engine/lib/sites.php | 45 ++++++++++++++++++++++++++++++++++ engine/lib/upgrades/2010050701.php | 2 ++ views/default/admin/site/advanced.php | 10 ++++++++ 6 files changed, 83 insertions(+), 1 deletion(-) diff --git a/actions/admin/site/update_advanced.php b/actions/admin/site/update_advanced.php index 7e6bd0cc6..e65919ce1 100644 --- a/actions/admin/site/update_advanced.php +++ b/actions/admin/site/update_advanced.php @@ -56,6 +56,13 @@ if (datalist_get('default_site')) { } else { set_config('allow_registration', FALSE, $site->getGUID()); } + + // setup walled garden + if (get_input('walled_garden', FALSE)) { + set_config('walled_garden', TRUE, $site->getGUID()); + } else { + set_config('walled_garden', FALSE, $site->getGUID()); + } $https_login = get_input('https_login'); if ($https_login) { diff --git a/actions/systemsettings/install.php b/actions/systemsettings/install.php index 3b841caf9..6f3b75a3d 100644 --- a/actions/systemsettings/install.php +++ b/actions/systemsettings/install.php @@ -69,6 +69,7 @@ if (get_input('settings') == 'go') { set_config('language', get_input('language'), $site->getGUID()); set_config('default_access', get_input('default_access'), $site->getGUID()); set_config('allow_registration', TRUE, $site->getGUID()); + set_config('walled_garden', FALSE, $site->getGUID()); $debug = get_input('debug'); if ($debug) { diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 9ee85c559..4e141bb84 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -3107,16 +3107,28 @@ function __elgg_shutdown_hook() { function elgg_init() { // Page handler for JS register_page_handler('js','js_page_handler'); - + // Register an event triggered at system shutdown register_shutdown_function('__elgg_shutdown_hook'); } +function elgg_walled_garden_index() { + global $CONFIG; + + $login = elgg_view('account/forms/login'); + $layout = elgg_view_layout('one_column', $login); + + echo page_draw('', $layout); + return TRUE; +} + /** * Boot Elgg * @return unknown_type */ function elgg_boot() { + global $CONFIG; + // Actions register_action('comments/add'); register_action('comments/delete'); @@ -3126,6 +3138,11 @@ function elgg_boot() { elgg_view_register_simplecache('css'); elgg_view_register_simplecache('js/friendsPickerv1'); elgg_view_register_simplecache('js/initialise_elgg'); + + // check for external page view + if (isset($CONFIG->site) && $CONFIG->site instanceof ElggSite) { + $CONFIG->site->check_walled_garden(); + } } /** diff --git a/engine/lib/sites.php b/engine/lib/sites.php index 13521a257..c976384c2 100644 --- a/engine/lib/sites.php +++ b/engine/lib/sites.php @@ -243,6 +243,51 @@ class ElggSite extends ElggEntity { 'url', )); } + + public function check_walled_garden() { + global $CONFIG; + + if ($CONFIG->walled_garden && !isloggedin()) { + register_plugin_hook('index', 'system', 'elgg_walled_garden_index'); + + if (!$this->is_public_page()) { + register_error(elgg_echo('walled_garden:private_page') . current_page_url()); + forward(); + } + } + } + + public function is_public_page($url='') { + global $CONFIG; + + if (empty($url)) { + $url = current_page_url(); + + // do not check against URL queries + if ($pos = strpos($url, '?')) { + $url = substr($url, 0, $pos); + } + } + + // default public pages + $public = array( + $CONFIG->url, + "{$CONFIG->url}action/login", + "{$CONFIG->url}upgrade.php", + ); + + // include a hook for plugin authors to include public pages + + // lookup admin-specific public pages + + // allow public pages + if (in_array($url, $public)) { + return TRUE; + } + + // non-public page + return FALSE; + } } /** diff --git a/engine/lib/upgrades/2010050701.php b/engine/lib/upgrades/2010050701.php index 33e4b5bae..4a02a77c6 100644 --- a/engine/lib/upgrades/2010050701.php +++ b/engine/lib/upgrades/2010050701.php @@ -8,8 +8,10 @@ $access = elgg_set_ignore_access(TRUE); if (is_plugin_enabled('walledgarden')) { disable_plugin('walledgarden'); set_config('allow_registration', FALSE); + set_config('walled_garden', TRUE); } else { set_config('allow_registration', TRUE); + set_config('walled_garden', FALSE); } elgg_set_ignore_access($access); diff --git a/views/default/admin/site/advanced.php b/views/default/admin/site/advanced.php index e8c6e9b9a..35c57356d 100644 --- a/views/default/admin/site/advanced.php +++ b/views/default/admin/site/advanced.php @@ -33,6 +33,7 @@ $form_body .= "

" . elgg_echo('installation:debug'); $form_body .= elgg_view('input/pulldown', array('options_values' => $debug_options, 'internalname' => 'debug', 'value' => $vars['config']->debug)); $form_body .= '

'; +// control new user registration $options = array( 'options' => array(elgg_echo('installation:registration:label')), 'internalname' => 'allow_registration', @@ -41,6 +42,15 @@ $options = array( $form_body .= '

' . elgg_echo('installation:registration:description'); $form_body .= '
' .elgg_view('input/checkboxes', $options) . '

'; +// control walled garden +$options = array( + 'options' => array(elgg_echo('installation:walled_garden:label')), + 'internalname' => 'walled_garden', + 'value' => $vars['config']->walled_garden ? elgg_echo('installation:walled_garden:label') : '', +); +$form_body .= '

' . elgg_echo('installation:walled_garden:description'); +$form_body .= '
' . elgg_view('input/checkboxes', $options) . '

'; + $form_body .= "

" . elgg_echo('installation:httpslogin') . "
" .elgg_view("input/checkboxes", array('options' => array(elgg_echo('installation:httpslogin:label')), 'internalname' => 'https_login', 'value' => ($vars['config']->https_login ? elgg_echo('installation:httpslogin:label') : "") )) . "

"; $form_body .= "

" . elgg_echo('installation:disableapi') . "
"; -- cgit v1.2.3