added google authenticator support to the gui

This commit is contained in:
SJ
2013-10-16 14:55:17 +02:00
parent 62e5dc8afa
commit dae73a577a
50 changed files with 10676 additions and 39 deletions

View File

@ -3,6 +3,7 @@
class ModelUserAuth extends Model {
public function checkLogin($username = '', $password = '') {
$session = Registry::get('session');
$ok = 0;
if($username == '' || $password == '') { return 0; }
@ -47,17 +48,19 @@ class ModelUserAuth extends Model {
if($ok == 1) {
$_SESSION['username'] = $query->row['username'];
$_SESSION['uid'] = $query->row['uid'];
$_SESSION['admin_user'] = $query->row['isadmin'];
$_SESSION['email'] = $username;
$_SESSION['domain'] = $query->row['domain'];
$_SESSION['realname'] = $query->row['realname'];
$session->set("username", $username);
$session->set("uid", $query->row['uid']);
$session->set("admin_user", $query->row['isadmin']);
$session->set("email", $username);
$session->set("domain", $query->row['domain']);
$session->set("realname", $query->row['realname']);
$_SESSION['auditdomains'] = $this->model_user_user->get_users_all_domains($query->row['uid']);
$_SESSION['emails'] = $this->model_user_user->get_users_all_email_addresses($query->row['uid']);
$_SESSION['folders'] = $this->model_folder_folder->get_all_folder_ids($query->row['uid']);
$_SESSION['extra_folders'] = $this->model_folder_folder->get_all_extra_folder_ids($query->row['uid']);
$session->set("auditdomains", $this->model_user_user->get_users_all_domains($query->row['uid']));
$session->set("emails", $this->model_user_user->get_users_all_email_addresses($query->row['uid']));
$session->set("folders", $this->model_folder_folder->get_all_folder_ids($query->row['uid']));
$session->set("extra_folders", $this->model_folder_folder->get_all_extra_folder_ids($query->row['uid']));
$this->is_ga_code_needed();
return 1;
}
@ -190,6 +193,8 @@ class ModelUserAuth extends Model {
private function add_session_vars($name = '', $email = '', $emails = array(), $role = 0) {
$session = Registry::get('session');
$a = explode("@", $email);
$uid = $this->model_user_user->get_uid_by_email($email);
@ -198,23 +203,26 @@ class ModelUserAuth extends Model {
$query = $this->db->query("INSERT INTO " . TABLE_EMAIL . " (uid, email) VALUES(?,?)", array($uid, $email));
}
$_SESSION['username'] = $name;
$_SESSION['uid'] = $uid;
$session->set("username", $email);
$session->set("uid", $uid);
if($role > 0) {
$_SESSION['admin_user'] = $role;
$session->set("admin_user", $role);
} else {
$_SESSION['admin_user'] = 0;
$session->set("admin_user", 0);
}
$_SESSION['email'] = $email;
$_SESSION['domain'] = $a[1];
$_SESSION['realname'] = $name;
$session->set("email", $email);
$session->set("domain", $a[1]);
$session->set("realname", $name);
$_SESSION['auditdomains'] = $this->model_domain_domain->get_your_all_domains_by_email($email);
$_SESSION['emails'] = $emails;
$_SESSION['folders'] = array();
$_SESSION['extra_folders'] = array();
$session->set("auditdomains", $this->model_domain_domain->get_your_all_domains_by_email($email));
$session->set("emails", $emails);
$session->set("folders", array());
$session->set("extra_folders", array());
$this->is_ga_code_needed();
}
@ -243,6 +251,8 @@ class ModelUserAuth extends Model {
private function checkLoginAgainstIMAP($username = '', $password = '') {
$session = Registry::get('session');
$user = array();
$imap = new Zend_Mail_Protocol_Imap(IMAP_HOST, IMAP_PORT, IMAP_SSL);
@ -251,7 +261,7 @@ class ModelUserAuth extends Model {
$this->add_session_vars($username, $username, array($username), 0);
$_SESSION['password'] = $password;
$session->set("password", $password);
return 1;
}
@ -357,6 +367,17 @@ class ModelUserAuth extends Model {
}
private function is_ga_code_needed() {
$session = Registry::get('session');
$query = $this->db->query("SELECT ga_enabled FROM " . TABLE_USER_SETTINGS . " WHERE username=?", array($session->get("username")));
if(isset($query->row['ga_enabled']) && $query->row['ga_enabled'] == 1) {
$session->set("ga_block", 1);
}
}
public function change_password($username = '', $password = '') {
if($username == "" || $password == ""){ return 0; }

View File

@ -39,6 +39,53 @@ class ModelUserPrefs extends Model {
return 1;
}
public function get_ga_settings($username = '') {
$data = array('ga_enabled' => 0, 'ga_secret' => '');
if($username == ""){ return $data; }
$GA = new PHPGangsta_GoogleAuthenticator();
$query = $this->db->query("SELECT ga_enabled, ga_secret FROM " . TABLE_USER_SETTINGS . " WHERE username=?", array($username));
if(isset($query->row['ga_enabled'])) {
$data['ga_enabled'] = $query->row['ga_enabled'];
$data['ga_secret'] = $query->row['ga_secret'];
if($data['ga_secret'] == '') {
$data['ga_secret'] = $GA->createSecret();
$this->update_ga_secret($username, $data['ga_secret']);
}
}
else {
$query = $this->db->query("INSERT INTO " . TABLE_USER_SETTINGS . " (username, ga_enabled, ga_secret) VALUES(?,0,?)", array($username, $GA->createSecret()));
}
return $data;
}
public function update_ga_secret($username = '', $ga_secret = '') {
if($username == "" || $ga_secret == "") { return 0; }
$query = $this->db->query("UPDATE " . TABLE_USER_SETTINGS . " SET ga_secret=? WHERE username=?", array($ga_secret, $username));
return 1;
}
public function toggle_ga($username = '', $ga_enabled = '') {
if($username == "" || $ga_enabled < 0 || $ga_enabled > 1) { return 0; }
$query = $this->db->query("UPDATE " . TABLE_USER_SETTINGS . " SET ga_enabled=? WHERE username=?", array($ga_enabled, $username));
return 1;
}
}
?>