PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/tine20/Tinebase/User/Plugin/Abstract.php

https://github.com/corneliusweiss/Tine-2.0-Open-Source-Groupware-and-CRM
PHP | 237 lines | 107 code | 27 blank | 103 comment | 26 complexity | aaa5f6f29115532f2fff052b1d70b1e8 MD5 | raw file
  1. <?php
  2. /**
  3. * Tine 2.0
  4. *
  5. * @package Tinebase
  6. * @subpackage User
  7. * @license http://www.gnu.org/licenses/agpl.html AGPL Version 3
  8. * @copyright Copyright (c) 2010-2012 Metaways Infosystems GmbH (http://www.metaways.de)
  9. * @author Lars Kneschke <l.kneschke@metaways.de>
  10. */
  11. /**
  12. * abstract class for user plugins
  13. *
  14. * @package Tinebase
  15. * @subpackage User
  16. */
  17. abstract class Tinebase_User_Plugin_Abstract implements Tinebase_User_Plugin_SqlInterface
  18. {
  19. /**
  20. * @var Zend_Db_Adapter_Abstract
  21. */
  22. protected $_db = NULL;
  23. /**
  24. * @var Tinebase_Backend_Sql_Command_Interface
  25. */
  26. protected $_dbCommand;
  27. /**
  28. * email user config
  29. *
  30. * @var array
  31. */
  32. protected $_config = array();
  33. /**
  34. * inspect data used to create user
  35. *
  36. * @param Tinebase_Model_FullUser $_addedUser
  37. * @param Tinebase_Model_FullUser $_newUserProperties
  38. */
  39. public function inspectAddUser(Tinebase_Model_FullUser $_addedUser, Tinebase_Model_FullUser $_newUserProperties)
  40. {
  41. $this->inspectUpdateUser($_addedUser, $_newUserProperties);
  42. }
  43. /**
  44. * inspect data used to update user
  45. *
  46. * @param Tinebase_Model_FullUser $_updatedUser
  47. * @param Tinebase_Model_FullUser $_newUserProperties
  48. */
  49. public function inspectUpdateUser(Tinebase_Model_FullUser $_updatedUser, Tinebase_Model_FullUser $_newUserProperties)
  50. {
  51. if (! isset($_newUserProperties->imapUser) && ! isset($_newUserProperties->smtpUser)) {
  52. if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' No email properties found!');
  53. return;
  54. }
  55. if ($this->_userExists($_updatedUser) === true) {
  56. $this->_updateUser($_updatedUser, $_newUserProperties);
  57. } else {
  58. $this->_addUser($_updatedUser, $_newUserProperties);
  59. }
  60. }
  61. /**
  62. * inspect get user by property
  63. *
  64. * @param Tinebase_Model_User $_user the user object
  65. */
  66. public function inspectGetUserByProperty(Tinebase_Model_User $_user)
  67. {
  68. // do nothing
  69. }
  70. /**
  71. * update/set email user password
  72. *
  73. * @param string $_userId
  74. * @param string $_password
  75. * @param bool $_encrypt encrypt password
  76. */
  77. public function inspectSetPassword($_userId, $_password, $_encrypt = TRUE)
  78. {
  79. // do nothing
  80. }
  81. /**
  82. * delete user by id
  83. *
  84. * @param Tinebase_Model_FullUser $_user
  85. */
  86. public function inspectDeleteUser(Tinebase_Model_FullUser $_user)
  87. {
  88. // do nothing
  89. }
  90. /**
  91. * adds email properties for a new user
  92. *
  93. * @param Tinebase_Model_FullUser $_addedUser
  94. * @param Tinebase_Model_FullUser $_newUserProperties
  95. */
  96. abstract protected function _addUser(Tinebase_Model_FullUser $_addedUser, Tinebase_Model_FullUser $_newUserProperties);
  97. /**
  98. * Check if we should append domain name or not
  99. *
  100. * @param string $_userName
  101. * @return string
  102. */
  103. protected function _appendDomain($_userName)
  104. {
  105. $domainConfigKey = ($this instanceof Tinebase_EmailUser_Imap_Interface) ? 'domain' : 'primarydomain';
  106. if (!empty($this->_config[$domainConfigKey])) {
  107. $domain = '@' . $this->_config[$domainConfigKey];
  108. if (strpos($_userName, $domain) === FALSE) {
  109. $_userName .= $domain;
  110. }
  111. }
  112. return $_userName;
  113. }
  114. /**
  115. * set database
  116. */
  117. protected function _getDb()
  118. {
  119. $mailDbConfig = $this->_config[$this->_subconfigKey];
  120. $mailDbConfig['adapter'] = !empty($mailDbConfig['adapter']) ?
  121. strtolower($mailDbConfig['adapter']) :
  122. strtolower($this->_config['adapter']);
  123. $tine20DbConfig = Tinebase_Core::getDb()->getConfig();
  124. $tine20DbConfig['adapter'] = strtolower(str_replace('Tinebase_Backend_Sql_Adapter_', '', get_class(Tinebase_Core::getDb())));
  125. if ($mailDbConfig['adapter'] == $tine20DbConfig['adapter'] &&
  126. $mailDbConfig['host'] == $tine20DbConfig['host'] &&
  127. $mailDbConfig['dbname'] == $tine20DbConfig['dbname'] &&
  128. $mailDbConfig['username'] == $tine20DbConfig['username']
  129. ) {
  130. $this->_db = Tinebase_Core::getDb();
  131. } else {
  132. $dbConfig = array_intersect_key($mailDbConfig, array_flip(array('adapter', 'host', 'dbname', 'username', 'password', 'port')));
  133. $this->_db = Tinebase_Core::createAndConfigureDbAdapter($dbConfig);
  134. }
  135. }
  136. /**
  137. * get email user name depending on config
  138. *
  139. * @param Tinebase_Model_FullUser $user
  140. * @param $alternativeLoginName
  141. * @return string
  142. */
  143. protected function _getEmailUserName(Tinebase_Model_FullUser $user, $alternativeLoginName = null)
  144. {
  145. $domainConfigKey = ($this instanceof Tinebase_EmailUser_Imap_Interface) ? 'domain' : 'primarydomain';
  146. if (isset($this->_config['useEmailAsUsername']) && $this->_config['useEmailAsUsername']) {
  147. $emailUsername = $user->accountEmailAddress;
  148. } else if (isset($this->_config['instanceName']) && ! empty($this->_config['instanceName'])) {
  149. $emailUsername = $user->getId() . '@' . $this->_config['instanceName'];
  150. } else if (isset($this->_config[$domainConfigKey]) && $this->_config[$domainConfigKey] !== null) {
  151. $emailUsername = $this->_appendDomain($user->accountLoginName);
  152. } else if ($alternativeLoginName !== null) {
  153. $emailUsername = $emailAddress;
  154. } else {
  155. $emailUsername = $user->accountLoginName;
  156. }
  157. return $emailUsername;
  158. }
  159. /**
  160. * get database object
  161. *
  162. * @return Zend_Db_Adapter_Abstract
  163. */
  164. public function getDb()
  165. {
  166. return $this->_db;
  167. }
  168. /**
  169. * generate salt for password scheme
  170. *
  171. * @param $_scheme
  172. * @return string
  173. */
  174. protected function _salt($_scheme)
  175. {
  176. // create a salt that ensures crypt creates an sha2 hash
  177. $base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  178. .'abcdefghijklmnopqrstuvwxyz0123456789+/';
  179. $salt = '';
  180. for($i=0; $i<16; $i++){
  181. $salt .= $base64_alphabet[rand(0,63)];
  182. }
  183. switch ($_scheme) {
  184. case 'SSHA256':
  185. $salt = '$5$' . $salt . '$';
  186. break;
  187. case 'SSHA512':
  188. $salt = '$6$' . $salt . '$';
  189. break;
  190. case 'MD5-CRYPT':
  191. default:
  192. $salt = crypt($_scheme);
  193. break;
  194. }
  195. return $salt;
  196. }
  197. /**
  198. * updates email properties for an existing user
  199. *
  200. * @param Tinebase_Model_FullUser $_updatedUser
  201. * @param Tinebase_Model_FullUser $_newUserProperties
  202. */
  203. abstract protected function _updateUser(Tinebase_Model_FullUser $_updatedUser, Tinebase_Model_FullUser $_newUserProperties);
  204. /**
  205. * check if user exists already in plugin user table
  206. *
  207. * @param Tinebase_Model_FullUser $_user
  208. */
  209. abstract protected function _userExists(Tinebase_Model_FullUser $_user);
  210. }