allow to set verify_peer ssl options in Zend_Service_Tine20
[tine20] / tine20 / library / zf1ext / Zend / Service / Tine20.php
1 <?php
2 /**
3  * Zend Framework
4  *
5  * LICENSE
6  *
7  * This source file is subject to the new BSD license that is bundled
8  * with this package in the file LICENSE.txt.
9  * It is also available through the world-wide-web at this URL:
10  * http://framework.zend.com/license/new-bsd
11  * If you did not receive a copy of the license and are unable to
12  * obtain it through the world-wide-web, please send an email
13  * to license@zend.com so we can send you a copy immediately.
14  *
15  * @category   Zend
16  * @package    Zend_Service
17  * @author     Lars Kneschke <l.kneschke@metaways.de>
18  * @copyright  Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
19  * @license    http://framework.zend.com/license/new-bsd     New BSD License
20  */
21
22 /**
23  * @category   Zend
24  * @package    Zend_Service
25  * @author     Lars Kneschke <l.kneschke@metaways.de>
26  * @copyright  Copyright (c) 2009-2017 Metaways Infosystems GmbH (http://www.metaways.de)
27  * @license    http://framework.zend.com/license/new-bsd     New BSD License
28  *
29  * pass some options to Zend_Http_Client like this:
30  *
31  *   $tineService = new Zend_Service_Tine20(null, new Zend_Http_Client(null, array(
32  *       'verify_peer' => false,
33  *       'verify_peer_name' => false,
34  *   )));
35  */
36 class Zend_Service_Tine20 extends Zend_Json_Client
37 {
38     /**
39      * @var string json key required to send with any request
40      */
41     protected $_jsonKey;
42     
43     /**
44      * the url of the Tine 2.0 installation
45      * 
46      * @var string (for example http://demo.tine20.org/index.php)
47      */
48     protected $_url;
49     
50     /**
51      * @var array stores information about the account logged in
52      */
53     protected $_account;
54     
55     /**
56      * @var Zend_Cache_Core
57      */
58     protected $_cache;
59     
60     /**
61      * constructor for Zend_Service_Tine20
62      * @param string           $url         the url of the Tine 2.0 installation
63      * @param Zend_Http_Client $httpClient
64      * @return void
65      */
66     public function __construct($url, $httpClient = null)
67     {
68         $this->_url = $url;
69         
70         if(!$httpClient instanceof Zend_Http_Client) {
71             $httpClient = new Zend_Http_Client();
72         }
73         
74         if(!$httpClient->getCookieJar() instanceof Zend_Http_CookieJar) {
75             $httpClient->setCookieJar();
76         }
77         
78         parent::__construct($url, $httpClient);
79     }    
80
81     public function setCache(Zend_Cache_Core $_cache)
82     {
83         $this->_cache = $_cache;
84     }
85
86     /**
87      * login to Tine 2.0 installation 
88      * 
89      * @param string $loginname
90      * @param string $password
91      * @return array decoded JSON responce
92      * @throws Zend_Service_Exception
93      */
94     public function login($loginname, $password)
95     {
96         $this->setSkipSystemLookup(true);
97         
98         $response = $this->call('Tinebase.login', array(
99             'username'  => $loginname,
100             'password'  => $password
101         ));
102         
103         if($response['success'] !== true) {
104             throw new Zend_Service_Exception($response['errorMessage']);
105         }
106         
107         $this->_jsonKey = $response['jsonKey'];
108         $this->_account = $response['account'];
109         $this->getHttpClient()->setHeaders('X-Tine20-JsonKey', $this->_jsonKey);
110         
111         if($this->_cache instanceof Zend_Cache_Core) {
112             if($this->_cache->test('tine20PrivateSMD')) {
113                 $smd = $this->_cache->load('tine20PrivateSMD');
114                 $this->getIntrospector()->setSMD($smd);
115             } else {
116                 $smd = $this->getIntrospector()->fetchSMD();
117                 $this->_cache->save($smd, 'tine20PrivateSMD');
118             }
119         } else {
120             $this->getIntrospector()->fetchSMD();
121         }
122         
123         $this->setSkipSystemLookup(false);
124         
125         return $response;
126     }
127
128     /**
129      * logout from Tine 2.0 installation
130      * 
131      * @return array decoded JSON responce
132      */
133     public function logout()
134     {
135         $this->setSkipSystemLookup(true);
136         
137         $response = $this->call('Tinebase.logout');
138         
139         $this->_jsonKey = null;
140         $this->_account = null;
141         
142         // unset header
143         $this->getHttpClient()->setHeaders('X-Tine20-JsonKey');
144         
145         $this->setSkipSystemLookup(false);
146         
147         return $response;
148     }
149     
150 }