public static function create_user($login = false) { $person = new midcom_db_person(); $person->_use_rcs = false; $person->_use_activitystream = false; $password = substr('p_' . time(), 0, 11); $username = __CLASS__ . ' user ' . microtime(); midcom::get('auth')->request_sudo('midcom.core'); if (!$person->create()) { throw new Exception('Person could not be created. Reason: ' . midcom_connection::get_error_string()); } $account = midcom_core_account::get($person); $account->set_password($password); $account->set_username($username); $account->save(); midcom::get('auth')->drop_sudo(); if ($login) { if (!midcom::get('auth')->login($username, $password)) { throw new Exception('Login for user ' . $username . ' failed'); } midcom::get('auth')->_sync_user_with_backend(); } self::$_class_objects[$person->guid] = $person; return $person; }
/** * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. */ public function _handler_delete($handler_id, array $args, array &$data) { // Check if we get the person $this->_person = new midcom_db_person($args[0]); $this->_person->require_do('midgard:update'); if ($this->_person->id != midcom_connection::get_user()) { midcom::get('auth')->require_user_do('org.openpsa.user:manage', null, 'org_openpsa_user_interface'); } $this->_account = new midcom_core_account($this->_person); if (!$this->_account->get_username()) { // Account needs to be created first, relocate return new midcom_response_relocate("view/" . $this->_person->guid . "/"); } $data['controller'] = midcom_helper_datamanager2_handler::get_delete_controller(); switch ($data['controller']->process_form()) { case 'delete': if (!$this->_account->delete()) { throw new midcom_error("Failed to delete account for {$this->_person->guid}, last Midgard error was: " . midcom_connection::get_error_string()); } //Fall-through //Fall-through case 'cancel': return new midcom_response_relocate('view/' . $this->_person->guid . "/"); } $this->add_stylesheet(MIDCOM_STATIC_URL . "/midcom.helper.datamanager2/legacy.css"); midcom::get('head')->enable_jquery(); midcom::get('head')->set_pagetitle("{$this->_person->firstname} {$this->_person->lastname}"); $this->_prepare_request_data(); $this->_update_breadcrumb_line('delete account'); // Add toolbar items org_openpsa_helpers::dm2_savecancel($this, 'delete'); }
public function test_handler_lostpassword() { $data = $this->run_handler('org.openpsa.user', array('lostpassword')); $this->assertEquals('lostpassword', $data['handler_id']); $user = self::create_user(); $account = new midcom_core_account($user); $old_password = $account->get_password(); $formdata = array('username' => $account->get_username()); $this->set_dm2_formdata($data['controller'], $formdata); $data = $this->run_handler('org.openpsa.user', array('lostpassword')); $this->assertEquals(array(), $data['controller']->formmanager->form->_errors); $user->refresh(); $account = new midcom_core_account($user); $this->assertEquals('lostpassword', $data['handler_id']); $this->assertNotEquals($old_password, $account->get_password()); }
/** * Helper function that lists options for the person filter */ public function get_person_options() { $qb_persons = midcom_db_person::new_query_builder(); midcom_core_account::add_username_constraint($qb_persons, '<>', ''); $person_array = array(); $persons = $qb_persons->execute(); foreach ($persons as $person) { $person_array[$person->id] = $person->get_label(); } return $person_array; }
public static function setUpBeforeClass() { self::$_person = self::create_class_object('midcom_db_person'); self::$_password = substr('p_' . time(), 0, 11); self::$_username = __CLASS__ . ' user ' . time(); midcom::get('auth')->request_sudo('midcom.core'); $account = midcom_core_account::get(self::$_person); $account->set_password(self::$_password); $account->set_username(self::$_username); $account->save(); midcom::get('auth')->drop_sudo(); }
public function testNameUnique() { midcom::get('auth')->request_sudo('midcom.core'); $account1 = midcom_core_account::get(self::$_person); $username = __CLASS__ . ' user ' . time(); $account1->set_username($username); $account1->save(); $this->assertEquals($username, $account1->get_username()); $person = $this->create_object('midcom_db_person'); $account2 = midcom_core_account::get($person); $password = '******' . time(); $account2->set_password($password); $account2->set_username($username); $stat = $account2->save(); $this->assertFalse($stat); midcom::get('auth')->drop_sudo(); }
/** * Prepares group member data for JSON display */ public function get_row(midcom_core_dbaobject $user) { $prefix = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX); $entry = array(); $entry['id'] = $user->id; $lastname = trim($user->lastname); if (empty($lastname)) { $lastname = $this->_l10n->get('person') . ' #' . $user->id; } $entry['lastname'] = "<a href='" . $prefix . 'person/' . $user->guid . "/'>" . $lastname . "</a>"; $entry['index_lastname'] = $lastname; $entry['firstname'] = "<a href='" . $prefix . 'person/' . $user->guid . "/' >" . $user->firstname . "</a>"; $entry['index_firstname'] = $user->firstname; $account = new midcom_core_account($user); $entry['username'] = "******" . $prefix . 'person/' . $user->guid . "/' >" . $account->get_username() . "</a>"; $entry['index_username'] = $account->get_username(); $entry['email'] = "<a href='mailto:" . $user->email . "' >" . $user->email . "</a>"; $entry['index_email'] = $user->email; return $entry; }
public static function get_person_by_formdata($data) { if (empty($data['username']) || empty($data['password'])) { return false; } midcom::get('auth')->request_sudo('org.openpsa.user'); $qb = midcom_db_person::new_query_builder(); midcom_core_account::add_username_constraint($qb, '=', $_POST['username']); $results = $qb->execute(); midcom::get('auth')->drop_sudo(); if (sizeof($results) != 1) { return false; } return $results[0]; }
/** * Prepares user data for JSON display */ public function get_row(midcom_core_dbaobject $user) { $prefix = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX); $entry = array(); $entry['id'] = $user->id; $lastname = trim($user->lastname); if (empty($lastname)) { $lastname = $this->_l10n->get('person') . ' #' . $user->id; } $entry['lastname'] = "<a href='" . $prefix . 'view/' . $user->guid . "/'>" . $lastname . "</a>"; $entry['index_lastname'] = $user->lastname; $entry['firstname'] = "<a href='" . $prefix . 'view/' . $user->guid . "/' >" . $user->firstname . "</a>"; $entry['index_firstname'] = $user->firstname; $account = new midcom_core_account($user); $entry['username'] = $account->get_username(); $entry['groups'] = array(); //get groups $mc_member = org_openpsa_contacts_member_dba::new_collector('uid', $user->id); $mc_member->add_constraint('gid.orgOpenpsaObtype', '<', org_openpsa_contacts_group_dba::MYCONTACTS); $mc_member->add_order('gid.official'); $mc_member->add_order('gid.name'); $gids = $mc_member->get_values('gid'); foreach ($gids as $gid) { try { $group = org_openpsa_contacts_group_dba::get_cached($gid); $entry['groups'][] = '<a href="' . $prefix . 'group/' . $group->guid . '/">' . $group->get_label() . '</a>'; } catch (midcom_error $e) { $e->log(); } } $entry['groups'] = implode(', ', $entry['groups']); return $entry; }
/** * This is an internal helper function, resetting the password to a randomly generated one. */ private function _reset_password() { if (!midcom::get('auth')->request_sudo($this->_component)) { throw new midcom_error('Failed to request sudo privileges.'); } $qb = midcom_db_person::new_query_builder(); if (array_key_exists('username', $this->_controller->datamanager->types)) { $user = midcom::get('auth')->get_user_by_name($this->_controller->datamanager->types['username']->value); if (!$user) { midcom::get('auth')->drop_sudo(); throw new midcom_error("Cannot find user. For some reason the QuickForm validation failed."); } $qb->add_constraint('guid', '=', $user->guid); } if (array_key_exists('email', $this->_controller->datamanager->types)) { $qb->add_constraint('email', '=', $this->_controller->datamanager->types['email']->value); } $results = $qb->execute(); if (sizeof($results) != 1) { midcom::get('auth')->drop_sudo(); throw new midcom_error("Cannot find user. For some reason the QuickForm validation failed."); } $person = $results[0]; $account = new midcom_core_account($person); // Generate a random password $length = max(8, $this->_config->get('password_minlength')); $password = org_openpsa_user_accounthelper::generate_password($length); $account->set_password($password); if (!$account->save()) { midcom::get('auth')->drop_sudo(); throw new midcom_error("Could not update the password: " . midcom_connection::get_error_string()); } midcom::get('auth')->drop_sudo(); $this->_send_reset_mail($person, $password); }
/** * @depends testCheck_password_strength * @depends testCheck_password_reuse * @depends testGenerate_safe_password */ public function testSet_account() { $accounthelper = new org_openpsa_user_accounthelper(self::$_user); $account = midcom_core_account::get(self::$_user); $password = $account->get_password(); $username = $account->get_username(); midcom::get('auth')->request_sudo('org.openpsa.user'); self::$_user->delete_parameter('org_openpsa_user_password', 'old_passwords'); self::$_user->delete_parameter('org_openpsa_user_password', 'last_change'); do { $new_password = $accounthelper->generate_safe_password(); } while ($password === $new_password); $new_username = $username . time(); $this->assertTrue($accounthelper->set_account($new_username, $new_password)); midcom::get('auth')->drop_sudo(); $this->assertEquals(midcom_connection::prepare_password($new_password), $account->get_password()); $this->assertEquals($new_username, $account->get_username()); $this->assertFalse(is_null(self::$_user->get_parameter('org_openpsa_user_password', 'last_change'))); $this->assertEquals(serialize(array($password)), self::$_user->get_parameter('org_openpsa_user_password', 'old_passwords')); }