Exemple #1
0
 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;
 }
Exemple #2
0
 /**
  * @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');
 }
Exemple #3
0
 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());
 }
Exemple #4
0
 /**
  * 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;
 }
Exemple #5
0
 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();
 }
Exemple #6
0
 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();
 }
Exemple #7
0
 /**
  * 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;
 }
Exemple #8
0
 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];
 }
Exemple #9
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;
 }
Exemple #10
0
 /**
  * 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);
 }
Exemple #11
0
 /**
  * @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'));
 }