Commit b081ba6bbccdad2680291a72962b571ede6dbc4a

Authored by Michael Joseph
1 parent c1f3bef1

interim db code for retrieving user details upon successful authentication, to b…

…e replaced by UserManager calls


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@277 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/authentication/Authenticator.inc
1 1 <?php
2 2  
  3 +//require_once("$default->owl_fs_root/lib/administration/UserManager.inc");
  4 +
3 5 /**
4 6 * $Id$
5 7 *
... ... @@ -8,8 +10,8 @@
8 10 * Licensed under the GNU GPL. For full terms see the file COPYING.
9 11 *
10 12 * @version $Revision$
11   - * @author <a href="mailto:michael@jamwarehouse.com>Michael Joseph</a>, Jam Warehouse (Pty) Ltd, South Africa
12   - * @package dms
  13 + * @author <a href="mailto:michael@jamwarehouse.com">Michael Joseph</a>, Jam Warehouse (Pty) Ltd, South Africa
  14 + * @package dmslib
13 15 */
14 16 class Authenticator {
15 17  
... ... @@ -25,13 +27,19 @@ class Authenticator {
25 27 */
26 28 function login($userName, $password) {
27 29 // TODO: create session, add user details to the session
28   - global $default;
  30 + global $default, $lang_err_database;
29 31 if ($this->checkPassword($userName, $password)) {
30 32 // retrieve user details from the database and return
31   - // $userDetails = UnitManager::getUserDetails($userName);
32   - // TODO: refactor the code below (and change for new db)
33   - // also need to add ldap dn to user table
34   - $sql = new Owl_DB;
  33 + /*
  34 + $userID = lookupID($default->owl_users_table, "username", "'$userName'");
  35 + $userDetails = UserManager::getUserDetails($userID);
  36 + if (!$userDetails) {
  37 + // we don't have a session yet, so return a general error message
  38 + $userDetails["status"] = -1;
  39 + }
  40 + */
  41 + // FIXME: remove when user manager method coded
  42 + $sql = new Owl_DB();
35 43 $query = "select * from $default->owl_users_table where username = '$userName'";
36 44 $sql->query($query);
37 45 $numrows = $sql->num_rows($sql);
... ... @@ -41,28 +49,46 @@ class Authenticator {
41 49 $userDetails["status"] = 2;
42 50 } else {
43 51 $userDetails["status"] = 1;
44   - $userDetails["user_id"] = $sql->f("id");
  52 + $userDetails["userID"] = $sql->f("id");
45 53 $userDetails["username"] = $sql->f("username");
46   - //$userDetails["group_id"] = $sql->f("group_id");
47 54 $userDetails["max_sessions"] = $sql->f("max_sessions") + 1;
48 55 }
49 56 }
50 57  
  58 + // retrieve user groups
  59 + $sql = new Owl_DB;
  60 + $query = "select group_id from $default->owl_users_groups_table where user_id = " . $userDetails["userID"];
  61 + $sql->query($query);
  62 + $userDetails["groupID"] = array();
  63 + while($sql->next_record()) {
  64 + $userDetails["groupID"][] = $sql->f("group_id");
  65 + if (!isset($userDetails["unitID"])) {
  66 + $userDetails["unitID"] = lookupID($default->owl_groups_units_table, "group_id", $sql->f("group_id"));
  67 + $userDetails["organisationID"] = lookupField($default->owl_units_table, "organisation_id", "id", $userDetails["unitID"]);
  68 + }
  69 + }
  70 + // FIXME: remove when user manager method coded
  71 +
51 72 // remove stale sessions from the database for the user
52 73 // that is signing on.
53   - Session::removeStaleSessions($userDetails["user_id"]);
  74 + Session::removeStaleSessions($userDetails["userID"]);
54 75  
55   - // Check if Maxsessions has been reached
56   - $sql = new Owl_DB;
57   - $sql->query("select * from $default->owl_sessions_table where id = '".$userDetails["user_id"]."'");
58   - if ($sql->num_rows($sql) >= $userDetails["max_sessions"]) {
59   - if ( $userDetails["group_id"] == 0) {
60   - // ignore maxsessions check for admin group
61   - $userDetails["status"] = 1;
62   - } else {
63   - // return too many sessions status code
64   - $userDetails["status"] = 3;
  76 +
  77 + // Check if Maxsessions has been reached
  78 + $sql = new Owl_DB;
  79 + if ($sql->query("SELECT * FROM $default->owl_sessions_table WHERE user_id = '".$userDetails["user_id"]."'")) {
  80 + if ($sql->num_rows($sql) >= $userDetails["max_sessions"]) {
  81 + // FIXME: change for multiple groups
  82 + if ( $userDetails["groupID"] == 0) {
  83 + // ignore maxsessions check for admin group
  84 + $userDetails["status"] = 1;
  85 + } else {
  86 + // return too many sessions status code
  87 + $userDetails["status"] = 3;
  88 + }
65 89 }
  90 + } else {
  91 + $_SESSION["errorMessage"] = $lang_err_database;
66 92 }
67 93 }
68 94 } else {
... ...