/** * Can we allow the user with the credentials to log in? * Check stormpath, create the user if they can log in and don't exist * Enable the user if they can log in but were waiting for email verification * * @param type $credentials * @return boolean */ function pam_handler($credentials) { // try to authenticate first $application = get_application(); $authResult = $application->authenticate($credentials['username'], $credentials['password']); $account = $authResult->account; if (!$account || strtolower($account->status) != 'enabled') { return false; } // we need to search hidden users too // in case of email confirmation disabling $show_hidden = access_get_show_hidden_status(); access_show_hidden_entities(true); // we have an account and it's enabled // see if we have a matching account here // check if logging in with email address if (strpos($credentials['username'], '@') !== false) { $users = get_user_by_email($credentials['username']); $user = $users[0]; } else { $user = get_user_by_username($credentials['username']); } // custom context gives us permission to do this elgg_push_context('stormpath_validate_user'); // if we don't have a user we need to create one if (!$user) { $user = new \ElggUser(); $user->username = preg_replace("/[^a-zA-Z0-9]/", "", $account->username); $user->email = $account->email; $user->name = $account->fullName; $user->access_id = ACCESS_PUBLIC; $user->salt = _elgg_generate_password_salt(); $user->password = generate_user_password($user, $credentials['password']); $user->owner_guid = 0; // Users aren't owned by anyone, even if they are admin created. $user->container_guid = 0; // Users aren't contained by anyone, even if they are admin created. $user->language = get_current_language(); $user->save(); $user->__stormpath_user = $account->href; elgg_set_user_validation_status($user->guid, TRUE, 'stormpath'); // Turn on email notifications by default set_user_notification_setting($user->getGUID(), 'email', true); } // see if we need to enable/verify the user if (!$user->isEnabled() && in_array($user->disable_reason, array('stormpath_new_user', 'uservalidationbyemail_new_user'))) { $user->enable(); $user->__stormpath_user = $account->href; elgg_set_user_validation_status($user->guid, TRUE, 'stormpath'); } elgg_pop_context(); access_show_hidden_entities($show_hidden); if ($user && $user->isEnabled()) { return true; } return false; }
/** * When a user is created * * @param type $hook * @param type $type * @param type $user * @return boolean */ function event_user_create($hook, $type, $user) { if ($user->__stormpath_user) { return true; } // search stormpath for a matching account $application = get_application(); $accts = $application->getAccounts(array('email' => $user->email)); foreach ($accts as $a) { $user->__stormpath_user = $a->href; return true; } $password = get_input('password'); if ($password) { add_to_stormpath($user, $password); } return true; }
<?php namespace Arck\Stormpath; $application = get_application(); if (!$application) { forward('action/logout'); } try { $logoutLink = $application->createIdSiteUrl(['logout' => true, 'callbackUri' => elgg_get_site_url() . 'stormpath/idsite']); forward($logoutLink); } catch (\Exception $exc) { register_error($exc->getMessage()); forward('action/logout'); } forward('action/logout');
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ require "helper_functions.php"; $var = read_desktop_file(); if ($var == null) { echo "Json.txt file is empty or doesn't exist."; return; } //Some parts of the code doesn't set the submenu variable when the user is at the Main Menu which is relected in the "top" variable $submenu = isset($_GET["submenu"]) == true ? $_GET["submenu"] : "main_menu"; $found_app = get_application($var, $submenu, $_GET["app"]); $menu_title = $found_app["Name"]; $enable_main_menu_link = true; ?> <?php include "menubar.php"; ?> <?php $title = $found_app["Name"]; $description = "No Description"; $program_type = $found_app["ProgramType"]; if ($found_app["Description_Link"] != -1) { $handle = fopen($found_app["Description_Link"], "rb"); $description = fread($handle, filesize($found_app["Description_Link"])); fclose($handle);
function import_to_stormpath() { $dbprefix = elgg_get_config('dbprefix'); $subject = elgg_get_plugin_setting('import_subject', PLUGIN_ID); $message = elgg_get_plugin_setting('import_message', PLUGIN_ID); $site = elgg_get_site_entity(); $site_url = elgg_get_site_url(); if (!$subject || !$message) { error_log('no subject/message'); return true; } if (is_elgg18()) { $name_id = add_metastring('__stormpath_user'); $value_id = add_metastring(1); } else { $name_id = elgg_get_metastring_id('__stormpath_user'); $value_id = elgg_get_metastring_id(1); } $options = array('type' => 'user', 'joins' => array("LEFT JOIN {$dbprefix}metadata md ON md.entity_guid = e.guid AND md.name_id = {$name_id}"), 'wheres' => array('md.name_id IS NULL'), 'limit' => false); $batch = new \ElggBatch('elgg_get_entities', $options); $batch->setIncrementOffset(false); foreach ($batch as $user) { // search stormpath for a matching account $application = get_application(); $accts = $application->getAccounts(array('email' => $user->email)); $already_exists = false; foreach ($accts as $a) { $user->__stormpath_user = $a->href; error_log('set user ' . $user->username . ': ' . $a->href); $already_exists = true; break; } if ($already_exists) { continue; } // change it locally $password = generate_random_cleartext_password(); $user->salt = _elgg_generate_password_salt(); $user->password = generate_user_password($user, $password); $user->save(); error_log('adding to stormpath ' . $user->email); $result = add_to_stormpath($user, $password); if ($result) { // notify them of the change // replace tokens in the message $message_m = str_replace('{{password}}', $password, $message); $message_m = str_replace('{{name}}', $user->name, $message_m); $message_m = str_replace('{{username}}', $user->username, $message_m); $message_m = str_replace('{{email}}', $user->email, $message_m); $message_m = str_replace('{{forgot_password}}', $site_url . 'forgotpassword', $message_m); $message_m = str_replace('{{site_email}}', $site->email, $message_m); $message_m = str_replace('{{site_url}}', $site_url, $message_m); notify_user($user->guid, $site->guid, $subject, $message_m, null, 'email'); } } }