diff --git a/control.php b/control.php
new file mode 100644
index 0000000..251a7ea
--- /dev/null
+++ b/control.php
@@ -0,0 +1,46 @@
+siteMap->getPage($action, getUserClass($userID))
+
+if (isset($page)) {
+ redirect($page);
+} else {
+ // TODO: build no permission page
+ print "you do not have access to view this page! please go away, and come back when you do.";
+}
+
+?>
diff --git a/lib/Authenticator.inc b/lib/Authenticator.inc
new file mode 100644
index 0000000..3f118be
--- /dev/null
+++ b/lib/Authenticator.inc
@@ -0,0 +1,115 @@
+owl_users_table where username = '$username' and password = '" . md5($password) . "'";
+ $sql->query($query);
+ //$sql->query("select * from $default->owl_users_table where username = '$username' and password = '" . md5($password) . "'");
+ $numrows = $sql->num_rows($sql);
+ // Bozz Begin added Password Encryption above, but for now
+ // I will allow admin to use non crypted password until he
+ // upgrades all users
+ if ($numrows == "1") {
+ while($sql->next_record()) {
+ if ( $sql->f("disabled") == 1 ) {
+ $userDetails["status"] = 2;
+ } else {
+ $userDetails["status"] = 1;
+ $userDetails["userName"] = $sql->f("username");
+ $userDetails["userID"] = $sql->f("id");
+ $userDetails["groupID"] = $sql->f("groupid");
+ $maxsessions = $sql->f("maxsessions") + 1;
+ }
+ }
+ // Remove this else in a future version
+ } elseif ($username == "admin") {
+ // username admin check password
+ $sql->query("select * from $default->owl_users_table where username = '$username' and password = '$password'");
+ $numrows = $sql->num_rows($sql);
+ if ($numrows == "1") {
+ while($sql->next_record()) {
+ $userDetails["status"] = 1;
+ $userDetails["userName"] = $sql->f("username");
+ $userDetails["userID"] = $sql->f("id");
+ $userDetails["groupID"] = $sql->f("groupid");
+ $maxsessions = $sql->f("maxsessions") + 1;
+ }
+ }
+ // login failure
+ } else {
+ $userDetails["status"] = 0;
+ }
+
+ if (isset($userDetails["userID"]) && ($userDetails["status"] != 0)) {
+ // remove stale sessions from the database for the user
+ // that is signing on.
+ Owl_Session::removeStaleSessions($userDetails["userID"]);
+
+ // Check if Maxsessions has been reached
+ $sql = new Owl_DB;
+ $sql->query("select * from $default->owl_sessions_table where uid = '".$userDetails["userID"]."'");
+ if ($sql->num_rows($sql) >= $maxsessions && $userDetails["status"] != 0) {
+ if ( $userDetails["groupID"] == 0) {
+ // ignore maxsessions check for admin group
+ $userDetails["status"] = 1;
+ } else {
+ // return too many sessions status code
+ $userDetails["status"] = 3;
+ }
+ }
+ }
+ return $userDetails;
+ }
+
+ /**
+ * Logs the user out of the application
+ *
+ * @param userID
+ * the ID of user logging out
+ * @param sessionID
+ * the user's sessionID
+ */
+ function logout($userID, $sessionID) {
+ // remove session from db
+ Owl_Session::remove($sessionID)
+ }
+
+
+}
+
+/**
+ * Perform authentication tasks against the database.
+ */
+class DBAuthenticator extends Authenticator {
+}
+
+/**
+ * Perform authentication tasks against LDAP compliant directory server.
+ */
+class LDAPAuthenticator extends Authenticator {
+}
+
+?>
diff --git a/lib/control.inc b/lib/control.inc
new file mode 100644
index 0000000..7edfeed
--- /dev/null
+++ b/lib/control.inc
@@ -0,0 +1,44 @@
+owl_root_url . "/";
+ // if we have a session
+ if (isset($uid->sessdata["sessid"])) {
+ // check url for parameters and add sessid accordingly
+ if (strstr($url, "?")) {
+ $url = $url . "&sess=". $uid->sessdata["sessid"];
+ } else {
+ $url = $url . "?sess=". $uid->sessdata["sessid"];
+ }
+ }
+ header("Location: $url");
+}
+
+/**
+ * Redirects to login if no session is present
+ */
+function checkSession($sessionID) {
+ $sessionStatus = Owl_Session::verify($sessionID);
+ switch ($sessionStatus["status"]) {
+
+ }
+}
+
diff --git a/login.php b/login.php
new file mode 100644
index 0000000..1f1b400
--- /dev/null
+++ b/login.php
@@ -0,0 +1,70 @@
+");
+ print("
$lang_engine
$lang_version: $default->version