static function change_provider($new_provider) { $current_provider = module::get_var("gallery", "identity_provider"); if (!empty($current_provider)) { module::uninstall($current_provider); } try { IdentityProvider::reset(); $provider = new IdentityProvider($new_provider); module::set_var("gallery", "identity_provider", $new_provider); if (method_exists("{$new_provider}_installer", "initialize")) { call_user_func("{$new_provider}_installer::initialize"); } module::event("identity_provider_changed", $current_provider, $new_provider); auth::login($provider->admin_user()); Session::instance()->regenerate(); } catch (Exception $e) { static $restore_already_running; // In case of error, make an attempt to restore the old provider. Since that's calling into // this function again and can fail, we should be sure not to get into an infinite recursion. if (!$restore_already_running) { $restore_already_running = true; // Make sure new provider is not in the database module::uninstall($new_provider); // Lets reset to the current provider so that the gallery installation is still // working. module::set_var("gallery", "identity_provider", null); IdentityProvider::change_provider($current_provider); module::activate($current_provider); message::error(t("Error attempting to enable \"%new_provider\" identity provider, " . "reverted to \"%old_provider\" identity provider", array("new_provider" => $new_provider, "old_provider" => $current_provider))); $restore_already_running = false; } throw $e; } }
static function change_provider($new_provider) { if (!identity::active_user()->admin && PHP_SAPI != "cli") { // Below, the active user is set to the primary admin. access::forbidden(); } $current_provider = module::get_var("gallery", "identity_provider"); if (!empty($current_provider)) { module::uninstall($current_provider); } try { IdentityProvider::reset(); $provider = new IdentityProvider($new_provider); module::set_var("gallery", "identity_provider", $new_provider); if (class_exists("{$new_provider}_installer") && method_exists("{$new_provider}_installer", "initialize")) { call_user_func("{$new_provider}_installer::initialize"); } if (!$provider->admin_user()) { throw new Exception("IdentityProvider {$new_provider}: Couldn't find the admin user!"); } module::event("identity_provider_changed", $current_provider, $new_provider); identity::set_active_user($provider->admin_user()); Session::instance()->regenerate(); } catch (Exception $e) { static $restore_already_running; // In case of error, make an attempt to restore the old provider. Since that's calling into // this function again and can fail, we should be sure not to get into an infinite recursion. if (!$restore_already_running) { $restore_already_running = true; // Make sure new provider is not in the database try { module::uninstall($new_provider); } catch (Exception $e2) { Kohana_Log::add("error", "Error uninstalling failed new provider\n" . $e2->getMessage() . "\n" . $e2->getTraceAsString()); } try { // Lets reset to the current provider so that the gallery installation is still // working. module::set_var("gallery", "identity_provider", null); IdentityProvider::change_provider($current_provider); module::activate($current_provider); } catch (Exception $e2) { Kohana_Log::add("error", "Error restoring original identity provider\n" . $e2->getMessage() . "\n" . $e2->getTraceAsString()); } message::error(t("Error attempting to enable \"%new_provider\" identity provider, reverted to \"%old_provider\" identity provider", array("new_provider" => $new_provider, "old_provider" => $current_provider))); $restore_already_running = false; } throw $e; } }
/** * Frees the current instance of the identity provider so the next call to instance will reload * * @param string configuration * @return Identity_Core */ static function reset() { IdentityProvider::reset(); }