1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
13:
14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
28: class Horde_Core_Factory_Auth extends Horde_Core_Factory_Base
29: {
30: 31: 32: 33: 34:
35: private $_instances = array();
36:
37: 38: 39: 40: 41: 42: 43: 44:
45: public function create($app = null)
46: {
47: if (is_null($app)) {
48: $app = 'horde';
49: }
50:
51: if (isset($this->_instances[$app])) {
52: return $this->_instances[$app];
53: }
54:
55: $base_params = array(
56: 'app' => $app,
57: 'logger' => $this->_injector->getInstance('Horde_Log_Logger')
58: );
59:
60: if ($app == 'horde') {
61: $base_params['base'] = $this->_create($GLOBALS['conf']['auth']['driver']);
62: }
63:
64: $this->_instances[$app] = Horde_Auth::factory(
65: 'Horde_Core_Auth_Application',
66: $base_params
67: );
68:
69: return $this->_instances[$app];
70: }
71:
72: 73: 74: 75: 76: 77: 78: 79:
80: protected function _create($driver, $orig_params = null)
81: {
82: 83:
84: if (strcasecmp($driver, 'application') === 0) {
85: $driver = 'Horde_Core_Auth_Application';
86: } elseif (strcasecmp($driver, 'httpremote') === 0) {
87:
88: $driver = 'Http_Remote';
89: } elseif (strcasecmp($driver, 'composite') === 0) {
90: $driver = 'Horde_Core_Auth_Composite';
91: } elseif (strcasecmp($driver, 'ldap') === 0) {
92: $driver = 'Horde_Core_Auth_Ldap';
93: } elseif (strcasecmp($driver, 'msad') === 0) {
94: $driver = 'Horde_Core_Auth_Msad';
95: } elseif (strcasecmp($driver, 'shibboleth') === 0) {
96: $driver = 'Horde_Core_Auth_Shibboleth';
97: } elseif (strcasecmp($driver, 'imsp') === 0) {
98: $driver = 'Horde_Core_Auth_Imsp';
99: } else {
100: $driver = implode('_', array_map('Horde_String::ucwords', explode('_', Horde_String::lower(basename($driver)))));
101: }
102:
103: $params = is_null($orig_params)
104: ? Horde::getDriverConfig('auth', $driver)
105: : $orig_params;
106:
107: $lc_driver = Horde_String::lower($driver);
108: switch ($lc_driver) {
109: case 'horde_core_auth_composite':
110:
111:
112: if (!empty($params['admin_driver'])) {
113: $params['admin_driver'] = $this->_create($params['admin_driver']['driver'], $params['admin_driver']['params']);
114: }
115: if (!empty($params['auth_driver'])) {
116: $params['auth_driver'] = $this->_create($params['auth_driver']['driver'], $params['auth_driver']['params']);
117: }
118: break;
119:
120: case 'cyrsql':
121: $imap_config = array(
122: 'hostspec' => empty($params['cyrhost']) ? null : $params['cyrhost'],
123: 'password' => $params['cyrpass'],
124: 'port' => empty($params['cyrport']) ? null : $params['cyrport'],
125: 'secure' => ($params['secure'] == 'none') ? null : $params['secure'],
126: 'username' => $params['cyradmin'],
127: );
128:
129: try {
130: $ob = Horde_Imap_Client::factory('Socket', $imap_config);
131: $ob->login();
132: $params['imap'] = $ob;
133: } catch (Horde_Imap_Client_Exception $e) {
134: throw new Horde_Auth_Exception($e);
135: }
136:
137: if (!empty($params['driverconfig']) &&
138: $params['driverconfig'] == 'horde') {
139: $params['db'] = $this->_injector
140: ->getInstance('Horde_Db_Adapter');
141: } else {
142: $params['db'] = $this->_injector
143: ->getInstance('Horde_Core_Factory_Db')
144: ->create('horde', is_null($orig_params) ? 'auth' : $orig_params);
145: }
146:
147: $params['charset'] = 'UTF-8';
148: break;
149:
150: case 'http_remote':
151: $params['client'] = $this->_injector->getInstance('Horde_Core_Factory_HttpClient')->create();
152: break;
153:
154: case 'imap':
155: $params['charset'] = 'UTF-8';
156: break;
157:
158: case 'horde_core_auth_application':
159: if (isset($this->_instances[$params['app']])) {
160: return $this->_instances[$params['app']];
161: }
162: break;
163:
164: case 'horde_core_auth_imsp':
165: $params['imsp'] = $this->_injector->getInstance('Horde_Core_Factory_Imsp')->create();
166: break;
167:
168: case 'kolab':
169: $params['kolab'] = $this->_injector
170: ->getInstance('Horde_Kolab_Session');
171: break;
172:
173: case 'horde_core_auth_ldap':
174: case 'horde_core_auth_msad':
175: $params['ldap'] = $this->_injector
176: ->getInstance('Horde_Core_Factory_Ldap')
177: ->create('horde', is_null($orig_params) ? 'auth' : $orig_params);
178: break;
179:
180: case 'customsql':
181: case 'sql':
182: if (!empty($params['driverconfig']) &&
183: $params['driverconfig'] == 'horde') {
184: $params['db'] = $this->_injector
185: ->getInstance('Horde_Db_Adapter');
186: } else {
187: $params['db'] = $this->_injector
188: ->getInstance('Horde_Core_Factory_Db')
189: ->create('horde', is_null($orig_params) ? 'auth' : $orig_params);
190: }
191: break;
192: }
193:
194: $params['default_user'] = $GLOBALS['registry']->getAuth();
195: $params['logger'] = $this->_injector->getInstance('Horde_Log_Logger');
196: if (!empty($params['count_bad_logins'])) {
197: $params['history_api'] = $this->_injector->getInstance('Horde_History');
198: }
199: if (!empty($params['login_block'])) {
200: $params['lock_api'] = $this->_injector->getInstance('Horde_Lock');
201: }
202:
203: $auth_ob = Horde_Auth::factory($driver, $params);
204: if ($driver == 'Horde_Core_Auth_Application') {
205: $this->_instances[$params['app']] = $auth_ob;
206: }
207:
208: return $auth_ob;
209: }
210:
211: }
212: