saas enhancements

This commit is contained in:
SJ
2013-07-23 22:44:34 +02:00
parent 90eef6b43d
commit 920f4208ba
31 changed files with 970 additions and 463 deletions

View File

@ -26,6 +26,21 @@ class ModelDomainDomain extends Model {
}
public function get_mapped_domains() {
$data = array();
$query = $this->db->query("SELECT DISTINCT mapped FROM " . TABLE_DOMAIN . " ORDER BY mapped ASC");
if(isset($query->rows)) {
foreach($query->rows as $q) {
array_push($data, $q['mapped']);
}
}
return $data;
}
public function get_domains_by_string($s = '', $page = 0, $page_len = PAGE_LEN) {
$from = (int)$page * (int)$page_len;

View File

@ -3,6 +3,76 @@
class ModelSaasCustomer extends Model
{
public function get($id = -1) {
if($id > 0) {
$query = $this->db->query("SELECT * FROM " . TABLE_CUSTOMER_SETTINGS . " WHERE id=?", array($id));
if($query->num_rows > 0) { return $query->row; }
}
$query = $this->db->query("SELECT * FROM " . TABLE_CUSTOMER_SETTINGS . " ORDER BY domain ASC");
if($query->num_rows > 0) { return $query->rows; }
return array();
}
public function delete($id = 0, $description = '') {
if($id == 0) { return 0; }
$query = $this->db->query("DELETE FROM " . TABLE_CUSTOMER_SETTINGS . " WHERE id=?", array($id));
$rc = $this->db->countAffected();
LOGGER("remove ldap entry: #$id, $description (rc=$rc)");
return $rc;
}
public function add($arr = array()) {
$branding_logo = '';
if(!isset($arr['domain']) || !isset($arr['branding_text'])) { return 0; }
if(isset($_FILES['branding_logo']['name'])) {
$branding_logo = $_FILES['branding_logo']['name'];
move_uploaded_file($_FILES['branding_logo']['tmp_name'], DIR_BASE . "/images/" . $_FILES['branding_logo']['name']);
}
$query = $this->db->query("INSERT INTO " . TABLE_CUSTOMER_SETTINGS . " (domain, branding_text, branding_url, branding_logo, support_link, colour) VALUES (?,?,?,?,?,?)", array($arr['domain'], $arr['branding_text'], $arr['branding_url'], $branding_logo, $arr['support_link'], $arr['colour']));
$rc = $this->db->countAffected();
LOGGER("add ldap entry: " . $arr['domain'] . " / " . $arr['branding_text'] . " / " . $arr['branding_url'] . " / " . $arr['support_link'] . " (rc=$rc)");
if($rc == 1){ return 1; }
return 0;
}
public function update($arr = array()) {
$branding_logo = '';
if(!isset($arr['id']) || !isset($arr['domain']) || !isset($arr['branding_text'])) { return 0; }
if(isset($_FILES['branding_logo']['name'])) {
$branding_logo = $_FILES['branding_logo']['name'];
move_uploaded_file($_FILES['branding_logo']['tmp_name'], DIR_BASE . "/images/" . $_FILES['branding_logo']['name']);
$query = $this->db->query("UPDATE " . TABLE_CUSTOMER_SETTINGS . " SET domain=?, branding_text=?, branding_url=?, branding_logo=?, support_link=?, colour=? WHERE id=?", array($arr['domain'], $arr['branding_text'], $arr['branding_url'], $branding_logo, $arr['support_link'], $arr['colour'], $arr['id']));
}
else {
$query = $this->db->query("UPDATE " . TABLE_CUSTOMER_SETTINGS . " SET domain=?, branding_text=?, branding_url=?, support_link=?, colour=? WHERE id=?", array($arr['domain'], $arr['branding_text'], $arr['branding_url'], $arr['support_link'], $arr['colour'], $arr['id']));
}
return $this->db->countAffected();
}
public function get_customer_settings_by_email() {
$data = array(
'branding_text' => BRANDING_TEXT,
@ -17,6 +87,13 @@ class ModelSaasCustomer extends Model
list ($user, $domain) = explode("@", $_SESSION['email']);
if(MEMCACHED_ENABLED) {
$cache_key = sha1("customer_settings:" . $domain);
$memcache = Registry::get('memcache');
$m = $memcache->get($cache_key);
if(isset($m['data'])) { return unserialize($m['data']); }
}
$query = $this->db->query("SELECT * FROM " . TABLE_CUSTOMER_SETTINGS . " WHERE domain=(SELECT mapped FROM " . TABLE_DOMAIN . " WHERE domain=?)", array($domain));
if($query->num_rows > 0) {
@ -27,6 +104,10 @@ class ModelSaasCustomer extends Model
if($query->row['colour']) { $data['colour'] = $query->row['colour']; }
}
if(MEMCACHED_ENABLED && $cache_key) {
$memcache->add($cache_key, array('data' => serialize($data)), 0, MEMCACHED_TTL);
}
return $data;
}

View File

@ -3,9 +3,14 @@
class ModelSaasLdap extends Model
{
public function get() {
public function get($id = -1) {
$query = $this->db->query("SELECT id, description, ldap_type, ldap_host, ldap_base_dn, ldap_bind_dn FROM " . TABLE_LDAP . " ORDER BY description ASC");
if($id >= 0) {
$query = $this->db->query("SELECT id, description, ldap_type, ldap_host, ldap_base_dn, ldap_bind_dn, ldap_bind_pw, ldap_auditor_member_dn FROM " . TABLE_LDAP . " WHERE id=?", array($id));
if($query->num_rows > 0) { return $query->row; }
}
$query = $this->db->query("SELECT id, description, ldap_type, ldap_host, ldap_base_dn, ldap_bind_dn, ldap_auditor_member_dn FROM " . TABLE_LDAP . " ORDER BY description ASC");
if($query->num_rows > 0) { return $query->rows; }
@ -29,7 +34,7 @@ class ModelSaasLdap extends Model
public function add($arr = array()) {
if(!isset($arr['description']) || !isset($arr['ldap_host'])) { return 0; }
$query = $this->db->query("INSERT INTO " . TABLE_LDAP . " (description, ldap_host, ldap_base_dn, ldap_bind_dn, ldap_bind_pw, ldap_type) VALUES (?,?,?,?,?,?)", array($arr['description'], $arr['ldap_host'], $arr['ldap_base_dn'], $arr['ldap_bind_dn'], $arr['ldap_bind_pw'], $arr['ldap_type']));
$query = $this->db->query("INSERT INTO " . TABLE_LDAP . " (description, ldap_host, ldap_base_dn, ldap_bind_dn, ldap_bind_pw, ldap_type, ldap_auditor_member_dn) VALUES (?,?,?,?,?,?,?)", array($arr['description'], $arr['ldap_host'], $arr['ldap_base_dn'], $arr['ldap_bind_dn'], $arr['ldap_bind_pw'], $arr['ldap_type'], $arr['ldap_auditor_member_dn']));
$rc = $this->db->countAffected();
@ -41,6 +46,15 @@ class ModelSaasLdap extends Model
}
public function update($arr = array()) {
if(!isset($arr['id']) || !isset($arr['description']) || !isset($arr['ldap_host'])) { return 0; }
$query = $this->db->query("UPDATE " . TABLE_LDAP . " SET description=?, ldap_host=?, ldap_base_dn=?, ldap_bind_dn=?, ldap_bind_pw=?, ldap_type=?, ldap_auditor_member_dn=? WHERE id=?", array($arr['description'], $arr['ldap_host'], $arr['ldap_base_dn'], $arr['ldap_bind_dn'], $arr['ldap_bind_pw'], $arr['ldap_type'], $arr['ldap_auditor_member_dn'], $arr['id']));
return $this->db->countAffected();
}
public function get_ldap_params_by_email($email = '') {
$domain = '';
@ -48,9 +62,9 @@ class ModelSaasLdap extends Model
list($l,$d) = explode("@", $email);
$query = $this->db->query("SELECT ldap_type, ldap_host, ldap_base_dn, ldap_bind_dn, ldap_bind_pw from " . TABLE_DOMAIN . " as d, " . TABLE_LDAP . " as l where d.ldap_id=l.id and d.domain=?", array($d));
$query = $this->db->query("SELECT ldap_type, ldap_host, ldap_base_dn, ldap_bind_dn, ldap_bind_pw, ldap_auditor_member_dn FROM " . TABLE_DOMAIN . " as d, " . TABLE_LDAP . " as l where d.ldap_id=l.id and d.domain=?", array($d));
if($query->num_rows > 0) { return array($query->row['ldap_type'], $query->row['ldap_host'], $query->row['ldap_base_dn'], $query->row['ldap_bind_dn'], $query->row['ldap_bind_pw']); }
if($query->num_rows > 0) { return array($query->row['ldap_type'], $query->row['ldap_host'], $query->row['ldap_base_dn'], $query->row['ldap_bind_dn'], $query->row['ldap_bind_pw'], $query->row['ldap_auditor_member_dn']); }
return array();
}

View File

@ -67,16 +67,18 @@ class ModelUserAuth extends Model {
$ldap_base_dn = LDAP_BASE_DN;
$ldap_helper_dn = LDAP_HELPER_DN;
$ldap_helper_password = LDAP_HELPER_PASSWORD;
$ldap_auditor_member_dn = LDAP_AUDITOR_MEMBER_DN;
if(ENABLE_SAAS == 1) {
$a = $this->model_saas_ldap->get_ldap_params_by_email($username);
if(count($a) >= 5) {
if(count($a) >= 6) {
$ldap_type = $a[0];
$ldap_host = $a[1];
$ldap_base_dn = $a[2];
$ldap_helper_dn = $a[3];
$ldap_helper_password = $a[4];
$ldap_auditor_member_dn = $a[5];
}
}
@ -101,7 +103,7 @@ class ModelUserAuth extends Model {
$query = $ldap->query($ldap_base_dn, "(|(&(objectClass=$ldap_account_objectclass)($ldap_mail_attr=$username))(&(objectClass=$ldap_distributionlist_objectclass)($ldap_distributionlist_attr=$username)" . ")(&(objectClass=$ldap_distributionlist_objectclass)($ldap_distributionlist_attr=" . stripslashes($a['dn']) . ")))", array("mail", "mailalternateaddress", "proxyaddresses", "zimbraMailForwardingAddress", "member", "memberOfGroup"));
$is_auditor = $this->check_ldap_membership($query->rows);
$is_auditor = $this->check_ldap_membership($ldap_auditor_member_dn, $query->rows);
$emails = $this->get_email_array_from_ldap_attr($query->rows);
@ -124,8 +126,8 @@ class ModelUserAuth extends Model {
}
private function check_ldap_membership($e = array()) {
if(LDAP_AUDITOR_MEMBER_DN == '') { return 0; }
private function check_ldap_membership($ldap_auditor_member_dn = '', $e = array()) {
if($ldap_auditor_member_dn == '') { return 0; }
foreach($e as $a) {
foreach (array("memberof") as $memberattr) {
@ -133,13 +135,13 @@ class ModelUserAuth extends Model {
if(isset($a[$memberattr]['count'])) {
for($i = 0; $i < $a[$memberattr]['count']; $i++) {
if($a[$memberattr][$i] == LDAP_AUDITOR_MEMBER_DN) {
if($a[$memberattr][$i] == $ldap_auditor_member_dn) {
return 1;
}
}
}
else {
if($a[$memberattr] == LDAP_AUDITOR_MEMBER_DN) {
if($a[$memberattr] == $ldap_auditor_member_dn) {
return 1;
}
}