Example #1
0
function login_ldap($username, $password)
{
    // ldap connecting: must be a valid LDAP server!
    try {
        $ds = ldap_connect("ds.uni-sofia.bg");
    } catch (Exception $e) {
        $error = new Error("User: {$username} failed login:"******"uid={$username},ou=People,dc=uni-sofia,dc=bg";
            $userbind = ldap_bind($ds, $user_dn, $password);
            // verify binding
            if ($userbind) {
                global $ldapRdn;
                global $ldapPass;
                // set ldap bind variables
                $ldaprdn = $ldapRdn;
                $ldappass = $ldapPass;
                // binding to ldap server
                $ldapbind = ldap_bind($ds, $ldaprdn, $ldappass);
                // verify binding
                if ($ldapbind) {
                    // data array
                    $array = array("displayname", "mail", "title", "suscientifictitle", "suscientificdegree", "suFaculty", "suDepartment", "suStudentFaculty", "ou", "objectclass");
                    //$array = array("displayname", "mail", "title");
                    $sr = ldap_search($ds, "ou=People,dc=uni-sofia,dc=bg", "(uid={$username})", $array, 0, 0, 0);
                    $pass = md5($password);
                    $email = "";
                    $givenname = "";
                    $title = "";
                    $staff_groups = "";
                    $student_groups = "";
                    $staff_groups_id = array();
                    $student_groups_id = array();
                    $student_groups_array = array();
                    $staff_groups_array = array();
                    $info = ldap_get_entries($ds, $sr);
                    for ($i = 0; $i < count($info); $i++) {
                        if (isset($info[$i]['mail'])) {
                            $email = $info[$i]['mail'][0];
                        }
                        if (isset($info[$i]['displayname'])) {
                            $givenname = $info[$i]['displayname'][0];
                        }
                        if (isset($info[$i]['title'])) {
                            $title .= $info[$i]['title'][0];
                        }
                        if (isset($info[$i]['suscientifictitle'])) {
                            $title .= " " . $info[$i]['suscientifictitle'][0];
                        }
                        if (isset($info[$i]['suscientificdegree'])) {
                            $title .= " " . $info[$i]['suscientificdegree'][0];
                        }
                        if (isset($info[$i]['objectclass'])) {
                            if (in_array("suStudentPerson", $info[$i]['objectclass']) && !in_array("suFacultyPerson", $info[$i]['objectclass'])) {
                                if (isset($info[$i]['sustudentfaculty'])) {
                                    foreach ($info[$i]['sustudentfaculty'] as $student_group) {
                                        if (!is_int($student_group)) {
                                            array_push($student_groups_array, $student_group);
                                        }
                                    }
                                } elseif (isset($info[$i]['sufaculty'])) {
                                    foreach ($info[$i]['sufaculty'] as $student_group) {
                                        if (!is_int($student_group)) {
                                            array_push($student_groups_array, $student_group);
                                        }
                                    }
                                }
                            }
                            if (in_array("suStaffPerson", $info[$i]['objectclass']) || in_array("suFacultyPerson", $info[$i]['objectclass'])) {
                                if (isset($info[$i]['sufaculty'])) {
                                    foreach ($info[$i]['sufaculty'] as $staff_group) {
                                        if (!is_int($staff_group) && !in_array($staff_group, $student_groups_array)) {
                                            array_push($staff_groups_array, $staff_group);
                                        }
                                    }
                                }
                                if (isset($info[$i]['sudepartment'])) {
                                    foreach ($info[$i]['sudepartment'] as $staff_group) {
                                        if (!is_int($staff_group)) {
                                            array_push($staff_groups_array, $staff_group);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    // get the ids of the staff groups
                    foreach ($staff_groups_array as $staff_group_name) {
                        $staff_group_ids = get_group_by_name($staff_group_name);
                        if (!empty($staff_group_ids)) {
                            foreach ($staff_group_ids as $group_id) {
                                $group = new Group();
                                $group->get_from_db($group_id);
                                if ($group->getLocal() == "0" && $group->getStudent() == "0" && $group->getStaff() == "1") {
                                    array_push($staff_groups_id, $group_id);
                                }
                            }
                        }
                    }
                    // get the ids of the student groups
                    foreach ($student_groups_array as $student_group_name) {
                        $student_group_ids = get_group_by_name($student_group_name);
                        if (!empty($student_group_ids)) {
                            foreach ($student_group_ids as $group_id) {
                                $group = new Group();
                                $group->get_from_db($group_id);
                                if ($group->getLocal() == "0" && $group->getStudent() == "1" && $group->getStaff() == "0") {
                                    array_push($student_groups_id, $group_id);
                                }
                            }
                        }
                    }
                    // set common properties
                    $staff_groups .= serialize($staff_groups_id);
                    $student_groups .= serialize($student_groups_id);
                    $user = new User();
                    $user->setUsername($username);
                    $user->setPassword($pass);
                    $user->setLocal(0);
                    $user_exists = get_user_by_username($username);
                    $time_now = date("Y-m-d H:i:s");
                    if (!empty($user_exists)) {
                        $user->get_from_db($user_exists[0]);
                        $user->setGivenname($givenname);
                        $user->setTitle($title);
                        $user->setStaffGroups($staff_groups);
                        $user->setStudentGroups($student_groups);
                        $user->setId($user_exists[0]);
                        $user->setId($pass);
                        $user->setLastEditedOn($time_now);
                        $user->update_in_db();
                        $info = new Info("User: id " . $user->getId() . " update in db");
                        $info->writeLog();
                    } else {
                        $user->setEmail($email);
                        $user->setCanVote(1);
                        $user->setCanAsk(0);
                        $user->setAdmin(0);
                        $user->setGivenname($givenname);
                        $user->setTitle($title);
                        $user->setStaffGroups($staff_groups);
                        $user->setStudentGroups($student_groups);
                        $user->setLocalGroups(serialize(array()));
                        $user->setIsActive(1);
                        $user->setCreatedOn($time_now);
                        $user->setLastEditedOn($time_now);
                        $user->store_in_db();
                        $info = new Info("User: {$username} added in db");
                        $info->writeLog();
                    }
                    ldap_close($ds);
                }
            }
        } catch (Exception $e) {
            $error = new Error("User: {$username} failed login:"******"LDAP server unavailable");
        $error->writeLog();
    }
}
Example #2
0
 }
 $userDNs[$dn] = true;
 /* Record the number of DNs
  * that are identical apart from
  * right hand whitespace
  */
 //     if(isset($rightWhiteDNs[rtrim($dn)])) {
 //     	echo "Identical DN inserted apart from right hand whitespace: "
 //     			. $dn . "-----------\r\n";
 //     	continue;
 //     }
 //     $rightWhiteDNs[rtrim($dn)] = true;
 $doctrineUser = new User();
 $doctrineUser->setForename((string) $user->FORENAME);
 $doctrineUser->setSurname((string) $user->SURNAME);
 $doctrineUser->setTitle((string) $user->TITLE);
 $doctrineUser->setEmail((string) $user->EMAIL);
 $doctrineUser->setTelephone((string) $user->TEL);
 $doctrineUser->setWorkingHoursStart((string) $user->WORKING_HOURS_START);
 $doctrineUser->setWorkingHoursEnd((string) $user->WORKING_HOURS_END);
 //$doctrineUser->setCertificateDn((string) $user->CERTDN);
 $doctrineUser->setCertificateDn($dn);
 $doctrineUser->setAdmin(false);
 //  echo "DN is " . (string) $doctrineUser->getCertificateDn() . ".\r\n";
 // Roughly half of users don't have a home site set
 if ($user->HOMESITE != "" && !isBad($user->HOMESITE)) {
     // get the home site entity
     $dql = "SELECT s from Site s WHERE s.shortName = ?1";
     $homeSites = $entityManager->createQuery($dql)->setParameter(1, (string) $user->HOMESITE)->getResult();
     /* Error checking: ensure each "home site" refers to exactly
      * one home site */
Example #3
0
 /**
  * Array
  * (
  *     [TITLE] => Mr
  *     [FORENAME] => Testing
  *     [SURNAME] => TestFace
  *     [EMAIL] => JCasson@gmail.com
  *     [TELEPHONE] => 01235 44 5010
  *     [CERTIFICATE_DN] => /C=UK/O=eScience/OU=CLRC/L=RAL/CN=claire devereuxxxx
  * )
  * @param array $values User details, defined above
  */
 public function register($values)
 {
     // validate the input fields for the user
     $this->validateUser($values);
     // Check the DN isn't already registered
     $user = $this->getUserByPrinciple($values['CERTIFICATE_DN']);
     if (!is_null($user)) {
         throw new \Exception("DN is already registered in GOCDB");
     }
     //Explicity demarcate our tx boundary
     $this->em->getConnection()->beginTransaction();
     $user = new \User();
     try {
         $user->setTitle($values['TITLE']);
         $user->setForename($values['FORENAME']);
         $user->setSurname($values['SURNAME']);
         $user->setEmail($values['EMAIL']);
         $user->setTelephone($values['TELEPHONE']);
         $user->setCertificateDn($values['CERTIFICATE_DN']);
         $user->setAdmin(false);
         $this->em->persist($user);
         $this->em->flush();
         $this->em->getConnection()->commit();
     } catch (\Exception $ex) {
         $this->em->getConnection()->rollback();
         $this->em->close();
         throw $ex;
     }
     return $user;
 }