source-class-CAS_ProxiedService_Imap

It appears that you are using AdBlocking software. The cost of running this website is covered by advertisements. If you like it please feel free to a small amount of money to secure the future of this website.
Overview

Classes

Interfaces

Exceptions

Functions

  1: <?php
  2: 
  3: /**
  4:  * Licensed to Jasig under one or more contributor license
  5:  * agreements. See the NOTICE file distributed with this work for
  6:  * additional information regarding copyright ownership.
  7:  *
  8:  * Jasig licenses this file to you under the Apache License,
  9:  * Version 2.0 (the "License"); you may not use this file except in
 10:  * compliance with the License. You may obtain a copy of the License at:
 11:  *
 12:  * http://www.apache.org/licenses/LICENSE-2.0
 13:  *
 14:  * Unless required by applicable law or agreed to in writing, software
 15:  * distributed under the License is distributed on an "AS IS" BASIS,
 16:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 17:  * See the License for the specific language governing permissions and
 18:  * limitations under the License.
 19:  *
 20:  * PHP Version 5
 21:  *
 22:  * @file     CAS/ProxiedService/Imap.php
 23:  * @category Authentication
 24:  * @package  PhpCAS
 25:  * @author   Adam Franco <afranco@middlebury.edu>
 26:  * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
 27:  * @link     https://wiki.jasig.org/display/CASC/phpCAS
 28:  */
 29: 
 30: /**
 31:  * Provides access to a proxy-authenticated IMAP stream
 32:  *
 33:  * @class    CAS_ProxiedService_Imap
 34:  * @category Authentication
 35:  * @package  PhpCAS
 36:  * @author   Adam Franco <afranco@middlebury.edu>
 37:  * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
 38:  * @link     https://wiki.jasig.org/display/CASC/phpCAS
 39:  */
 40: class CAS_ProxiedService_Imap
 41: extends CAS_ProxiedService_Abstract
 42: {
 43: 
 44:     /**
 45:      * The username to send via imap_open.
 46:      *
 47:      * @var string $_username;
 48:      */
 49:     private $_username;
 50: 
 51:     /**
 52:      * Constructor.
 53:      *
 54:      * @param string $username Username
 55:      *
 56:      * @return void
 57:      */
 58:     public function __construct ($username)
 59:     {
 60:         if (!is_string($username) || !strlen($username)) {
 61:             throw new CAS_InvalidArgumentException('Invalid username.');
 62:         }
 63: 
 64:         $this->_username = $username;
 65:     }
 66: 
 67:     /**
 68:      * The target service url.
 69:      * @var string $_url;
 70:      */
 71:     private $_url;
 72: 
 73:     /**
 74:      * Answer a service identifier (URL) for whom we should fetch a proxy ticket.
 75:      *
 76:      * @return string
 77:      * @throws Exception If no service url is available.
 78:      */
 79:     public function getServiceUrl ()
 80:     {
 81:         if (empty($this->_url)) {
 82:             throw new CAS_ProxiedService_Exception(
 83:                 'No URL set via '.get_class($this).'->getServiceUrl($url).'
 84:             );
 85:         }
 86: 
 87:         return $this->_url;
 88:     }
 89: 
 90:     /*********************************************************
 91:      * Configure the Stream
 92:     *********************************************************/
 93: 
 94:     /**
 95:      * Set the URL of the service to pass to CAS for proxy-ticket retrieval.
 96:      *
 97:      * @param string $url Url to set
 98:      *
 99:      * @return void
100:      * @throws CAS_OutOfSequenceException If called after the stream has been opened.
101:      */
102:     public function setServiceUrl ($url)
103:     {
104:         if ($this->hasBeenOpened()) {
105:             throw new CAS_OutOfSequenceException(
106:                 'Cannot set the URL, stream already opened.'
107:             );
108:         }
109:         if (!is_string($url) || !strlen($url)) {
110:             throw new CAS_InvalidArgumentException('Invalid url.');
111:         }
112: 
113:         $this->_url = $url;
114:     }
115: 
116:     /**
117:      * The mailbox to open. See the $mailbox parameter of imap_open().
118:      *
119:      * @var string $_mailbox
120:      */
121:     private $_mailbox;
122: 
123:     /**
124:      * Set the mailbox to open. See the $mailbox parameter of imap_open().
125:      *
126:      * @param string $mailbox Mailbox to set
127:      *
128:      * @return void
129:      * @throws CAS_OutOfSequenceException If called after the stream has been opened.
130:      */
131:     public function setMailbox ($mailbox)
132:     {
133:         if ($this->hasBeenOpened()) {
134:             throw new CAS_OutOfSequenceException(
135:                 'Cannot set the mailbox, stream already opened.'
136:             );
137:         }
138:         if (!is_string($mailbox) || !strlen($mailbox)) {
139:             throw new CAS_InvalidArgumentException('Invalid mailbox.');
140:         }
141: 
142:         $this->_mailbox = $mailbox;
143:     }
144: 
145:     /**
146:      * A bit mask of options to pass to imap_open() as the $options parameter.
147:      *
148:      * @var int $_options
149:      */
150:     private $_options = null;
151: 
152:     /**
153:      * Set the options for opening the stream. See the $options parameter of
154:      * imap_open().
155:      *
156:      * @param int $options Options for the stream
157:      *
158:      * @return void
159:      * @throws CAS_OutOfSequenceException If called after the stream has been opened.
160:      */
161:     public function setOptions ($options)
162:     {
163:         if ($this->hasBeenOpened()) {
164:             throw new CAS_OutOfSequenceException(
165:                 'Cannot set options, stream already opened.'
166:             );
167:         }
168:         if (!is_int($options)) {
169:             throw new CAS_InvalidArgumentException('Invalid options.');
170:         }
171: 
172:         $this->_options = $options;
173:     }
174: 
175:     /*********************************************************
176:      * 2. Open the stream
177:     *********************************************************/
178: 
179:     /**
180:      * Open the IMAP stream (similar to imap_open()).
181:      *
182:      * @return resource Returns an IMAP stream on success
183:      * @throws CAS_OutOfSequenceException If called multiple times.
184:      * @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
185:      *      The code of the Exception will be one of:
186:      *          PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
187:      *          PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
188:      *          PHPCAS_SERVICE_PT_FAILURE
189:      * @throws CAS_ProxiedService_Exception If there is a failure sending the
190:      *         request to the target service.
191:      */
192:     public function open ()
193:     {
194:         if ($this->hasBeenOpened()) {
195:             throw new CAS_OutOfSequenceException('Stream already opened.');
196:         }
197:         if (empty($this->_mailbox)) {
198:             throw new CAS_ProxiedService_Exception(
199:                 'You must specify a mailbox via '.get_class($this)
200:                 .'->setMailbox($mailbox)'
201:             );
202:         }
203: 
204:         phpCAS::traceBegin();
205: 
206:         // Get our proxy ticket and append it to our URL.
207:         $this->initializeProxyTicket();
208:         phpCAS::trace('opening IMAP mailbox `'.$this->_mailbox.'\'...');
209:         $this->_stream = @imap_open(
210:             $this->_mailbox, $this->_username, $this->getProxyTicket(),
211:             $this->_options
212:         );
213:         if ($this->_stream) {
214:             phpCAS::trace('ok');
215:         } else {
216:             phpCAS::trace('could not open mailbox');
217:             // @todo add localization integration.
218:             $message = 'IMAP Error: '.$this->_url.' '. var_export(imap_errors(), true);
219:             phpCAS::trace($message);
220:             throw new CAS_ProxiedService_Exception($message);
221:         }
222: 
223:         phpCAS::traceEnd();
224:         return $this->_stream;
225:     }
226: 
227:     /**
228:      * Answer true if our request has been sent yet.
229:      *
230:      * @return bool
231:      */
232:     protected function hasBeenOpened ()
233:     {
234:         return !empty($this->_stream);
235:     }
236: 
237:     /*********************************************************
238:      * 3. Access the result
239:     *********************************************************/
240:     /**
241:      * The IMAP stream
242:      *
243:      * @var resource $_stream
244:      */
245:     private $_stream;
246: 
247:     /**
248:      * Answer the IMAP stream
249:      *
250:      * @return resource
251:      */
252:     public function getStream ()
253:     {
254:         if (!$this->hasBeenOpened()) {
255:             throw new CAS_OutOfSequenceException(
256:                 'Cannot access stream, not opened yet.'
257:             );
258:         }
259:         return $this->_stream;
260:     }
261: 
262:     /**
263:      * CAS_Client::serviceMail() needs to return the proxy ticket for some reason,
264:      * so this method provides access to it.
265:      *
266:      * @return string
267:      * @throws CAS_OutOfSequenceException If called before the stream has been
268:      * opened.
269:      */
270:     public function getImapProxyTicket ()
271:     {
272:         if (!$this->hasBeenOpened()) {
273:             throw new CAS_OutOfSequenceException(
274:                 'Cannot access errors, stream not opened yet.'
275:             );
276:         }
277:         return $this->getProxyTicket();
278:     }
279: }
280: ?>
281: 
 

© 2004-2018 – Nicola Asuni - Tecnick.com - All rights reserved.
about - disclaimer - privacy