/** * Returns registry data of admin. * @see Tinebase_Application_Json_Abstract * * @return mixed array 'variable name' => 'data' */ public function getRegistryData() { $appConfigDefaults = Admin_Controller::getInstance()->getConfigSettings(); $smtpConfig = $this->_manageSmtpEmailUser ? Tinebase_EmailUser::getConfig(Tinebase_Config::SMTP) : ($smtpConfig = array()); $registryData = array('manageSAM' => $this->_manageSAM, 'manageImapEmailUser' => $this->_manageImapEmailUser, 'manageSmtpEmailUser' => $this->_manageSmtpEmailUser, 'primarydomain' => isset($smtpConfig['primarydomain']) ? $smtpConfig['primarydomain'] : '', 'secondarydomains' => isset($smtpConfig['secondarydomains']) ? $smtpConfig['secondarydomains'] : '', 'defaultPrimaryGroup' => Tinebase_Group::getInstance()->getDefaultGroup()->toArray(), 'defaultInternalAddressbook' => $appConfigDefaults[Admin_Model_Config::DEFAULTINTERNALADDRESSBOOK] !== NULL ? Tinebase_Container::getInstance()->get($appConfigDefaults[Admin_Model_Config::DEFAULTINTERNALADDRESSBOOK])->toArray() : NULL); return $registryData; }
/** * set database connection shared with Tinebase_EmailUser::DOVECOT_IMAP_COMBINED backend */ protected function _getDb() { $dovecotCombined = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP); if (!$dovecotCombined instanceof Tinebase_EmailUser_Imap_DovecotCombined) { throw new Tinebase_Exception_UnexpectedValue('IMAP backend must be instance of Tinebase_EmailUser_Imap_DovecotCombined'); } $this->_db = $dovecotCombined->getDb(); }
/** * Sets up the fixture. * This method is called before a test is executed. * * @access protected */ protected function setUp() { $this->_config = Tinebase_Config::getInstance()->getConfigAsArray(Tinebase_Config::IMAP); if (!isset($this->_config['backend']) || !(ucfirst($this->_config['backend']) == Tinebase_EmailUser::DOVECOT_IMAP) || $this->_config['active'] != true) { $this->markTestSkipped('Dovecot MySQL backend not configured or not enabled'); } $this->_backend = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP); $personas = Zend_Registry::get('personas'); $this->_objects['user'] = clone $personas['jsmith']; $this->_objects['addedUsers'] = array(); }
/** * Sets up the fixture. * This method is called before a test is executed. * * @access protected */ protected function setUp() { $this->_config = Tinebase_Config::getInstance()->get(Tinebase_Config::IMAP, new Tinebase_Config_Struct())->toArray(); if (!isset($this->_config['backend']) || !('Imap_' . ucfirst($this->_config['backend']) == Tinebase_EmailUser::IMAP_DOVECOT) || $this->_config['active'] != true) { $this->markTestSkipped('Dovecot MySQL backend not configured or not enabled'); } $this->_backend = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP); $personas = Zend_Registry::get('personas'); $this->_objects['user'] = clone $personas['jsmith']; //$this->_objects['user']->setId(Tinebase_Record_Abstract::generateUID()); $this->_objects['addedUsers'] = array(); $this->_objects['fullUsers'] = array(); }
/** * constructs Admin_Frontend_Json */ public function __construct() { // manage samba sam? if (isset(Tinebase_Core::getConfig()->samba)) { $this->_manageSAM = Tinebase_Core::getConfig()->samba->get('manageSAM', false); } // manage email user settings if (Tinebase_EmailUser::manages(Tinebase_Config::IMAP)) { $this->_manageImapEmailUser = TRUE; } if (Tinebase_EmailUser::manages(Tinebase_Config::SMTP)) { $this->_manageSmtpEmailUser = TRUE; } }
/** * Sets up the fixture. * This method is called before a test is executed. * * @access protected */ protected function setUp() { $this->_config = Tinebase_Config::getInstance()->get(Tinebase_Config::IMAP, new Tinebase_Config_Struct())->toArray(); if (!isset($this->_config['backend']) || !('Imap_' . ucfirst($this->_config['backend']) == Tinebase_EmailUser::IMAP_DOVECOT) || $this->_config['active'] != true) { $this->markTestSkipped('Dovecot MySQL backend not configured or not enabled'); } if (Tinebase_User::getConfiguredBackend() === Tinebase_User::ACTIVEDIRECTORY) { // error: Zend_Ldap_Exception: 0x44 (Already exists; 00002071: samldb: Account name (sAMAccountName) // 'tine20phpunituser' already in use!): adding: cn=PHPUnit User Tine 2.0,cn=Users,dc=example,dc=org $this->markTestSkipped('skipped for ad backends as it does not allow duplicate CNs'); } $this->_backend = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP); $personas = Zend_Registry::get('personas'); $this->_objects['user'] = clone $personas['jsmith']; //$this->_objects['user']->setId(Tinebase_Record_Abstract::generateUID()); $this->_objects['addedUsers'] = array(); $this->_objects['fullUsers'] = array(); }
/** * inspect get user by property * * @param Tinebase_Model_User $_user the user object */ public function inspectGetUserByProperty(Tinebase_Model_User $_user) { if (!$_user instanceof Tinebase_Model_FullUser) { return; } // convert data to Tinebase_Model_EmailUser $emailUser = $this->_rawDataToRecord(array()); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($emailUser->toArray(), TRUE)); } $emailUser->emailUsername = $this->_getEmailUserName($_user); if ($this instanceof Tinebase_EmailUser_Smtp_Interface) { $_user->smtpUser = $emailUser; $_user->emailUser = Tinebase_EmailUser::merge($_user->emailUser, clone $_user->smtpUser); } else { $_user->imapUser = $emailUser; $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, $_user->emailUser); } }
/** * Returns a user object with raw data from ldap * * @param Tinebase_Model_User $_user * @param array $_ldapEntry * @return Tinebase_Record_Abstract */ protected function _ldap2User(Tinebase_Model_User $_user, array &$_ldapEntry) { $smtpUser = parent::_ldap2User($_user, $_ldapEntry); $emailAliases = array(); $allowedDomains = explode(',', Tinebase_EmailUser::getConfig(Tinebase_Config::SMTP)['secondarydomains']); if (isset($_ldapEntry['mail'])) { foreach ($_ldapEntry['mail'] as $mail) { if (isset($_user['accountEmailAddress']) && $_user['accountEmailAddress'] != $mail) { in_array(substr(strrchr($mail, "@"), 1), $allowedDomains) ? $emailAliases[] = $mail : ($this->_unmanagedMailAdresses[] = $mail); } } } $smtpUser['emailAliases'] = $emailAliases; $smtpUser['emailForwardOnly'] = null; $smtpUser['emailForwards'] = array(); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($smtpUser, true)); } return $smtpUser; }
/** * inspect get user by property * * @param Tinebase_Model_User $_user the user object */ public function inspectGetUserByProperty(Tinebase_Model_User $_user) { if (!$_user instanceof Tinebase_Model_FullUser) { return; } $userId = $_user->getId(); $select = $this->_getSelect(); if ($this->_hasTine20Userid === true) { $select->where($this->_db->quoteIdentifier($this->_propertyMapping['emailUserId']) . ' = ?', $userId); } else { $select->where($this->_db->quoteIdentifier($this->_propertyMapping['emailUserId']) . ' = ?', $this->_convertToInt($userId)); } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . $select->__toString()); } // Perferom query - retrieve user from database $stmt = $this->_db->query($select); $queryResult = $stmt->fetch(); $stmt->closeCursor(); if (!$queryResult) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . 'Dbmail config for user ' . $userId . ' not found!'); } return; } #if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($queryResult, TRUE)); // convert data to Tinebase_Model_EmailUser $emailUser = $this->_rawDataToRecord($queryResult); #if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($emailUser->toArray(), TRUE)); // modify/correct user name // set emailUsername to Tine accout login name and append domain for login purposes if set $emailUser->emailUsername = $this->_appendDomain($_user->accountLoginName); $_user->imapUser = $emailUser; $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, isset($_user->emailUser) ? $_user->emailUser : null); }
/** * Check for smtp domains in registry * * @see 0010305: Undefined value in user edit dialog */ public function testRegistryForSMTP() { $smtpConfig = Tinebase_EmailUser::getConfig(Tinebase_Config::SMTP); $primaryDomainConfig = Tinebase_EmailUser::manages(Tinebase_Config::SMTP) && isset($smtpConfig['primarydomain']) ? $smtpConfig['primarydomain'] : ''; $secondaryDomainConfig = Tinebase_EmailUser::manages(Tinebase_Config::SMTP) && isset($smtpConfig['secondarydomains']) ? $smtpConfig['secondarydomains'] : ''; $registryData = $this->_json->getRegistryData(); $this->assertEquals($registryData['primarydomain'], $primaryDomainConfig); $this->assertEquals($registryData['secondarydomains'], $secondaryDomainConfig); }
/** * inspect get user by property * * @param Tinebase_Model_User $_user the user object */ public function inspectGetUserByProperty(Tinebase_Model_User $_user) { if (!$_user instanceof Tinebase_Model_FullUser) { return; } $imap = $this->_getImapConnection(); $mailboxString = $this->_getUserMailbox($_user->accountLoginName); $quota = $imap->getQuotaRoot($mailboxString); $emailUser = new Tinebase_Model_EmailUser(array('emailUsername' => $this->_appendDomain($_user->accountLoginName), 'emailUserId' => $this->_appendDomain($_user->accountLoginName), 'emailMailQuota' => isset($quota['STORAGE']) ? round($quota['STORAGE']['limit'] / 1024) : null, 'emailMailSize' => isset($quota['STORAGE']) ? round($quota['STORAGE']['usage'] / 1024) : null)); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($emailUser->toArray(), TRUE)); } $_user->imapUser = $emailUser; $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, isset($_user->emailUser) ? $_user->emailUser : null); }
/** * (non-PHPdoc) * @see Tinebase_User_Plugin_LdapAbstract::inspectGetUserByProperty() */ public function inspectGetUserByProperty(Tinebase_Model_User $_user, array &$_ldapEntry) { if (!$_user instanceof Tinebase_Model_FullUser) { return; } $user = $this->_ldap2User($_user, $_ldapEntry); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($user->toArray(), TRUE)); } if ($this instanceof Tinebase_EmailUser_Ldap) { // TODO this should be moved to Tinebase_EmailUser_Ldap // modify/correct user name // set emailUsername to Tine 2.0 account login name and append domain for login purposes if set if (is_object($user) && empty($user->emailUsername)) { $user->emailUsername = $this->_getEmailUserName($_user); } if ($this instanceof Tinebase_EmailUser_Smtp_Interface) { $_user->smtpUser = $user; $_user->emailUser = Tinebase_EmailUser::merge($_user->emailUser, clone $_user->smtpUser); } else { $_user->imapUser = $user; $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, $_user->emailUser); } } }
/** * testForwardedAlias * * @see 0007066: postfix email user: allow wildcard alias forwarding */ public function testForwardedAlias() { $user = $this->testAddUser(); // check destinations $db = Tinebase_EmailUser::getInstance(Tinebase_Config::SMTP)->getDb(); $select = $db->select()->from(array('smtp_destinations'))->where($db->quoteIdentifier('userid') . ' = ?', $user->getId()); $stmt = $db->query($select); $queryResult = $stmt->fetchAll(); $stmt->closeCursor(); $this->assertEquals(6, count($queryResult), print_r($queryResult, TRUE)); $expectedDestinations = array('bla@' . $this->_mailDomain => array('unittest@' . $this->_mailDomain, 'test@' . $this->_mailDomain), 'blubb@' . $this->_mailDomain => array('unittest@' . $this->_mailDomain, 'test@' . $this->_mailDomain), 'phpunit@' . $this->_mailDomain => array('unittest@' . $this->_mailDomain, 'test@' . $this->_mailDomain)); foreach ($expectedDestinations as $source => $destinations) { $foundDestinations = array(); foreach ($queryResult as $row) { if ($row['source'] === $source) { $foundDestinations[] = $row['destination']; } } $this->assertEquals(2, count($foundDestinations)); $this->assertTrue($foundDestinations == $destinations, print_r($destinations, TRUE)); } }
/** * the constructor * */ public function __construct(array $_options = array()) { $config = Tinebase_EmailUser::getConfig(Tinebase_Config::SMTP); if ($this->_simpleMailConfig === null && isset($config['simplemail']) && isset($config['simplemail']['base'])) { // load default values = simplemail scheme $this->_issetOrDefault($config['simplemail']['storage_base'], $config['simplemail']['base']); $this->_issetOrDefault($config['simplemail']['storage_rdn'], "cn=%u{tine20}"); $this->_issetOrDefault($config['simplemail']['property_mapping'], array('emailAliases' => "mailalternateaddress", 'emailForwards' => "mailforwardingaddress", 'emailForwardOnly' => "maildiscard:boolean")); $this->_issetOrDefault($config['simplemail']['skeleton'], array('objectclass' => array("simplemail", "mailrouting"), 'mailUserDN' => "%s")); $this->_issetOrDefault($config['simplemail']['readonly'], false); $this->_issetOrDefault($config['simplemail']['scope'], Zend_Ldap::SEARCH_SCOPE_SUB); $this->_simpleMailConfig = $config['simplemail']; $this->_propertyMapping = $config['simplemail']['property_mapping']; $this->_ldap = new Tinebase_Ldap(Tinebase_User::getBackendConfiguration()); #$this->_ldap->connect()->bind(); } else { $this->_simpleMailConfig = NULL; if (Tinebase_Core::isLogLevel(Zend_Log::ERR)) { Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' SMTP config: simpleMail is missing ldap base!'); } } }
/** * Returns a user object with raw data from ldap * * @param array $_userData * @param string $_accountClass * @return Tinebase_Record_Abstract * * @todo add generic function for this in Tinebase_User_Ldap or Tinebase_Ldap? */ protected function _ldap2User(Tinebase_Model_User $_user, array &$_ldapEntry) { #if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_ldapEntry, true)); if ($this->_backendType == Tinebase_Config::SMTP) { $accountArray = array('emailForwardOnly' => false, 'emailAliases' => array(), 'emailForwards' => array()); } else { $accountArray = array(); } foreach ($_ldapEntry as $key => $value) { if (is_int($key)) { continue; } $keyMapping = array_search($key, $this->_propertyMapping); if ($keyMapping !== FALSE) { switch ($keyMapping) { case 'emailMailQuota': // convert to megabytes $accountArray[$keyMapping] = convertToMegabytes($value[0]); break; case 'emailAliases': case 'emailForwards': $accountArray[$keyMapping] = $value; break; case 'emailForwardOnly': $accountArray[$keyMapping] = $value[0] == 'forwardonly' ? true : false; break; default: $accountArray[$keyMapping] = $value[0]; break; } } } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($accountArray, true)); } if ($this->_backendType == Tinebase_Config::SMTP) { $_user->smtpUser = new Tinebase_Model_EmailUser($accountArray); $_user->emailUser = Tinebase_EmailUser::merge(isset($_user->emailUser) ? $_user->emailUser : null, $_user->smtpUser); } else { $_user->imapUser = new Tinebase_Model_EmailUser($accountArray); $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, isset($_user->emailUser) ? $_user->emailUser : null); } }
/** * return an instance of the current user backend * * @param string $backendType name of the user backend * @return Tinebase_User_Abstract * @throws Tinebase_Exception_InvalidArgument */ public static function factory($backendType) { $options = self::getBackendConfiguration(); // this is a dangerous TRACE as there might be passwords in here! //if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' // . print_r($options, TRUE)); $options['plugins'] = array(); // manage email user settings if (Tinebase_EmailUser::manages(Tinebase_Config::IMAP)) { try { $options['plugins'][] = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP); } catch (Exception $e) { if (Tinebase_Core::isLogLevel(Zend_Log::ERR)) { Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' Could not add IMAP EmailUser plugin: ' . $e); } } } if (Tinebase_EmailUser::manages(Tinebase_Config::SMTP)) { try { $options['plugins'][] = Tinebase_EmailUser::getInstance(Tinebase_Config::SMTP); } catch (Exception $e) { if (Tinebase_Core::isLogLevel(Zend_Log::ERR)) { Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' Could not add SMTP EmailUser plugin: ' . $e); } } } switch ($backendType) { case self::ACTIVEDIRECTORY: $result = new Tinebase_User_ActiveDirectory($options); break; case self::LDAP: // manage samba sam? if (isset(Tinebase_Core::getConfig()->samba) && Tinebase_Core::getConfig()->samba->get('manageSAM', FALSE) == true) { $options['plugins'][] = new Tinebase_User_Plugin_Samba(Tinebase_Core::getConfig()->samba->toArray()); } $result = new Tinebase_User_Ldap($options); break; case self::SQL: $result = new Tinebase_User_Sql($options); break; case self::TYPO3: $result = new Tinebase_User_Typo3($options); break; default: throw new Tinebase_Exception_InvalidArgument("User backend type {$backendType} not implemented."); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Created user backend of type ' . $backendType); } return $result; }
/** * inspect get user by property * * @param Tinebase_Model_User $_user the user object */ public function inspectGetUserByProperty(Tinebase_Model_User $_user) { if (!$_user instanceof Tinebase_Model_FullUser) { return; } $userId = $_user->getId(); $select = $this->_getSelect()->where($this->_db->quoteIdentifier($this->_userTable . '.' . $this->_propertyMapping['emailUserId']) . ' = ?', $userId); // Perform query - retrieve user from database $stmt = $this->_db->query($select); $queryResult = $stmt->fetch(); $stmt->closeCursor(); if (!$queryResult) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $this->_subconfigKey . ' config for user ' . $userId . ' not found!'); } } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($queryResult, TRUE)); } // convert data to Tinebase_Model_EmailUser $emailUser = $this->_rawDataToRecord((array) $queryResult); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($emailUser->toArray(), TRUE)); } // modify/correct user name // set emailUsername to Tine 2.0 account login name and append domain for login purposes if set if (empty($emailUser->emailUsername)) { $emailUser->emailUsername = $this->_getEmailUserName($_user); } if ($this instanceof Tinebase_EmailUser_Smtp_Interface) { $_user->smtpUser = $emailUser; $_user->emailUser = Tinebase_EmailUser::merge($_user->emailUser, clone $_user->smtpUser); } else { $_user->imapUser = $emailUser; $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, $_user->emailUser); } }
/** * return an instance of the current user backend * * @param string $backendType name of the user backend * @return Tinebase_User_Abstract * @throws Tinebase_Exception_InvalidArgument */ public static function factory($backendType) { $options = self::getBackendConfiguration(); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($options, TRUE)); } $options['plugins'] = array(); // manage email user settings if (Tinebase_EmailUser::manages(Tinebase_Config::IMAP)) { $options['plugins'][] = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP); } if (Tinebase_EmailUser::manages(Tinebase_Config::SMTP)) { $options['plugins'][] = Tinebase_EmailUser::getInstance(Tinebase_Config::SMTP); } switch ($backendType) { case self::LDAP: // manage samba sam? if (isset(Tinebase_Core::getConfig()->samba) && Tinebase_Core::getConfig()->samba->get('manageSAM', FALSE) == true) { $options['plugins'][] = new Tinebase_User_Plugin_Samba(Tinebase_Core::getConfig()->samba->toArray()); } $result = new Tinebase_User_Ldap($options); break; case self::SQL: $result = new Tinebase_User_Sql($options); break; case self::TYPO3: $result = new Tinebase_User_Typo3($options); break; default: throw new Tinebase_Exception_InvalidArgument("User backend type {$backendType} not implemented."); } if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Created user backend of type ' . $backendType); } return $result; }