forked from vergnet/site-accueil-insa
CAS
This commit is contained in:
parent
e6b1b28779
commit
7b0cf0ab0d
52 changed files with 12206 additions and 0 deletions
7
phpCAS-1.3.6/.gitattributes
vendored
Normal file
7
phpCAS-1.3.6/.gitattributes
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/docs/ export-ignore
|
||||||
|
/test/ export-ignore
|
||||||
|
/utils/ export-ignore
|
||||||
|
/.buildpath export-ignore
|
||||||
|
/.gitignore export-ignore
|
||||||
|
/.project export-ignore
|
||||||
|
/.travis.yml export-ignore
|
30
phpCAS-1.3.6/CAS.php
Normal file
30
phpCAS-1.3.6/CAS.php
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once dirname(__FILE__).'/source/CAS.php';
|
201
phpCAS-1.3.6/LICENSE
Normal file
201
phpCAS-1.3.6/LICENSE
Normal file
|
@ -0,0 +1,201 @@
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
81
phpCAS-1.3.6/NOTICE
Normal file
81
phpCAS-1.3.6/NOTICE
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
Copyright 2007-2011, JA-SIG, Inc.
|
||||||
|
This project includes software developed by Jasig.
|
||||||
|
http://www.jasig.org/
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this software except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at:
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
===========================================================================
|
||||||
|
|
||||||
|
Copyright © 2003-2007, The ESUP-Portail consortium
|
||||||
|
|
||||||
|
Requirements for sources originally licensed under the New BSD License:
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
- Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
- Neither the name of JA-SIG, Inc. nor the names of its contributors may be
|
||||||
|
used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
===========================================================================
|
||||||
|
|
||||||
|
Copyright (c) 2009, Regents of the University of Nebraska
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Requirements for CAS_Autloader originally licensed under the New BSD License:
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
Neither the name of the University of Nebraska nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
31
phpCAS-1.3.6/README.md
Normal file
31
phpCAS-1.3.6/README.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
phpCAS
|
||||||
|
=======
|
||||||
|
|
||||||
|
phpCAS is an authentication library that allows PHP applications to easily authenticate
|
||||||
|
users via a Central Authentication Service (CAS) server.
|
||||||
|
|
||||||
|
Please see the phpCAS website for more information:
|
||||||
|
|
||||||
|
https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/apereo/phpCAS.png)](https://travis-ci.org/apereo/phpCAS)
|
||||||
|
|
||||||
|
|
||||||
|
LICENSE
|
||||||
|
-------
|
||||||
|
|
||||||
|
Copyright 2007-2015, JA-SIG, Inc.
|
||||||
|
This project includes software developed by Jasig.
|
||||||
|
http://www.jasig.org/
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this software except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at:
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
29
phpCAS-1.3.6/composer.json
Normal file
29
phpCAS-1.3.6/composer.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "apereo/phpcas",
|
||||||
|
"description": "Provides a simple API for authenticating users against a CAS server",
|
||||||
|
"keywords": ["cas", "jasig", "apereo"],
|
||||||
|
"homepage": "https://wiki.jasig.org/display/CASC/phpCAS",
|
||||||
|
"type": "library",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"authors": [
|
||||||
|
{"name": "Joachim Fritschi", "homepage": "https://wiki.jasig.org/display/~fritschi"},
|
||||||
|
{"name": "Adam Franco", "homepage": "https://wiki.jasig.org/display/~adamfranco"}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.4.0",
|
||||||
|
"ext-curl": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "~3.7.10"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"classmap": [
|
||||||
|
"source/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.3.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2015
phpCAS-1.3.6/source/CAS.php
Normal file
2015
phpCAS-1.3.6/source/CAS.php
Normal file
File diff suppressed because it is too large
Load diff
111
phpCAS-1.3.6/source/CAS/AuthenticationException.php
Normal file
111
phpCAS-1.3.6/source/CAS/AuthenticationException.php
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/AuthenticationException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface defines methods that allow proxy-authenticated service handlers
|
||||||
|
* to interact with phpCAS.
|
||||||
|
*
|
||||||
|
* Proxy service handlers must implement this interface as well as call
|
||||||
|
* phpCAS::initializeProxiedService($this) at some point in their implementation.
|
||||||
|
*
|
||||||
|
* While not required, proxy-authenticated service handlers are encouraged to
|
||||||
|
* implement the CAS_ProxiedService_Testable interface to facilitate unit testing.
|
||||||
|
*
|
||||||
|
* @class CAS_AuthenticationException
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CAS_AuthenticationException
|
||||||
|
extends RuntimeException
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is used to print the HTML output when the user was not
|
||||||
|
* authenticated.
|
||||||
|
*
|
||||||
|
* @param CAS_Client $client phpcas client
|
||||||
|
* @param string $failure the failure that occured
|
||||||
|
* @param string $cas_url the URL the CAS server was asked for
|
||||||
|
* @param bool $no_response the response from the CAS server (other
|
||||||
|
* parameters are ignored if TRUE)
|
||||||
|
* @param bool $bad_response bad response from the CAS server ($err_code
|
||||||
|
* and $err_msg ignored if TRUE)
|
||||||
|
* @param string $cas_response the response of the CAS server
|
||||||
|
* @param int $err_code the error code given by the CAS server
|
||||||
|
* @param string $err_msg the error message given by the CAS server
|
||||||
|
*/
|
||||||
|
public function __construct($client,$failure,$cas_url,$no_response,
|
||||||
|
$bad_response='',$cas_response='',$err_code='',$err_msg=''
|
||||||
|
) {
|
||||||
|
$messages = array();
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
$lang = $client->getLangObj();
|
||||||
|
$client->printHTMLHeader($lang->getAuthenticationFailed());
|
||||||
|
printf(
|
||||||
|
$lang->getYouWereNotAuthenticated(),
|
||||||
|
htmlentities($client->getURL()),
|
||||||
|
isset($_SERVER['SERVER_ADMIN']) ? $_SERVER['SERVER_ADMIN']:''
|
||||||
|
);
|
||||||
|
phpCAS::trace($messages[] = 'CAS URL: '.$cas_url);
|
||||||
|
phpCAS::trace($messages[] = 'Authentication failure: '.$failure);
|
||||||
|
if ( $no_response ) {
|
||||||
|
phpCAS::trace($messages[] = 'Reason: no response from the CAS server');
|
||||||
|
} else {
|
||||||
|
if ( $bad_response ) {
|
||||||
|
phpCAS::trace($messages[] = 'Reason: bad response from the CAS server');
|
||||||
|
} else {
|
||||||
|
switch ($client->getServerVersion()) {
|
||||||
|
case CAS_VERSION_1_0:
|
||||||
|
phpCAS::trace($messages[] = 'Reason: CAS error');
|
||||||
|
break;
|
||||||
|
case CAS_VERSION_2_0:
|
||||||
|
case CAS_VERSION_3_0:
|
||||||
|
if ( empty($err_code) ) {
|
||||||
|
phpCAS::trace($messages[] = 'Reason: no CAS error');
|
||||||
|
} else {
|
||||||
|
phpCAS::trace($messages[] = 'Reason: ['.$err_code.'] CAS error: '.$err_msg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
phpCAS::trace($messages[] = 'CAS response: '.$cas_response);
|
||||||
|
}
|
||||||
|
$client->printHTMLFooter();
|
||||||
|
phpCAS::traceExit();
|
||||||
|
|
||||||
|
parent::__construct(implode("\n", $messages));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
90
phpCAS-1.3.6/source/CAS/Autoload.php
Normal file
90
phpCAS-1.3.6/source/CAS/Autoload.php
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autoloader Class
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Autoload.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package SimpleCAS
|
||||||
|
* @author Brett Bieber <brett.bieber@gmail.com>
|
||||||
|
* @copyright 2008 Regents of the University of Nebraska
|
||||||
|
* @license http://www1.unl.edu/wdn/wiki/Software_License BSD License
|
||||||
|
* @link http://code.google.com/p/simplecas/
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autoload a class
|
||||||
|
*
|
||||||
|
* @param string $class Classname to load
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function CAS_autoload($class)
|
||||||
|
{
|
||||||
|
// Static to hold the Include Path to CAS
|
||||||
|
static $include_path;
|
||||||
|
// Check only for CAS classes
|
||||||
|
if (substr($class, 0, 4) !== 'CAS_') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Setup the include path if it's not already set from a previous call
|
||||||
|
if (empty($include_path)) {
|
||||||
|
$include_path = array(dirname(dirname(__FILE__)), dirname(dirname(__FILE__)) . '/../test/' );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Declare local variable to store the expected full path to the file
|
||||||
|
|
||||||
|
foreach ($include_path as $path) {
|
||||||
|
$file_path = $path . '/' . str_replace('_', '/', $class) . '.php';
|
||||||
|
$fp = @fopen($file_path, 'r', true);
|
||||||
|
if ($fp) {
|
||||||
|
fclose($fp);
|
||||||
|
include $file_path;
|
||||||
|
if (!class_exists($class, false) && !interface_exists($class, false)) {
|
||||||
|
die(
|
||||||
|
new Exception(
|
||||||
|
'Class ' . $class . ' was not present in ' .
|
||||||
|
$file_path .
|
||||||
|
' [CAS_autoload]'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$e = new Exception(
|
||||||
|
'Class ' . $class . ' could not be loaded from ' .
|
||||||
|
$file_path . ', file does not exist (Path="'
|
||||||
|
. implode(':', $include_path) .'") [CAS_autoload]'
|
||||||
|
);
|
||||||
|
$trace = $e->getTrace();
|
||||||
|
if (isset($trace[2]) && isset($trace[2]['function'])
|
||||||
|
&& in_array($trace[2]['function'], array('class_exists', 'interface_exists'))
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (isset($trace[1]) && isset($trace[1]['function'])
|
||||||
|
&& in_array($trace[1]['function'], array('class_exists', 'interface_exists'))
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
die ((string) $e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set up __autoload
|
||||||
|
if (!(spl_autoload_functions())
|
||||||
|
|| !in_array('CAS_autoload', spl_autoload_functions())
|
||||||
|
) {
|
||||||
|
spl_autoload_register('CAS_autoload');
|
||||||
|
if (function_exists('__autoload')
|
||||||
|
&& !in_array('__autoload', spl_autoload_functions())
|
||||||
|
) {
|
||||||
|
// __autoload() was being used, but now would be ignored, add
|
||||||
|
// it to the autoload stack
|
||||||
|
spl_autoload_register('__autoload');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
3970
phpCAS-1.3.6/source/CAS/Client.php
Normal file
3970
phpCAS-1.3.6/source/CAS/Client.php
Normal file
File diff suppressed because it is too large
Load diff
385
phpCAS-1.3.6/source/CAS/CookieJar.php
Normal file
385
phpCAS-1.3.6/source/CAS/CookieJar.php
Normal file
|
@ -0,0 +1,385 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/CookieJar.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides access to service cookies and handles parsing of response
|
||||||
|
* headers to pull out cookie values.
|
||||||
|
*
|
||||||
|
* @class CAS_CookieJar
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_CookieJar
|
||||||
|
{
|
||||||
|
|
||||||
|
private $_cookies;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new cookie jar by passing it a reference to an array in which it
|
||||||
|
* should store cookies.
|
||||||
|
*
|
||||||
|
* @param array &$storageArray Array to store cookies
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct (array &$storageArray)
|
||||||
|
{
|
||||||
|
$this->_cookies =& $storageArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store cookies for a web service request.
|
||||||
|
* Cookie storage is based on RFC 2965: http://www.ietf.org/rfc/rfc2965.txt
|
||||||
|
*
|
||||||
|
* @param string $request_url The URL that generated the response headers.
|
||||||
|
* @param array $response_headers An array of the HTTP response header strings.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
public function storeCookies ($request_url, $response_headers)
|
||||||
|
{
|
||||||
|
$urlParts = parse_url($request_url);
|
||||||
|
$defaultDomain = $urlParts['host'];
|
||||||
|
|
||||||
|
$cookies = $this->parseCookieHeaders($response_headers, $defaultDomain);
|
||||||
|
|
||||||
|
// var_dump($cookies);
|
||||||
|
foreach ($cookies as $cookie) {
|
||||||
|
// Enforce the same-origin policy by verifying that the cookie
|
||||||
|
// would match the url that is setting it
|
||||||
|
if (!$this->cookieMatchesTarget($cookie, $urlParts)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// store the cookie
|
||||||
|
$this->storeCookie($cookie);
|
||||||
|
|
||||||
|
phpCAS::trace($cookie['name'].' -> '.$cookie['value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve cookies applicable for a web service request.
|
||||||
|
* Cookie applicability is based on RFC 2965: http://www.ietf.org/rfc/rfc2965.txt
|
||||||
|
*
|
||||||
|
* @param string $request_url The url that the cookies will be for.
|
||||||
|
*
|
||||||
|
* @return array An array containing cookies. E.g. array('name' => 'val');
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
public function getCookies ($request_url)
|
||||||
|
{
|
||||||
|
if (!count($this->_cookies)) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If our request URL can't be parsed, no cookies apply.
|
||||||
|
$target = parse_url($request_url);
|
||||||
|
if ($target === false) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->expireCookies();
|
||||||
|
|
||||||
|
$matching_cookies = array();
|
||||||
|
foreach ($this->_cookies as $key => $cookie) {
|
||||||
|
if ($this->cookieMatchesTarget($cookie, $target)) {
|
||||||
|
$matching_cookies[$cookie['name']] = $cookie['value'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $matching_cookies;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse Cookies without PECL
|
||||||
|
* From the comments in http://php.net/manual/en/function.http-parse-cookie.php
|
||||||
|
*
|
||||||
|
* @param array $header array of header lines.
|
||||||
|
* @param string $defaultDomain The domain to use if none is specified in
|
||||||
|
* the cookie.
|
||||||
|
*
|
||||||
|
* @return array of cookies
|
||||||
|
*/
|
||||||
|
protected function parseCookieHeaders( $header, $defaultDomain )
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
$cookies = array();
|
||||||
|
foreach ( $header as $line ) {
|
||||||
|
if ( preg_match('/^Set-Cookie2?: /i', $line)) {
|
||||||
|
$cookies[] = $this->parseCookieHeader($line, $defaultDomain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
phpCAS::traceEnd($cookies);
|
||||||
|
return $cookies;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a single cookie header line.
|
||||||
|
*
|
||||||
|
* Based on RFC2965 http://www.ietf.org/rfc/rfc2965.txt
|
||||||
|
*
|
||||||
|
* @param string $line The header line.
|
||||||
|
* @param string $defaultDomain The domain to use if none is specified in
|
||||||
|
* the cookie.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function parseCookieHeader ($line, $defaultDomain)
|
||||||
|
{
|
||||||
|
if (!$defaultDomain) {
|
||||||
|
throw new CAS_InvalidArgumentException(
|
||||||
|
'$defaultDomain was not provided.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set our default values
|
||||||
|
$cookie = array(
|
||||||
|
'domain' => $defaultDomain,
|
||||||
|
'path' => '/',
|
||||||
|
'secure' => false,
|
||||||
|
);
|
||||||
|
|
||||||
|
$line = preg_replace('/^Set-Cookie2?: /i', '', trim($line));
|
||||||
|
|
||||||
|
// trim any trailing semicolons.
|
||||||
|
$line = trim($line, ';');
|
||||||
|
|
||||||
|
phpCAS::trace("Cookie Line: $line");
|
||||||
|
|
||||||
|
// This implementation makes the assumption that semicolons will not
|
||||||
|
// be present in quoted attribute values. While attribute values that
|
||||||
|
// contain semicolons are allowed by RFC2965, they are hopefully rare
|
||||||
|
// enough to ignore for our purposes. Most browsers make the same
|
||||||
|
// assumption.
|
||||||
|
$attributeStrings = explode(';', $line);
|
||||||
|
|
||||||
|
foreach ( $attributeStrings as $attributeString ) {
|
||||||
|
// split on the first equals sign and use the rest as value
|
||||||
|
$attributeParts = explode('=', $attributeString, 2);
|
||||||
|
|
||||||
|
$attributeName = trim($attributeParts[0]);
|
||||||
|
$attributeNameLC = strtolower($attributeName);
|
||||||
|
|
||||||
|
if (isset($attributeParts[1])) {
|
||||||
|
$attributeValue = trim($attributeParts[1]);
|
||||||
|
// Values may be quoted strings.
|
||||||
|
if (strpos($attributeValue, '"') === 0) {
|
||||||
|
$attributeValue = trim($attributeValue, '"');
|
||||||
|
// unescape any escaped quotes:
|
||||||
|
$attributeValue = str_replace('\"', '"', $attributeValue);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$attributeValue = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($attributeNameLC) {
|
||||||
|
case 'expires':
|
||||||
|
$cookie['expires'] = strtotime($attributeValue);
|
||||||
|
break;
|
||||||
|
case 'max-age':
|
||||||
|
$cookie['max-age'] = (int)$attributeValue;
|
||||||
|
// Set an expiry time based on the max-age
|
||||||
|
if ($cookie['max-age']) {
|
||||||
|
$cookie['expires'] = time() + $cookie['max-age'];
|
||||||
|
} else {
|
||||||
|
// If max-age is zero, then the cookie should be removed
|
||||||
|
// imediately so set an expiry before now.
|
||||||
|
$cookie['expires'] = time() - 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'secure':
|
||||||
|
$cookie['secure'] = true;
|
||||||
|
break;
|
||||||
|
case 'domain':
|
||||||
|
case 'path':
|
||||||
|
case 'port':
|
||||||
|
case 'version':
|
||||||
|
case 'comment':
|
||||||
|
case 'commenturl':
|
||||||
|
case 'discard':
|
||||||
|
case 'httponly':
|
||||||
|
$cookie[$attributeNameLC] = $attributeValue;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$cookie['name'] = $attributeName;
|
||||||
|
$cookie['value'] = $attributeValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $cookie;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add, update, or remove a cookie.
|
||||||
|
*
|
||||||
|
* @param array $cookie A cookie array as created by parseCookieHeaders()
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @access protected
|
||||||
|
*/
|
||||||
|
protected function storeCookie ($cookie)
|
||||||
|
{
|
||||||
|
// Discard any old versions of this cookie.
|
||||||
|
$this->discardCookie($cookie);
|
||||||
|
$this->_cookies[] = $cookie;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Discard an existing cookie
|
||||||
|
*
|
||||||
|
* @param array $cookie An cookie
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @access protected
|
||||||
|
*/
|
||||||
|
protected function discardCookie ($cookie)
|
||||||
|
{
|
||||||
|
if (!isset($cookie['domain'])
|
||||||
|
|| !isset($cookie['path'])
|
||||||
|
|| !isset($cookie['path'])
|
||||||
|
) {
|
||||||
|
throw new CAS_InvalidArgumentException('Invalid Cookie array passed.');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->_cookies as $key => $old_cookie) {
|
||||||
|
if ( $cookie['domain'] == $old_cookie['domain']
|
||||||
|
&& $cookie['path'] == $old_cookie['path']
|
||||||
|
&& $cookie['name'] == $old_cookie['name']
|
||||||
|
) {
|
||||||
|
unset($this->_cookies[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Go through our stored cookies and remove any that are expired.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @access protected
|
||||||
|
*/
|
||||||
|
protected function expireCookies ()
|
||||||
|
{
|
||||||
|
foreach ($this->_cookies as $key => $cookie) {
|
||||||
|
if (isset($cookie['expires']) && $cookie['expires'] < time()) {
|
||||||
|
unset($this->_cookies[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer true if cookie is applicable to a target.
|
||||||
|
*
|
||||||
|
* @param array $cookie An array of cookie attributes.
|
||||||
|
* @param array $target An array of URL attributes as generated by parse_url().
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
protected function cookieMatchesTarget ($cookie, $target)
|
||||||
|
{
|
||||||
|
if (!is_array($target)) {
|
||||||
|
throw new CAS_InvalidArgumentException(
|
||||||
|
'$target must be an array of URL attributes as generated by parse_url().'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!isset($target['host'])) {
|
||||||
|
throw new CAS_InvalidArgumentException(
|
||||||
|
'$target must be an array of URL attributes as generated by parse_url().'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that the scheme matches
|
||||||
|
if ($cookie['secure'] && $target['scheme'] != 'https') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that the host matches
|
||||||
|
// Match domain and mulit-host cookies
|
||||||
|
if (strpos($cookie['domain'], '.') === 0) {
|
||||||
|
// .host.domain.edu cookies are valid for host.domain.edu
|
||||||
|
if (substr($cookie['domain'], 1) == $target['host']) {
|
||||||
|
// continue with other checks
|
||||||
|
} else {
|
||||||
|
// non-exact host-name matches.
|
||||||
|
// check that the target host a.b.c.edu is within .b.c.edu
|
||||||
|
$pos = strripos($target['host'], $cookie['domain']);
|
||||||
|
if (!$pos) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// verify that the cookie domain is the last part of the host.
|
||||||
|
if ($pos + strlen($cookie['domain']) != strlen($target['host'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// verify that the host name does not contain interior dots as per
|
||||||
|
// RFC 2965 section 3.3.2 Rejecting Cookies
|
||||||
|
// http://www.ietf.org/rfc/rfc2965.txt
|
||||||
|
$hostname = substr($target['host'], 0, $pos);
|
||||||
|
if (strpos($hostname, '.') !== false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If the cookie host doesn't begin with '.',
|
||||||
|
// the host must case-insensitive match exactly
|
||||||
|
if (strcasecmp($target['host'], $cookie['domain']) !== 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that the port matches
|
||||||
|
if (isset($cookie['ports'])
|
||||||
|
&& !in_array($target['port'], $cookie['ports'])
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that the path matches
|
||||||
|
if (strpos($target['path'], $cookie['path']) !== 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
59
phpCAS-1.3.6/source/CAS/Exception.php
Normal file
59
phpCAS-1.3.6/source/CAS/Exception.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Exception.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A root exception interface for all exceptions in phpCAS.
|
||||||
|
*
|
||||||
|
* All exceptions thrown in phpCAS should implement this interface to allow them
|
||||||
|
* to be caught as a category by clients. Each phpCAS exception should extend
|
||||||
|
* an appropriate SPL exception class that best fits its type.
|
||||||
|
*
|
||||||
|
* For example, an InvalidArgumentException in phpCAS should be defined as
|
||||||
|
*
|
||||||
|
* class CAS_InvalidArgumentException
|
||||||
|
* extends InvalidArgumentException
|
||||||
|
* implements CAS_Exception
|
||||||
|
* { }
|
||||||
|
*
|
||||||
|
* This definition allows the CAS_InvalidArgumentException to be caught as either
|
||||||
|
* an InvalidArgumentException or as a CAS_Exception.
|
||||||
|
*
|
||||||
|
* @class CAS_Exception
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
interface CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
86
phpCAS-1.3.6/source/CAS/GracefullTerminationException.php
Normal file
86
phpCAS-1.3.6/source/CAS/GracefullTerminationException.php
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/GracefullTerminationException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An exception for terminatinating execution or to throw for unit testing
|
||||||
|
*
|
||||||
|
* @class CAS_GracefullTerminationException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CAS_GracefullTerminationException
|
||||||
|
extends RuntimeException
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if exceptions should be thrown or if we should just exit.
|
||||||
|
* In production usage we want to just exit cleanly when prompting the user
|
||||||
|
* for a redirect without filling the error logs with uncaught exceptions.
|
||||||
|
* In unit testing scenarios we cannot exit or we won't be able to continue
|
||||||
|
* with our tests.
|
||||||
|
*
|
||||||
|
* @param string $message Message Text
|
||||||
|
* @param string $code Error code
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct ($message = 'Terminate Gracefully', $code = 0)
|
||||||
|
{
|
||||||
|
// Exit cleanly to avoid filling up the logs with uncaught exceptions.
|
||||||
|
if (self::$_exitWhenThrown) {
|
||||||
|
exit;
|
||||||
|
} else {
|
||||||
|
// Throw exceptions to allow unit testing to continue;
|
||||||
|
parent::__construct($message, $code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static $_exitWhenThrown = true;
|
||||||
|
/**
|
||||||
|
* Force phpcas to thow Exceptions instead of calling exit()
|
||||||
|
* Needed for unit testing. Generally shouldn't be used in production due to
|
||||||
|
* an increase in Apache error logging if CAS_GracefulTerminiationExceptions
|
||||||
|
* are not caught and handled.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function throwInsteadOfExiting()
|
||||||
|
{
|
||||||
|
self::$_exitWhenThrown = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
46
phpCAS-1.3.6/source/CAS/InvalidArgumentException.php
Normal file
46
phpCAS-1.3.6/source/CAS/InvalidArgumentException.php
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/InvalidArgumentException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception that denotes invalid arguments were passed.
|
||||||
|
*
|
||||||
|
* @class CAS_InvalidArgumentException
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_InvalidArgumentException
|
||||||
|
extends InvalidArgumentException
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
114
phpCAS-1.3.6/source/CAS/Languages/Catalan.php
Normal file
114
phpCAS-1.3.6/source/CAS/Languages/Catalan.php
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/Catalan.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Iván-Benjamín García Torà <ivaniclixx@gmail.com>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Catalan language class
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_Catalan
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Iván-Benjamín García Torà <ivaniclixx@gmail.com>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @sa @link internalLang Internationalization @endlink
|
||||||
|
* @ingroup internalLang
|
||||||
|
*/
|
||||||
|
class CAS_Languages_Catalan implements CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer()
|
||||||
|
{
|
||||||
|
return 'usant servidor';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted()
|
||||||
|
{
|
||||||
|
return 'Autentificació CAS necessària!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout()
|
||||||
|
{
|
||||||
|
return 'Sortida de CAS necessària!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected()
|
||||||
|
{
|
||||||
|
return 'Ja hauria d\ haver estat redireccionat al servidor CAS. Feu click <a href="%s">aquí</a> per a continuar.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed()
|
||||||
|
{
|
||||||
|
return 'Autentificació CAS fallida!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated()
|
||||||
|
{
|
||||||
|
return '<p>No estàs autentificat.</p><p>Pots tornar a intentar-ho fent click <a href="%s">aquí</a>.</p><p>Si el problema persisteix hauría de contactar amb l\'<a href="mailto:%s">administrador d\'aquest llocc</a>.</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable()
|
||||||
|
{
|
||||||
|
return 'El servei `<b>%s</b>\' no està disponible (<b>%s</b>).';
|
||||||
|
}
|
||||||
|
}
|
114
phpCAS-1.3.6/source/CAS/Languages/ChineseSimplified.php
Normal file
114
phpCAS-1.3.6/source/CAS/Languages/ChineseSimplified.php
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/ChineseSimplified.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>, Phy25 <caslang@phy25.com>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chinese Simplified language class
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_ChineseSimplified
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>, Phy25 <caslang@phy25.com>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @sa @link internalLang Internationalization @endlink
|
||||||
|
* @ingroup internalLang
|
||||||
|
*/
|
||||||
|
class CAS_Languages_ChineseSimplified implements CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer()
|
||||||
|
{
|
||||||
|
return '连接的服务器';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted()
|
||||||
|
{
|
||||||
|
return '请进行 CAS 认证!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout()
|
||||||
|
{
|
||||||
|
return '请进行 CAS 登出!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected()
|
||||||
|
{
|
||||||
|
return '你正被重定向到 CAS 服务器。<a href="%s">点击这里</a>继续。';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed()
|
||||||
|
{
|
||||||
|
return 'CAS 认证失败!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated()
|
||||||
|
{
|
||||||
|
return '<p>你没有成功登录。</p><p>你可以<a href="%s">点击这里重新登录</a>。</p><p>如果问题依然存在,请<a href="mailto:%s">联系本站管理员</a>。</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable()
|
||||||
|
{
|
||||||
|
return '服务器 <b>%s</b> 不可用(<b>%s</b>)。';
|
||||||
|
}
|
||||||
|
}
|
114
phpCAS-1.3.6/source/CAS/Languages/English.php
Normal file
114
phpCAS-1.3.6/source/CAS/Languages/English.php
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/English.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* English language class
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_English
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @sa @link internalLang Internationalization @endlink
|
||||||
|
* @ingroup internalLang
|
||||||
|
*/
|
||||||
|
class CAS_Languages_English implements CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer()
|
||||||
|
{
|
||||||
|
return 'using server';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted()
|
||||||
|
{
|
||||||
|
return 'CAS Authentication wanted!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout()
|
||||||
|
{
|
||||||
|
return 'CAS logout wanted!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected()
|
||||||
|
{
|
||||||
|
return 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed()
|
||||||
|
{
|
||||||
|
return 'CAS Authentication failed!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated()
|
||||||
|
{
|
||||||
|
return '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable()
|
||||||
|
{
|
||||||
|
return 'The service `<b>%s</b>\' is not available (<b>%s</b>).';
|
||||||
|
}
|
||||||
|
}
|
116
phpCAS-1.3.6/source/CAS/Languages/French.php
Normal file
116
phpCAS-1.3.6/source/CAS/Languages/French.php
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/French.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* French language class
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_French
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @sa @link internalLang Internationalization @endlink
|
||||||
|
* @ingroup internalLang
|
||||||
|
*/
|
||||||
|
class CAS_Languages_French implements CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer()
|
||||||
|
{
|
||||||
|
return 'utilisant le serveur';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted()
|
||||||
|
{
|
||||||
|
return 'Authentication CAS nécessaire !';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout()
|
||||||
|
{
|
||||||
|
return 'Déconnexion demandée !';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected()
|
||||||
|
{
|
||||||
|
return 'Vous auriez du etre redirigé(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed()
|
||||||
|
{
|
||||||
|
return 'Authentification CAS infructueuse !';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated()
|
||||||
|
{
|
||||||
|
return '<p>Vous n\'avez pas été authentifié(e).</p><p>Vous pouvez soumettre votre requete à nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le problème persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable()
|
||||||
|
{
|
||||||
|
return 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
116
phpCAS-1.3.6/source/CAS/Languages/German.php
Normal file
116
phpCAS-1.3.6/source/CAS/Languages/German.php
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/German.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Henrik Genssen <hg@mediafactory.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* German language class
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_German
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Henrik Genssen <hg@mediafactory.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @sa @link internalLang Internationalization @endlink
|
||||||
|
* @ingroup internalLang
|
||||||
|
*/
|
||||||
|
class CAS_Languages_German implements CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer()
|
||||||
|
{
|
||||||
|
return 'via Server';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted()
|
||||||
|
{
|
||||||
|
return 'CAS Authentifizierung erforderlich!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout()
|
||||||
|
{
|
||||||
|
return 'CAS Abmeldung!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected()
|
||||||
|
{
|
||||||
|
return 'eigentlich häten Sie zum CAS Server weitergeleitet werden sollen. Drücken Sie <a href="%s">hier</a> um fortzufahren.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed()
|
||||||
|
{
|
||||||
|
return 'CAS Anmeldung fehlgeschlagen!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated()
|
||||||
|
{
|
||||||
|
return '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontaktieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable()
|
||||||
|
{
|
||||||
|
return 'Der Dienst `<b>%s</b>\' ist nicht verfügbar (<b>%s</b>).';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
115
phpCAS-1.3.6/source/CAS/Languages/Greek.php
Normal file
115
phpCAS-1.3.6/source/CAS/Languages/Greek.php
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/Greek.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Vangelis Haniotakis <haniotak@ucnet.uoc.gr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Greek language class
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_Greek
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Vangelis Haniotakis <haniotak@ucnet.uoc.gr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @sa @link internalLang Internationalization @endlink
|
||||||
|
* @ingroup internalLang
|
||||||
|
*/
|
||||||
|
class CAS_Languages_Greek implements CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer()
|
||||||
|
{
|
||||||
|
return 'χρησιμοποιείται ο εξυπηρετητής';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted()
|
||||||
|
{
|
||||||
|
return 'Απαιτείται η ταυτοποίηση CAS!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout()
|
||||||
|
{
|
||||||
|
return 'Απαιτείται η αποσύνδεση από CAS!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected()
|
||||||
|
{
|
||||||
|
return 'Θα έπρεπε να είχατε ανακατευθυνθεί στον εξυπηρετητή CAS. Κάντε κλίκ <a href="%s">εδώ</a> για να συνεχίσετε.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed()
|
||||||
|
{
|
||||||
|
return 'Η ταυτοποίηση CAS απέτυχε!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated()
|
||||||
|
{
|
||||||
|
return '<p>Δεν ταυτοποιηθήκατε.</p><p>Μπορείτε να ξαναπροσπαθήσετε, κάνοντας κλίκ <a href="%s">εδώ</a>.</p><p>Εαν το πρόβλημα επιμείνει, ελάτε σε επαφή με τον <a href="mailto:%s">διαχειριστή</a>.</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable()
|
||||||
|
{
|
||||||
|
return 'Η υπηρεσία `<b>%s</b>\' δεν είναι διαθέσιμη (<b>%s</b>).';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
113
phpCAS-1.3.6/source/CAS/Languages/Japanese.php
Normal file
113
phpCAS-1.3.6/source/CAS/Languages/Japanese.php
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/Japanese.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author fnorif <fnorif@yahoo.co.jp>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Japanese language class. Now Encoding is UTF-8.
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_Japanese
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author fnorif <fnorif@yahoo.co.jp>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
class CAS_Languages_Japanese implements CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer()
|
||||||
|
{
|
||||||
|
return 'サーバーを使っています。';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted()
|
||||||
|
{
|
||||||
|
return 'CASによる認証を行います。';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout()
|
||||||
|
{
|
||||||
|
return 'CASからログアウトします!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected()
|
||||||
|
{
|
||||||
|
return 'CASサーバに行く必要があります。自動的に転送されない場合は <a href="%s">こちら</a> をクリックして続行します。';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed()
|
||||||
|
{
|
||||||
|
return 'CASによる認証に失敗しました。';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated()
|
||||||
|
{
|
||||||
|
return '<p>認証できませんでした。</p><p>もう一度リクエストを送信する場合は<a href="%s">こちら</a>をクリック。</p><p>問題が解決しない場合は <a href="mailto:%s">このサイトの管理者</a>に問い合わせてください。</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable()
|
||||||
|
{
|
||||||
|
return 'サービス `<b>%s</b>\' は利用できません (<b>%s</b>)。';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
96
phpCAS-1.3.6/source/CAS/Languages/LanguageInterface.php
Normal file
96
phpCAS-1.3.6/source/CAS/Languages/LanguageInterface.php
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/LanguageInterface.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language Interface class for all internationalization files
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_LanguageInterface
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @sa @link internalLang Internationalization @endlink
|
||||||
|
* @ingroup internalLang
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable();
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
117
phpCAS-1.3.6/source/CAS/Languages/Spanish.php
Normal file
117
phpCAS-1.3.6/source/CAS/Languages/Spanish.php
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Language/Spanish.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Iván-Benjamín García Torà <ivaniclixx@gmail.com>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spanish language class
|
||||||
|
*
|
||||||
|
* @class CAS_Languages_Spanish
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Iván-Benjamín García Torà <ivaniclixx@gmail.com>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
|
||||||
|
* @sa @link internalLang Internationalization @endlink
|
||||||
|
* @ingroup internalLang
|
||||||
|
*/
|
||||||
|
class CAS_Languages_Spanish implements CAS_Languages_LanguageInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the using server string
|
||||||
|
*
|
||||||
|
* @return string using server
|
||||||
|
*/
|
||||||
|
public function getUsingServer()
|
||||||
|
{
|
||||||
|
return 'usando servidor';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication wanted string
|
||||||
|
*
|
||||||
|
* @return string authentication wanted
|
||||||
|
*/
|
||||||
|
public function getAuthenticationWanted()
|
||||||
|
{
|
||||||
|
return '¡Autentificación CAS necesaria!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get logout string
|
||||||
|
*
|
||||||
|
* @return string logout
|
||||||
|
*/
|
||||||
|
public function getLogout()
|
||||||
|
{
|
||||||
|
return '¡Salida CAS necesaria!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the should have been redirected string
|
||||||
|
*
|
||||||
|
* @return string should habe been redirected
|
||||||
|
*/
|
||||||
|
public function getShouldHaveBeenRedirected()
|
||||||
|
{
|
||||||
|
return 'Ya debería haber sido redireccionado al servidor CAS. Haga click <a href="%s">aquí</a> para continuar.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authentication failed string
|
||||||
|
*
|
||||||
|
* @return string authentication failed
|
||||||
|
*/
|
||||||
|
public function getAuthenticationFailed()
|
||||||
|
{
|
||||||
|
return '¡Autentificación CAS fallida!';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the your were not authenticated string
|
||||||
|
*
|
||||||
|
* @return string not authenticated
|
||||||
|
*/
|
||||||
|
public function getYouWereNotAuthenticated()
|
||||||
|
{
|
||||||
|
return '<p>No estás autentificado.</p><p>Puedes volver a intentarlo haciendo click <a href="%s">aquí</a>.</p><p>Si el problema persiste debería contactar con el <a href="mailto:%s">administrador de este sitio</a>.</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the service unavailable string
|
||||||
|
*
|
||||||
|
* @return string service unavailable
|
||||||
|
*/
|
||||||
|
public function getServiceUnavailable()
|
||||||
|
{
|
||||||
|
return 'El servicio `<b>%s</b>\' no está disponible (<b>%s</b>).';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/OutOfSequenceBeforeAuthenticationCallException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines Exceptions that should be thrown when the sequence of
|
||||||
|
* operations is invalid. In this case it should be thrown when an
|
||||||
|
* authentication call has not yet happened.
|
||||||
|
*
|
||||||
|
* @class CAS_OutOfSequenceBeforeAuthenticationCallException
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_OutOfSequenceBeforeAuthenticationCallException
|
||||||
|
extends CAS_OutOfSequenceException
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Return standard error meessage
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct ()
|
||||||
|
{
|
||||||
|
parent::__construct('An authentication call hasn\'t happened yet.');
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/OutOfSequenceBeforeClientException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines Exceptions that should be thrown when the sequence of
|
||||||
|
* operations is invalid. In this case it should be thrown when the client() or
|
||||||
|
* proxy() call has not yet happened and no client or proxy object exists.
|
||||||
|
*
|
||||||
|
* @class CAS_OutOfSequenceBeforeClientException
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_OutOfSequenceBeforeClientException
|
||||||
|
extends CAS_OutOfSequenceException
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Return standard error message
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct ()
|
||||||
|
{
|
||||||
|
parent::__construct(
|
||||||
|
'this method cannot be called before phpCAS::client() or phpCAS::proxy()'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/OutOfSequenceBeforeProxyException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines Exceptions that should be thrown when the sequence of
|
||||||
|
* operations is invalid. In this case it should be thrown when the proxy() call
|
||||||
|
* has not yet happened and no proxy object exists.
|
||||||
|
*
|
||||||
|
* @class CAS_OutOfSequenceBeforeProxyException
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Joachim Fritschi <jfritschi@freenet.de>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_OutOfSequenceBeforeProxyException
|
||||||
|
extends CAS_OutOfSequenceException
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return standard error message
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct ()
|
||||||
|
{
|
||||||
|
parent::__construct(
|
||||||
|
'this method cannot be called before phpCAS::proxy()'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
49
phpCAS-1.3.6/source/CAS/OutOfSequenceException.php
Normal file
49
phpCAS-1.3.6/source/CAS/OutOfSequenceException.php
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/OutOfSequenceException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines Exceptions that should be thrown when the sequence of
|
||||||
|
* operations is invalid. Examples are:
|
||||||
|
* - Requesting the response before executing a request.
|
||||||
|
* - Changing the URL of a request after executing the request.
|
||||||
|
*
|
||||||
|
* @class CAS_OutOfSequenceException
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_OutOfSequenceException
|
||||||
|
extends BadMethodCallException
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
222
phpCAS-1.3.6/source/CAS/PGTStorage/AbstractStorage.php
Normal file
222
phpCAS-1.3.6/source/CAS/PGTStorage/AbstractStorage.php
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/PGTStorage/AbstractStorage.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic class for PGT storage
|
||||||
|
* The CAS_PGTStorage_AbstractStorage class is a generic class for PGT storage.
|
||||||
|
* This class should not be instanciated itself but inherited by specific PGT
|
||||||
|
* storage classes.
|
||||||
|
*
|
||||||
|
* @class CAS_PGTStorage_AbstractStorage
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @ingroup internalPGTStorage
|
||||||
|
*/
|
||||||
|
|
||||||
|
abstract class CAS_PGTStorage_AbstractStorage
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @addtogroup internalPGTStorage
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// CONSTRUCTOR
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The constructor of the class, should be called only by inherited classes.
|
||||||
|
*
|
||||||
|
* @param CAS_Client $cas_parent the CAS _client instance that creates the
|
||||||
|
* current object.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
function __construct($cas_parent)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
if ( !$cas_parent->isProxy() ) {
|
||||||
|
phpCAS::error(
|
||||||
|
'defining PGT storage makes no sense when not using a CAS proxy'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// DEBUGGING
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This virtual method returns an informational string giving the type of storage
|
||||||
|
* used by the object (used for debugging purposes).
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
function getStorageType()
|
||||||
|
{
|
||||||
|
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This virtual method returns an informational string giving informations on the
|
||||||
|
* parameters of the storage.(used for debugging purposes).
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
function getStorageInfo()
|
||||||
|
{
|
||||||
|
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// ERROR HANDLING
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* string used to store an error message. Written by
|
||||||
|
* PGTStorage::setErrorMessage(), read by PGTStorage::getErrorMessage().
|
||||||
|
*
|
||||||
|
* @hideinitializer
|
||||||
|
* @deprecated not used.
|
||||||
|
*/
|
||||||
|
var $_error_message=false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method sets en error message, which can be read later by
|
||||||
|
* PGTStorage::getErrorMessage().
|
||||||
|
*
|
||||||
|
* @param string $error_message an error message
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @deprecated not used.
|
||||||
|
*/
|
||||||
|
function setErrorMessage($error_message)
|
||||||
|
{
|
||||||
|
$this->_error_message = $error_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns an error message set by PGTStorage::setErrorMessage().
|
||||||
|
*
|
||||||
|
* @return an error message when set by PGTStorage::setErrorMessage(), FALSE
|
||||||
|
* otherwise.
|
||||||
|
*
|
||||||
|
* @deprecated not used.
|
||||||
|
*/
|
||||||
|
function getErrorMessage()
|
||||||
|
{
|
||||||
|
return $this->_error_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// INITIALIZATION
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a boolean telling if the storage has already been initialized. Written by
|
||||||
|
* PGTStorage::init(), read by PGTStorage::isInitialized().
|
||||||
|
*
|
||||||
|
* @hideinitializer
|
||||||
|
*/
|
||||||
|
var $_initialized = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method tells if the storage has already been intialized.
|
||||||
|
*
|
||||||
|
* @return a boolean
|
||||||
|
*
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
function isInitialized()
|
||||||
|
{
|
||||||
|
return $this->_initialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This virtual method initializes the object.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function init()
|
||||||
|
{
|
||||||
|
$this->_initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// PGT I/O
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This virtual method stores a PGT and its corresponding PGT Iuo.
|
||||||
|
*
|
||||||
|
* @param string $pgt the PGT
|
||||||
|
* @param string $pgt_iou the PGT iou
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @note Should never be called.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function write($pgt,$pgt_iou)
|
||||||
|
{
|
||||||
|
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This virtual method reads a PGT corresponding to a PGT Iou and deletes
|
||||||
|
* the corresponding storage entry.
|
||||||
|
*
|
||||||
|
* @param string $pgt_iou the PGT iou
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @note Should never be called.
|
||||||
|
*/
|
||||||
|
function read($pgt_iou)
|
||||||
|
{
|
||||||
|
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
440
phpCAS-1.3.6/source/CAS/PGTStorage/Db.php
Normal file
440
phpCAS-1.3.6/source/CAS/PGTStorage/Db.php
Normal file
|
@ -0,0 +1,440 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/PGTStorage/Db.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Daniel Frett <daniel.frett@gmail.com>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('CAS_PGT_STORAGE_DB_DEFAULT_TABLE', 'cas_pgts');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic class for PGT database storage
|
||||||
|
* The CAS_PGTStorage_Db class is a class for PGT database storage.
|
||||||
|
*
|
||||||
|
* @class CAS_PGTStorage_Db
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Daniel Frett <daniel.frett@gmail.com>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
* @ingroup internalPGTStorageDb
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CAS_PGTStorage_Db extends CAS_PGTStorage_AbstractStorage
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @addtogroup internalCAS_PGTStorageDb
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the PDO object to use for database interactions
|
||||||
|
*/
|
||||||
|
private $_pdo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the PDO object to use for database interactions.
|
||||||
|
*
|
||||||
|
* @return the PDO object
|
||||||
|
*/
|
||||||
|
private function _getPdo()
|
||||||
|
{
|
||||||
|
return $this->_pdo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* database connection options to use when creating a new PDO object
|
||||||
|
*/
|
||||||
|
private $_dsn;
|
||||||
|
private $_username;
|
||||||
|
private $_password;
|
||||||
|
private $_table_options;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the table to use for storing/retrieving pgt's
|
||||||
|
*/
|
||||||
|
private $_table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the table to use when storing/retrieving PGT's
|
||||||
|
*
|
||||||
|
* @return the name of the pgt storage table.
|
||||||
|
*/
|
||||||
|
private function _getTable()
|
||||||
|
{
|
||||||
|
return $this->_table;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// DEBUGGING
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns an informational string giving the type of storage
|
||||||
|
* used by the object (used for debugging purposes).
|
||||||
|
*
|
||||||
|
* @return an informational string.
|
||||||
|
*/
|
||||||
|
public function getStorageType()
|
||||||
|
{
|
||||||
|
return "db";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns an informational string giving informations on the
|
||||||
|
* parameters of the storage.(used for debugging purposes).
|
||||||
|
*
|
||||||
|
* @return an informational string.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
public function getStorageInfo()
|
||||||
|
{
|
||||||
|
return 'table=`'.$this->_getTable().'\'';
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// CONSTRUCTOR
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class constructor.
|
||||||
|
*
|
||||||
|
* @param CAS_Client $cas_parent the CAS_Client instance that creates
|
||||||
|
* the object.
|
||||||
|
* @param string $dsn_or_pdo a dsn string to use for creating a PDO
|
||||||
|
* object or a PDO object
|
||||||
|
* @param string $username the username to use when connecting to
|
||||||
|
* the database
|
||||||
|
* @param string $password the password to use when connecting to
|
||||||
|
* the database
|
||||||
|
* @param string $table the table to use for storing and
|
||||||
|
* retrieving PGT's
|
||||||
|
* @param string $driver_options any driver options to use when
|
||||||
|
* connecting to the database
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
$cas_parent, $dsn_or_pdo, $username='', $password='', $table='',
|
||||||
|
$driver_options=null
|
||||||
|
) {
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
// call the ancestor's constructor
|
||||||
|
parent::__construct($cas_parent);
|
||||||
|
|
||||||
|
// set default values
|
||||||
|
if ( empty($table) ) {
|
||||||
|
$table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
|
||||||
|
}
|
||||||
|
if ( !is_array($driver_options) ) {
|
||||||
|
$driver_options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
// store the specified parameters
|
||||||
|
if ($dsn_or_pdo instanceof PDO) {
|
||||||
|
$this->_pdo = $dsn_or_pdo;
|
||||||
|
} else {
|
||||||
|
$this->_dsn = $dsn_or_pdo;
|
||||||
|
$this->_username = $username;
|
||||||
|
$this->_password = $password;
|
||||||
|
$this->_driver_options = $driver_options;
|
||||||
|
}
|
||||||
|
|
||||||
|
// store the table name
|
||||||
|
$this->_table = $table;
|
||||||
|
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// INITIALIZATION
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is used to initialize the storage. Halts on error.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
// if the storage has already been initialized, return immediatly
|
||||||
|
if ($this->isInitialized()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize the base object
|
||||||
|
parent::init();
|
||||||
|
|
||||||
|
// create the PDO object if it doesn't exist already
|
||||||
|
if (!($this->_pdo instanceof PDO)) {
|
||||||
|
try {
|
||||||
|
$this->_pdo = new PDO(
|
||||||
|
$this->_dsn, $this->_username, $this->_password,
|
||||||
|
$this->_driver_options
|
||||||
|
);
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
phpCAS::error('Database connection error: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// PDO database interaction
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* attribute that stores the previous error mode for the PDO handle while
|
||||||
|
* processing a transaction
|
||||||
|
*/
|
||||||
|
private $_errMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method will enable the Exception error mode on the PDO object
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function _setErrorMode()
|
||||||
|
{
|
||||||
|
// get PDO object and enable exception error mode
|
||||||
|
$pdo = $this->_getPdo();
|
||||||
|
$this->_errMode = $pdo->getAttribute(PDO::ATTR_ERRMODE);
|
||||||
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this method will reset the error mode on the PDO object
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function _resetErrorMode()
|
||||||
|
{
|
||||||
|
// get PDO object and reset the error mode to what it was originally
|
||||||
|
$pdo = $this->_getPdo();
|
||||||
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, $this->_errMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// database queries
|
||||||
|
// ########################################################################
|
||||||
|
// these queries are potentially unsafe because the person using this library
|
||||||
|
// can set the table to use, but there is no reliable way to escape SQL
|
||||||
|
// fieldnames in PDO yet
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the query used to create a pgt storage table
|
||||||
|
*
|
||||||
|
* @return the create table SQL, no bind params in query
|
||||||
|
*/
|
||||||
|
protected function createTableSql()
|
||||||
|
{
|
||||||
|
return 'CREATE TABLE ' . $this->_getTable()
|
||||||
|
. ' (pgt_iou VARCHAR(255) NOT NULL PRIMARY KEY, pgt VARCHAR(255) NOT NULL)';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the query used to store a pgt
|
||||||
|
*
|
||||||
|
* @return the store PGT SQL, :pgt and :pgt_iou are the bind params contained
|
||||||
|
* in the query
|
||||||
|
*/
|
||||||
|
protected function storePgtSql()
|
||||||
|
{
|
||||||
|
return 'INSERT INTO ' . $this->_getTable()
|
||||||
|
. ' (pgt_iou, pgt) VALUES (:pgt_iou, :pgt)';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the query used to retrieve a pgt. the first column
|
||||||
|
* of the first row should contain the pgt
|
||||||
|
*
|
||||||
|
* @return the retrieve PGT SQL, :pgt_iou is the only bind param contained
|
||||||
|
* in the query
|
||||||
|
*/
|
||||||
|
protected function retrievePgtSql()
|
||||||
|
{
|
||||||
|
return 'SELECT pgt FROM ' . $this->_getTable() . ' WHERE pgt_iou = :pgt_iou';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the query used to delete a pgt.
|
||||||
|
*
|
||||||
|
* @return the delete PGT SQL, :pgt_iou is the only bind param contained in
|
||||||
|
* the query
|
||||||
|
*/
|
||||||
|
protected function deletePgtSql()
|
||||||
|
{
|
||||||
|
return 'DELETE FROM ' . $this->_getTable() . ' WHERE pgt_iou = :pgt_iou';
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// PGT I/O
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method creates the database table used to store pgt's and pgtiou's
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function createTable()
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
|
||||||
|
// initialize this PGTStorage object if it hasn't been initialized yet
|
||||||
|
if ( !$this->isInitialized() ) {
|
||||||
|
$this->init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize the PDO object for this method
|
||||||
|
$pdo = $this->_getPdo();
|
||||||
|
$this->_setErrorMode();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$pdo->beginTransaction();
|
||||||
|
|
||||||
|
$query = $pdo->query($this->createTableSQL());
|
||||||
|
$query->closeCursor();
|
||||||
|
|
||||||
|
$pdo->commit();
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
// attempt rolling back the transaction before throwing a phpCAS error
|
||||||
|
try {
|
||||||
|
$pdo->rollBack();
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
}
|
||||||
|
phpCAS::error('error creating PGT storage table: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset the PDO object
|
||||||
|
$this->_resetErrorMode();
|
||||||
|
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method stores a PGT and its corresponding PGT Iou in the database.
|
||||||
|
* Echoes a warning on error.
|
||||||
|
*
|
||||||
|
* @param string $pgt the PGT
|
||||||
|
* @param string $pgt_iou the PGT iou
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function write($pgt, $pgt_iou)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
|
||||||
|
// initialize the PDO object for this method
|
||||||
|
$pdo = $this->_getPdo();
|
||||||
|
$this->_setErrorMode();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$pdo->beginTransaction();
|
||||||
|
|
||||||
|
$query = $pdo->prepare($this->storePgtSql());
|
||||||
|
$query->bindValue(':pgt', $pgt, PDO::PARAM_STR);
|
||||||
|
$query->bindValue(':pgt_iou', $pgt_iou, PDO::PARAM_STR);
|
||||||
|
$query->execute();
|
||||||
|
$query->closeCursor();
|
||||||
|
|
||||||
|
$pdo->commit();
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
// attempt rolling back the transaction before throwing a phpCAS error
|
||||||
|
try {
|
||||||
|
$pdo->rollBack();
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
}
|
||||||
|
phpCAS::error('error writing PGT to database: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset the PDO object
|
||||||
|
$this->_resetErrorMode();
|
||||||
|
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method reads a PGT corresponding to a PGT Iou and deletes the
|
||||||
|
* corresponding db entry.
|
||||||
|
*
|
||||||
|
* @param string $pgt_iou the PGT iou
|
||||||
|
*
|
||||||
|
* @return the corresponding PGT, or FALSE on error
|
||||||
|
*/
|
||||||
|
public function read($pgt_iou)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
$pgt = false;
|
||||||
|
|
||||||
|
// initialize the PDO object for this method
|
||||||
|
$pdo = $this->_getPdo();
|
||||||
|
$this->_setErrorMode();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$pdo->beginTransaction();
|
||||||
|
|
||||||
|
// fetch the pgt for the specified pgt_iou
|
||||||
|
$query = $pdo->prepare($this->retrievePgtSql());
|
||||||
|
$query->bindValue(':pgt_iou', $pgt_iou, PDO::PARAM_STR);
|
||||||
|
$query->execute();
|
||||||
|
$pgt = $query->fetchColumn(0);
|
||||||
|
$query->closeCursor();
|
||||||
|
|
||||||
|
// delete the specified pgt_iou from the database
|
||||||
|
$query = $pdo->prepare($this->deletePgtSql());
|
||||||
|
$query->bindValue(':pgt_iou', $pgt_iou, PDO::PARAM_STR);
|
||||||
|
$query->execute();
|
||||||
|
$query->closeCursor();
|
||||||
|
|
||||||
|
$pdo->commit();
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
// attempt rolling back the transaction before throwing a phpCAS error
|
||||||
|
try {
|
||||||
|
$pdo->rollBack();
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
}
|
||||||
|
phpCAS::trace('error reading PGT from database: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset the PDO object
|
||||||
|
$this->_resetErrorMode();
|
||||||
|
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
return $pgt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
261
phpCAS-1.3.6/source/CAS/PGTStorage/File.php
Normal file
261
phpCAS-1.3.6/source/CAS/PGTStorage/File.php
Normal file
|
@ -0,0 +1,261 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/PGTStorage/AbstractStorage.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The CAS_PGTStorage_File class is a class for PGT file storage. An instance of
|
||||||
|
* this class is returned by CAS_Client::SetPGTStorageFile().
|
||||||
|
*
|
||||||
|
* @class CAS_PGTStorage_File
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Pascal Aubry <pascal.aubry@univ-rennes1.fr>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @ingroup internalPGTStorageFile
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CAS_PGTStorage_File extends CAS_PGTStorage_AbstractStorage
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @addtogroup internalPGTStorageFile
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a string telling where PGT's should be stored on the filesystem. Written by
|
||||||
|
* PGTStorageFile::PGTStorageFile(), read by getPath().
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
var $_path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the name of the directory where PGT's should be stored
|
||||||
|
* on the filesystem.
|
||||||
|
*
|
||||||
|
* @return the name of a directory (with leading and trailing '/')
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function getPath()
|
||||||
|
{
|
||||||
|
return $this->_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// DEBUGGING
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns an informational string giving the type of storage
|
||||||
|
* used by the object (used for debugging purposes).
|
||||||
|
*
|
||||||
|
* @return an informational string.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
function getStorageType()
|
||||||
|
{
|
||||||
|
return "file";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns an informational string giving informations on the
|
||||||
|
* parameters of the storage.(used for debugging purposes).
|
||||||
|
*
|
||||||
|
* @return an informational string.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
function getStorageInfo()
|
||||||
|
{
|
||||||
|
return 'path=`'.$this->getPath().'\'';
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// CONSTRUCTOR
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class constructor, called by CAS_Client::SetPGTStorageFile().
|
||||||
|
*
|
||||||
|
* @param CAS_Client $cas_parent the CAS_Client instance that creates the object.
|
||||||
|
* @param string $path the path where the PGT's should be stored
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
function __construct($cas_parent,$path)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
// call the ancestor's constructor
|
||||||
|
parent::__construct($cas_parent);
|
||||||
|
|
||||||
|
if (empty($path)) {
|
||||||
|
$path = CAS_PGT_STORAGE_FILE_DEFAULT_PATH;
|
||||||
|
}
|
||||||
|
// check that the path is an absolute path
|
||||||
|
if (getenv("OS")=="Windows_NT" || strtoupper(substr(PHP_OS,0,3)) == 'WIN') {
|
||||||
|
|
||||||
|
if (!preg_match('`^[a-zA-Z]:`', $path)) {
|
||||||
|
phpCAS::error('an absolute path is needed for PGT storage to file');
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if ( $path[0] != '/' ) {
|
||||||
|
phpCAS::error('an absolute path is needed for PGT storage to file');
|
||||||
|
}
|
||||||
|
|
||||||
|
// store the path (with a leading and trailing '/')
|
||||||
|
$path = preg_replace('|[/]*$|', '/', $path);
|
||||||
|
$path = preg_replace('|^[/]*|', '/', $path);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_path = $path;
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// INITIALIZATION
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is used to initialize the storage. Halts on error.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
function init()
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
// if the storage has already been initialized, return immediatly
|
||||||
|
if ($this->isInitialized()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// call the ancestor's method (mark as initialized)
|
||||||
|
parent::init();
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ########################################################################
|
||||||
|
// PGT I/O
|
||||||
|
// ########################################################################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the filename corresponding to a PGT Iou.
|
||||||
|
*
|
||||||
|
* @param string $pgt_iou the PGT iou.
|
||||||
|
*
|
||||||
|
* @return a filename
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function getPGTIouFilename($pgt_iou)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
$filename = $this->getPath()."phpcas-".hash("sha256", $pgt_iou);
|
||||||
|
// $filename = $this->getPath().$pgt_iou.'.plain';
|
||||||
|
phpCAS::trace("Sha256 filename:" . $filename);
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
return $filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method stores a PGT and its corresponding PGT Iou into a file. Echoes a
|
||||||
|
* warning on error.
|
||||||
|
*
|
||||||
|
* @param string $pgt the PGT
|
||||||
|
* @param string $pgt_iou the PGT iou
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
function write($pgt,$pgt_iou)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
$fname = $this->getPGTIouFilename($pgt_iou);
|
||||||
|
if (!file_exists($fname)) {
|
||||||
|
touch($fname);
|
||||||
|
// Chmod will fail on windows
|
||||||
|
@chmod($fname, 0600);
|
||||||
|
if ($f=fopen($fname, "w")) {
|
||||||
|
if (fputs($f, $pgt) === false) {
|
||||||
|
phpCAS::error('could not write PGT to `'.$fname.'\'');
|
||||||
|
}
|
||||||
|
phpCAS::trace('Successful write of PGT to `'.$fname.'\'');
|
||||||
|
fclose($f);
|
||||||
|
} else {
|
||||||
|
phpCAS::error('could not open `'.$fname.'\'');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
phpCAS::error('File exists: `'.$fname.'\'');
|
||||||
|
}
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method reads a PGT corresponding to a PGT Iou and deletes the
|
||||||
|
* corresponding file.
|
||||||
|
*
|
||||||
|
* @param string $pgt_iou the PGT iou
|
||||||
|
*
|
||||||
|
* @return the corresponding PGT, or FALSE on error
|
||||||
|
*
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
function read($pgt_iou)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
$pgt = false;
|
||||||
|
$fname = $this->getPGTIouFilename($pgt_iou);
|
||||||
|
if (file_exists($fname)) {
|
||||||
|
if (!($f=fopen($fname, "r"))) {
|
||||||
|
phpCAS::error('could not open `'.$fname.'\'');
|
||||||
|
} else {
|
||||||
|
if (($pgt=fgets($f)) === false) {
|
||||||
|
phpCAS::error('could not read PGT from `'.$fname.'\'');
|
||||||
|
}
|
||||||
|
phpCAS::trace('Successful read of PGT to `'.$fname.'\'');
|
||||||
|
fclose($f);
|
||||||
|
}
|
||||||
|
// delete the PGT file
|
||||||
|
@unlink($fname);
|
||||||
|
} else {
|
||||||
|
phpCAS::error('No such file `'.$fname.'\'');
|
||||||
|
}
|
||||||
|
phpCAS::traceEnd($pgt);
|
||||||
|
return $pgt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
72
phpCAS-1.3.6/source/CAS/ProxiedService.php
Normal file
72
phpCAS-1.3.6/source/CAS/ProxiedService.php
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface defines methods that allow proxy-authenticated service handlers
|
||||||
|
* to interact with phpCAS.
|
||||||
|
*
|
||||||
|
* Proxy service handlers must implement this interface as well as call
|
||||||
|
* phpCAS::initializeProxiedService($this) at some point in their implementation.
|
||||||
|
*
|
||||||
|
* While not required, proxy-authenticated service handlers are encouraged to
|
||||||
|
* implement the CAS_ProxiedService_Testable interface to facilitate unit testing.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
interface CAS_ProxiedService
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer a service identifier (URL) for whom we should fetch a proxy ticket.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws Exception If no service url is available.
|
||||||
|
*/
|
||||||
|
public function getServiceUrl ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a proxy ticket with the ProxiedService that it can use when
|
||||||
|
* making requests.
|
||||||
|
*
|
||||||
|
* @param string $proxyTicket Proxy ticket string
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws InvalidArgumentException If the $proxyTicket is invalid.
|
||||||
|
* @throws CAS_OutOfSequenceException If called after a proxy ticket has
|
||||||
|
* already been initialized/set.
|
||||||
|
*/
|
||||||
|
public function setProxyTicket ($proxyTicket);
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
149
phpCAS-1.3.6/source/CAS/ProxiedService/Abstract.php
Normal file
149
phpCAS-1.3.6/source/CAS/ProxiedService/Abstract.php
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService/Abstract.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class implements common methods for ProxiedService implementations included
|
||||||
|
* with phpCAS.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService_Abstract
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
abstract class CAS_ProxiedService_Abstract
|
||||||
|
implements CAS_ProxiedService, CAS_ProxiedService_Testable
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The proxy ticket that can be used when making service requests.
|
||||||
|
* @var string $_proxyTicket;
|
||||||
|
*/
|
||||||
|
private $_proxyTicket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a proxy ticket with the Proxy that it can use when making requests.
|
||||||
|
*
|
||||||
|
* @param string $proxyTicket proxy ticket
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws InvalidArgumentException If the $proxyTicket is invalid.
|
||||||
|
* @throws CAS_OutOfSequenceException If called after a proxy ticket has
|
||||||
|
* already been initialized/set.
|
||||||
|
*/
|
||||||
|
public function setProxyTicket ($proxyTicket)
|
||||||
|
{
|
||||||
|
if (empty($proxyTicket)) {
|
||||||
|
throw new CAS_InvalidArgumentException(
|
||||||
|
'Trying to initialize with an empty proxy ticket.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!empty($this->_proxyTicket)) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Already initialized, cannot change the proxy ticket.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$this->_proxyTicket = $proxyTicket;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the proxy ticket to be used when making requests.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws CAS_OutOfSequenceException If called before a proxy ticket has
|
||||||
|
* already been initialized/set.
|
||||||
|
*/
|
||||||
|
protected function getProxyTicket ()
|
||||||
|
{
|
||||||
|
if (empty($this->_proxyTicket)) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'No proxy ticket yet. Call $this->initializeProxyTicket() to aquire the proxy ticket.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_proxyTicket;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var CAS_Client $_casClient;
|
||||||
|
*/
|
||||||
|
private $_casClient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use a particular CAS_Client->initializeProxiedService() rather than the
|
||||||
|
* static phpCAS::initializeProxiedService().
|
||||||
|
*
|
||||||
|
* This method should not be called in standard operation, but is needed for unit
|
||||||
|
* testing.
|
||||||
|
*
|
||||||
|
* @param CAS_Client $casClient cas client
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after a proxy ticket has
|
||||||
|
* already been initialized/set.
|
||||||
|
*/
|
||||||
|
public function setCasClient (CAS_Client $casClient)
|
||||||
|
{
|
||||||
|
if (!empty($this->_proxyTicket)) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Already initialized, cannot change the CAS_Client.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_casClient = $casClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch our proxy ticket.
|
||||||
|
*
|
||||||
|
* Descendent classes should call this method once their service URL is available
|
||||||
|
* to initialize their proxy ticket.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after a proxy ticket has
|
||||||
|
* already been initialized.
|
||||||
|
*/
|
||||||
|
protected function initializeProxyTicket()
|
||||||
|
{
|
||||||
|
if (!empty($this->_proxyTicket)) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Already initialized, cannot initialize again.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// Allow usage of a particular CAS_Client for unit testing.
|
||||||
|
if (empty($this->_casClient)) {
|
||||||
|
phpCAS::initializeProxiedService($this);
|
||||||
|
} else {
|
||||||
|
$this->_casClient->initializeProxiedService($this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
46
phpCAS-1.3.6/source/CAS/ProxiedService/Exception.php
Normal file
46
phpCAS-1.3.6/source/CAS/ProxiedService/Exception.php
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService/Exception.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An Exception for problems communicating with a proxied service.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService_Exception
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_ProxiedService_Exception
|
||||||
|
extends Exception
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
91
phpCAS-1.3.6/source/CAS/ProxiedService/Http.php
Normal file
91
phpCAS-1.3.6/source/CAS/ProxiedService/Http.php
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService/Http.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface defines methods that clients should use for configuring, sending,
|
||||||
|
* and receiving proxied HTTP requests.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService_Http
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
interface CAS_ProxiedService_Http
|
||||||
|
{
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Configure the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the URL of the Request
|
||||||
|
*
|
||||||
|
* @param string $url Url to set
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setUrl ($url);
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 2. Send the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the request.
|
||||||
|
*
|
||||||
|
* @return bool TRUE on success, FALSE on failure.
|
||||||
|
* @throws CAS_OutOfSequenceException If called multiple times.
|
||||||
|
*/
|
||||||
|
public function send ();
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 3. Access the response
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the headers of the response.
|
||||||
|
*
|
||||||
|
* @return array An array of header strings.
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseHeaders ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the body of response.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseBody ();
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
360
phpCAS-1.3.6/source/CAS/ProxiedService/Http/Abstract.php
Normal file
360
phpCAS-1.3.6/source/CAS/ProxiedService/Http/Abstract.php
Normal file
|
@ -0,0 +1,360 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService/Http/Abstract.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class implements common methods for ProxiedService implementations included
|
||||||
|
* with phpCAS.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService_Http_Abstract
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
abstract class CAS_ProxiedService_Http_Abstract extends
|
||||||
|
CAS_ProxiedService_Abstract implements CAS_ProxiedService_Http
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The HTTP request mechanism talking to the target service.
|
||||||
|
*
|
||||||
|
* @var CAS_Request_RequestInterface $requestHandler
|
||||||
|
*/
|
||||||
|
protected $requestHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The storage mechanism for cookies set by the target service.
|
||||||
|
*
|
||||||
|
* @var CAS_CookieJar $_cookieJar
|
||||||
|
*/
|
||||||
|
private $_cookieJar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param CAS_Request_RequestInterface $requestHandler request handler object
|
||||||
|
* @param CAS_CookieJar $cookieJar cookieJar object
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(CAS_Request_RequestInterface $requestHandler,
|
||||||
|
CAS_CookieJar $cookieJar
|
||||||
|
) {
|
||||||
|
$this->requestHandler = $requestHandler;
|
||||||
|
$this->_cookieJar = $cookieJar;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The target service url.
|
||||||
|
* @var string $_url;
|
||||||
|
*/
|
||||||
|
private $_url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer a service identifier (URL) for whom we should fetch a proxy ticket.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws Exception If no service url is available.
|
||||||
|
*/
|
||||||
|
public function getServiceUrl()
|
||||||
|
{
|
||||||
|
if (empty($this->_url)) {
|
||||||
|
throw new CAS_ProxiedService_Exception(
|
||||||
|
'No URL set via ' . get_class($this) . '->setUrl($url).'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Configure the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the URL of the Request
|
||||||
|
*
|
||||||
|
* @param string $url url to set
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setUrl($url)
|
||||||
|
{
|
||||||
|
if ($this->hasBeenSent()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot set the URL, request already sent.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!is_string($url)) {
|
||||||
|
throw new CAS_InvalidArgumentException('$url must be a string.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_url = $url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 2. Send the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the request.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called multiple times.
|
||||||
|
* @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
|
||||||
|
* The code of the Exception will be one of:
|
||||||
|
* PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
|
||||||
|
* PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
|
||||||
|
* PHPCAS_SERVICE_PT_FAILURE
|
||||||
|
* @throws CAS_ProxiedService_Exception If there is a failure sending the
|
||||||
|
* request to the target service.
|
||||||
|
*/
|
||||||
|
public function send()
|
||||||
|
{
|
||||||
|
if ($this->hasBeenSent()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot send, request already sent.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
|
||||||
|
// Get our proxy ticket and append it to our URL.
|
||||||
|
$this->initializeProxyTicket();
|
||||||
|
$url = $this->getServiceUrl();
|
||||||
|
if (strstr($url, '?') === false) {
|
||||||
|
$url = $url . '?ticket=' . $this->getProxyTicket();
|
||||||
|
} else {
|
||||||
|
$url = $url . '&ticket=' . $this->getProxyTicket();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->makeRequest($url);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicator of the number of requests (including redirects performed.
|
||||||
|
*
|
||||||
|
* @var int $_numRequests;
|
||||||
|
*/
|
||||||
|
private $_numRequests = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The response headers.
|
||||||
|
*
|
||||||
|
* @var array $_responseHeaders;
|
||||||
|
*/
|
||||||
|
private $_responseHeaders = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The response status code.
|
||||||
|
*
|
||||||
|
* @var string $_responseStatusCode;
|
||||||
|
*/
|
||||||
|
private $_responseStatusCode = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The response headers.
|
||||||
|
*
|
||||||
|
* @var string $_responseBody;
|
||||||
|
*/
|
||||||
|
private $_responseBody = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build and perform a request, following redirects
|
||||||
|
*
|
||||||
|
* @param string $url url for the request
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
|
||||||
|
* The code of the Exception will be one of:
|
||||||
|
* PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
|
||||||
|
* PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
|
||||||
|
* PHPCAS_SERVICE_PT_FAILURE
|
||||||
|
* @throws CAS_ProxiedService_Exception If there is a failure sending the
|
||||||
|
* request to the target service.
|
||||||
|
*/
|
||||||
|
protected function makeRequest($url)
|
||||||
|
{
|
||||||
|
// Verify that we are not in a redirect loop
|
||||||
|
$this->_numRequests++;
|
||||||
|
if ($this->_numRequests > 4) {
|
||||||
|
$message = 'Exceeded the maximum number of redirects (3) in proxied service request.';
|
||||||
|
phpCAS::trace($message);
|
||||||
|
throw new CAS_ProxiedService_Exception($message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new request.
|
||||||
|
$request = clone $this->requestHandler;
|
||||||
|
$request->setUrl($url);
|
||||||
|
|
||||||
|
// Add any cookies to the request.
|
||||||
|
$request->addCookies($this->_cookieJar->getCookies($url));
|
||||||
|
|
||||||
|
// Add any other parts of the request needed by concrete classes
|
||||||
|
$this->populateRequest($request);
|
||||||
|
|
||||||
|
// Perform the request.
|
||||||
|
phpCAS::trace('Performing proxied service request to \'' . $url . '\'');
|
||||||
|
if (!$request->send()) {
|
||||||
|
$message = 'Could not perform proxied service request to URL`'
|
||||||
|
. $url . '\'. ' . $request->getErrorMessage();
|
||||||
|
phpCAS::trace($message);
|
||||||
|
throw new CAS_ProxiedService_Exception($message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store any cookies from the response;
|
||||||
|
$this->_cookieJar->storeCookies($url, $request->getResponseHeaders());
|
||||||
|
|
||||||
|
// Follow any redirects
|
||||||
|
if ($redirectUrl = $this->getRedirectUrl($request->getResponseHeaders())
|
||||||
|
) {
|
||||||
|
phpCAS::trace('Found redirect:' . $redirectUrl);
|
||||||
|
$this->makeRequest($redirectUrl);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$this->_responseHeaders = $request->getResponseHeaders();
|
||||||
|
$this->_responseBody = $request->getResponseBody();
|
||||||
|
$this->_responseStatusCode = $request->getResponseStatusCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add any other parts of the request needed by concrete classes
|
||||||
|
*
|
||||||
|
* @param CAS_Request_RequestInterface $request request interface object
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
abstract protected function populateRequest(
|
||||||
|
CAS_Request_RequestInterface $request
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer a redirect URL if a redirect header is found, otherwise null.
|
||||||
|
*
|
||||||
|
* @param array $responseHeaders response header to extract a redirect from
|
||||||
|
*
|
||||||
|
* @return string or null
|
||||||
|
*/
|
||||||
|
protected function getRedirectUrl(array $responseHeaders)
|
||||||
|
{
|
||||||
|
// Check for the redirect after authentication
|
||||||
|
foreach ($responseHeaders as $header) {
|
||||||
|
if ( preg_match('/^(Location:|URI:)\s*([^\s]+.*)$/', $header, $matches)
|
||||||
|
) {
|
||||||
|
return trim(array_pop($matches));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 3. Access the response
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer true if our request has been sent yet.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function hasBeenSent()
|
||||||
|
{
|
||||||
|
return ($this->_numRequests > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the headers of the response.
|
||||||
|
*
|
||||||
|
* @return array An array of header strings.
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseHeaders()
|
||||||
|
{
|
||||||
|
if (!$this->hasBeenSent()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot access response, request not sent yet.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_responseHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer HTTP status code of the response
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseStatusCode()
|
||||||
|
{
|
||||||
|
if (!$this->hasBeenSent()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot access response, request not sent yet.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_responseStatusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the body of response.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseBody()
|
||||||
|
{
|
||||||
|
if (!$this->hasBeenSent()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot access response, request not sent yet.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_responseBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the cookies from the response. This may include cookies set during
|
||||||
|
* redirect responses.
|
||||||
|
*
|
||||||
|
* @return array An array containing cookies. E.g. array('name' => 'val');
|
||||||
|
*/
|
||||||
|
public function getCookies()
|
||||||
|
{
|
||||||
|
return $this->_cookieJar->getCookies($this->getServiceUrl());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
85
phpCAS-1.3.6/source/CAS/ProxiedService/Http/Get.php
Normal file
85
phpCAS-1.3.6/source/CAS/ProxiedService/Http/Get.php
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService/Http/Get.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used to make proxied service requests via the HTTP GET method.
|
||||||
|
*
|
||||||
|
* Usage Example:
|
||||||
|
*
|
||||||
|
* try {
|
||||||
|
* $service = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_GET);
|
||||||
|
* $service->setUrl('http://www.example.com/path/');
|
||||||
|
* $service->send();
|
||||||
|
* if ($service->getResponseStatusCode() == 200)
|
||||||
|
* return $service->getResponseBody();
|
||||||
|
* else
|
||||||
|
* // The service responded with an error code 404, 500, etc.
|
||||||
|
* throw new Exception('The service responded with an error.');
|
||||||
|
*
|
||||||
|
* } catch (CAS_ProxyTicketException $e) {
|
||||||
|
* if ($e->getCode() == PHPCAS_SERVICE_PT_FAILURE)
|
||||||
|
* return "Your login has timed out. You need to log in again.";
|
||||||
|
* else
|
||||||
|
* // Other proxy ticket errors are from bad request format
|
||||||
|
* // (shouldn't happen) or CAS server failure (unlikely)
|
||||||
|
* // so lets just stop if we hit those.
|
||||||
|
* throw $e;
|
||||||
|
* } catch (CAS_ProxiedService_Exception $e) {
|
||||||
|
* // Something prevented the service request from being sent or received.
|
||||||
|
* // We didn't even get a valid error response (404, 500, etc), so this
|
||||||
|
* // might be caused by a network error or a DNS resolution failure.
|
||||||
|
* // We could handle it in some way, but for now we will just stop.
|
||||||
|
* throw $e;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService_Http_Get
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_ProxiedService_Http_Get
|
||||||
|
extends CAS_ProxiedService_Http_Abstract
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add any other parts of the request needed by concrete classes
|
||||||
|
*
|
||||||
|
* @param CAS_Request_RequestInterface $request request interface
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function populateRequest (CAS_Request_RequestInterface $request)
|
||||||
|
{
|
||||||
|
// do nothing, since the URL has already been sent and that is our
|
||||||
|
// only data.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
152
phpCAS-1.3.6/source/CAS/ProxiedService/Http/Post.php
Normal file
152
phpCAS-1.3.6/source/CAS/ProxiedService/Http/Post.php
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService/Http/Post.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used to make proxied service requests via the HTTP POST method.
|
||||||
|
*
|
||||||
|
* Usage Example:
|
||||||
|
*
|
||||||
|
* try {
|
||||||
|
* $service = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_POST);
|
||||||
|
* $service->setUrl('http://www.example.com/path/');
|
||||||
|
* $service->setContentType('text/xml');
|
||||||
|
* $service->setBody('<?xml version="1.0"?'.'><methodCall><methodName>example.search</methodName></methodCall>');
|
||||||
|
* $service->send();
|
||||||
|
* if ($service->getResponseStatusCode() == 200)
|
||||||
|
* return $service->getResponseBody();
|
||||||
|
* else
|
||||||
|
* // The service responded with an error code 404, 500, etc.
|
||||||
|
* throw new Exception('The service responded with an error.');
|
||||||
|
*
|
||||||
|
* } catch (CAS_ProxyTicketException $e) {
|
||||||
|
* if ($e->getCode() == PHPCAS_SERVICE_PT_FAILURE)
|
||||||
|
* return "Your login has timed out. You need to log in again.";
|
||||||
|
* else
|
||||||
|
* // Other proxy ticket errors are from bad request format
|
||||||
|
* // (shouldn't happen) or CAS server failure (unlikely) so lets just
|
||||||
|
* // stop if we hit those.
|
||||||
|
* throw $e;
|
||||||
|
* } catch (CAS_ProxiedService_Exception $e) {
|
||||||
|
* // Something prevented the service request from being sent or received.
|
||||||
|
* // We didn't even get a valid error response (404, 500, etc), so this
|
||||||
|
* // might be caused by a network error or a DNS resolution failure.
|
||||||
|
* // We could handle it in some way, but for now we will just stop.
|
||||||
|
* throw $e;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService_Http_Post
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_ProxiedService_Http_Post
|
||||||
|
extends CAS_ProxiedService_Http_Abstract
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The content-type of this request
|
||||||
|
*
|
||||||
|
* @var string $_contentType
|
||||||
|
*/
|
||||||
|
private $_contentType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The body of the this request
|
||||||
|
*
|
||||||
|
* @var string $_body
|
||||||
|
*/
|
||||||
|
private $_body;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the content type of this POST request.
|
||||||
|
*
|
||||||
|
* @param string $contentType content type
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setContentType ($contentType)
|
||||||
|
{
|
||||||
|
if ($this->hasBeenSent()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot set the content type, request already sent.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_contentType = $contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the body of this POST request.
|
||||||
|
*
|
||||||
|
* @param string $body body to set
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setBody ($body)
|
||||||
|
{
|
||||||
|
if ($this->hasBeenSent()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot set the body, request already sent.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_body = $body;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add any other parts of the request needed by concrete classes
|
||||||
|
*
|
||||||
|
* @param CAS_Request_RequestInterface $request request interface class
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function populateRequest (CAS_Request_RequestInterface $request)
|
||||||
|
{
|
||||||
|
if (empty($this->_contentType) && !empty($this->_body)) {
|
||||||
|
throw new CAS_ProxiedService_Exception(
|
||||||
|
"If you pass a POST body, you must specify a content type via "
|
||||||
|
.get_class($this).'->setContentType($contentType).'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$request->makePost();
|
||||||
|
if (!empty($this->_body)) {
|
||||||
|
$request->addHeader('Content-Type: '.$this->_contentType);
|
||||||
|
$request->addHeader('Content-Length: '.strlen($this->_body));
|
||||||
|
$request->setPostBody($this->_body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
280
phpCAS-1.3.6/source/CAS/ProxiedService/Imap.php
Normal file
280
phpCAS-1.3.6/source/CAS/ProxiedService/Imap.php
Normal file
|
@ -0,0 +1,280 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService/Imap.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides access to a proxy-authenticated IMAP stream
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService_Imap
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_ProxiedService_Imap
|
||||||
|
extends CAS_ProxiedService_Abstract
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The username to send via imap_open.
|
||||||
|
*
|
||||||
|
* @var string $_username;
|
||||||
|
*/
|
||||||
|
private $_username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param string $username Username
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct ($username)
|
||||||
|
{
|
||||||
|
if (!is_string($username) || !strlen($username)) {
|
||||||
|
throw new CAS_InvalidArgumentException('Invalid username.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_username = $username;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The target service url.
|
||||||
|
* @var string $_url;
|
||||||
|
*/
|
||||||
|
private $_url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer a service identifier (URL) for whom we should fetch a proxy ticket.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws Exception If no service url is available.
|
||||||
|
*/
|
||||||
|
public function getServiceUrl ()
|
||||||
|
{
|
||||||
|
if (empty($this->_url)) {
|
||||||
|
throw new CAS_ProxiedService_Exception(
|
||||||
|
'No URL set via '.get_class($this).'->getServiceUrl($url).'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Configure the Stream
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the URL of the service to pass to CAS for proxy-ticket retrieval.
|
||||||
|
*
|
||||||
|
* @param string $url Url to set
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the stream has been opened.
|
||||||
|
*/
|
||||||
|
public function setServiceUrl ($url)
|
||||||
|
{
|
||||||
|
if ($this->hasBeenOpened()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot set the URL, stream already opened.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!is_string($url) || !strlen($url)) {
|
||||||
|
throw new CAS_InvalidArgumentException('Invalid url.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_url = $url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The mailbox to open. See the $mailbox parameter of imap_open().
|
||||||
|
*
|
||||||
|
* @var string $_mailbox
|
||||||
|
*/
|
||||||
|
private $_mailbox;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the mailbox to open. See the $mailbox parameter of imap_open().
|
||||||
|
*
|
||||||
|
* @param string $mailbox Mailbox to set
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the stream has been opened.
|
||||||
|
*/
|
||||||
|
public function setMailbox ($mailbox)
|
||||||
|
{
|
||||||
|
if ($this->hasBeenOpened()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot set the mailbox, stream already opened.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!is_string($mailbox) || !strlen($mailbox)) {
|
||||||
|
throw new CAS_InvalidArgumentException('Invalid mailbox.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_mailbox = $mailbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A bit mask of options to pass to imap_open() as the $options parameter.
|
||||||
|
*
|
||||||
|
* @var int $_options
|
||||||
|
*/
|
||||||
|
private $_options = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the options for opening the stream. See the $options parameter of
|
||||||
|
* imap_open().
|
||||||
|
*
|
||||||
|
* @param int $options Options for the stream
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the stream has been opened.
|
||||||
|
*/
|
||||||
|
public function setOptions ($options)
|
||||||
|
{
|
||||||
|
if ($this->hasBeenOpened()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot set options, stream already opened.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!is_int($options)) {
|
||||||
|
throw new CAS_InvalidArgumentException('Invalid options.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_options = $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 2. Open the stream
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open the IMAP stream (similar to imap_open()).
|
||||||
|
*
|
||||||
|
* @return resource Returns an IMAP stream on success
|
||||||
|
* @throws CAS_OutOfSequenceException If called multiple times.
|
||||||
|
* @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
|
||||||
|
* The code of the Exception will be one of:
|
||||||
|
* PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
|
||||||
|
* PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
|
||||||
|
* PHPCAS_SERVICE_PT_FAILURE
|
||||||
|
* @throws CAS_ProxiedService_Exception If there is a failure sending the
|
||||||
|
* request to the target service.
|
||||||
|
*/
|
||||||
|
public function open ()
|
||||||
|
{
|
||||||
|
if ($this->hasBeenOpened()) {
|
||||||
|
throw new CAS_OutOfSequenceException('Stream already opened.');
|
||||||
|
}
|
||||||
|
if (empty($this->_mailbox)) {
|
||||||
|
throw new CAS_ProxiedService_Exception(
|
||||||
|
'You must specify a mailbox via '.get_class($this)
|
||||||
|
.'->setMailbox($mailbox)'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
|
||||||
|
// Get our proxy ticket and append it to our URL.
|
||||||
|
$this->initializeProxyTicket();
|
||||||
|
phpCAS::trace('opening IMAP mailbox `'.$this->_mailbox.'\'...');
|
||||||
|
$this->_stream = @imap_open(
|
||||||
|
$this->_mailbox, $this->_username, $this->getProxyTicket(),
|
||||||
|
$this->_options
|
||||||
|
);
|
||||||
|
if ($this->_stream) {
|
||||||
|
phpCAS::trace('ok');
|
||||||
|
} else {
|
||||||
|
phpCAS::trace('could not open mailbox');
|
||||||
|
// @todo add localization integration.
|
||||||
|
$message = 'IMAP Error: '.$this->_url.' '. var_export(imap_errors(), true);
|
||||||
|
phpCAS::trace($message);
|
||||||
|
throw new CAS_ProxiedService_Exception($message);
|
||||||
|
}
|
||||||
|
|
||||||
|
phpCAS::traceEnd();
|
||||||
|
return $this->_stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer true if our request has been sent yet.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function hasBeenOpened ()
|
||||||
|
{
|
||||||
|
return !empty($this->_stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 3. Access the result
|
||||||
|
*********************************************************/
|
||||||
|
/**
|
||||||
|
* The IMAP stream
|
||||||
|
*
|
||||||
|
* @var resource $_stream
|
||||||
|
*/
|
||||||
|
private $_stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the IMAP stream
|
||||||
|
*
|
||||||
|
* @return resource
|
||||||
|
*/
|
||||||
|
public function getStream ()
|
||||||
|
{
|
||||||
|
if (!$this->hasBeenOpened()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot access stream, not opened yet.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $this->_stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CAS_Client::serviceMail() needs to return the proxy ticket for some reason,
|
||||||
|
* so this method provides access to it.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the stream has been
|
||||||
|
* opened.
|
||||||
|
*/
|
||||||
|
public function getImapProxyTicket ()
|
||||||
|
{
|
||||||
|
if (!$this->hasBeenOpened()) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot access errors, stream not opened yet.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $this->getProxyTicket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
75
phpCAS-1.3.6/source/CAS/ProxiedService/Testable.php
Normal file
75
phpCAS-1.3.6/source/CAS/ProxiedService/Testable.php
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxiedService/Testabel.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface defines methods that allow proxy-authenticated service handlers
|
||||||
|
* to be tested in unit tests.
|
||||||
|
*
|
||||||
|
* Classes implementing this interface SHOULD store the CAS_Client passed and
|
||||||
|
* initialize themselves with that client rather than via the static phpCAS
|
||||||
|
* method. For example:
|
||||||
|
*
|
||||||
|
* / **
|
||||||
|
* * Fetch our proxy ticket.
|
||||||
|
* * /
|
||||||
|
* protected function initializeProxyTicket() {
|
||||||
|
* // Allow usage of a particular CAS_Client for unit testing.
|
||||||
|
* if (is_null($this->casClient))
|
||||||
|
* phpCAS::initializeProxiedService($this);
|
||||||
|
* else
|
||||||
|
* $this->casClient->initializeProxiedService($this);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* @class CAS_ProxiedService_Testabel
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
interface CAS_ProxiedService_Testable
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use a particular CAS_Client->initializeProxiedService() rather than the
|
||||||
|
* static phpCAS::initializeProxiedService().
|
||||||
|
*
|
||||||
|
* This method should not be called in standard operation, but is needed for unit
|
||||||
|
* testing.
|
||||||
|
*
|
||||||
|
* @param CAS_Client $casClient Cas client object
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after a proxy ticket has
|
||||||
|
* already been initialized/set.
|
||||||
|
*/
|
||||||
|
public function setCasClient (CAS_Client $casClient);
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
127
phpCAS-1.3.6/source/CAS/ProxyChain.php
Normal file
127
phpCAS-1.3.6/source/CAS/ProxyChain.php
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxyChain.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A normal proxy-chain definition that lists each level of the chain as either
|
||||||
|
* a string or regular expression.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxyChain
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CAS_ProxyChain
|
||||||
|
implements CAS_ProxyChain_Interface
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $chain = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A chain is an array of strings or regexp strings that will be matched
|
||||||
|
* against. Regexp will be matched with preg_match and strings will be
|
||||||
|
* matched from the beginning. A string must fully match the beginning of
|
||||||
|
* an proxy url. So you can define a full domain as acceptable or go further
|
||||||
|
* down.
|
||||||
|
* Proxies have to be defined in reverse from the service to the user. If a
|
||||||
|
* user hits service A get proxied via B to service C the list of acceptable
|
||||||
|
* proxies on C would be array(B,A);
|
||||||
|
*
|
||||||
|
* @param array $chain A chain of proxies
|
||||||
|
*/
|
||||||
|
public function __construct(array $chain)
|
||||||
|
{
|
||||||
|
// Ensure that we have an indexed array
|
||||||
|
$this->chain = array_values($chain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Match a list of proxies.
|
||||||
|
*
|
||||||
|
* @param array $list The list of proxies in front of this service.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function matches(array $list)
|
||||||
|
{
|
||||||
|
$list = array_values($list); // Ensure that we have an indexed array
|
||||||
|
if ($this->isSizeValid($list)) {
|
||||||
|
$mismatch = false;
|
||||||
|
foreach ($this->chain as $i => $search) {
|
||||||
|
$proxy_url = $list[$i];
|
||||||
|
if (preg_match('/^\/.*\/[ixASUXu]*$/s', $search)) {
|
||||||
|
if (preg_match($search, $proxy_url)) {
|
||||||
|
phpCAS::trace(
|
||||||
|
"Found regexp " . $search . " matching " . $proxy_url
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
phpCAS::trace(
|
||||||
|
"No regexp match " . $search . " != " . $proxy_url
|
||||||
|
);
|
||||||
|
$mismatch = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (strncasecmp($search, $proxy_url, strlen($search)) == 0) {
|
||||||
|
phpCAS::trace(
|
||||||
|
"Found string " . $search . " matching " . $proxy_url
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
phpCAS::trace(
|
||||||
|
"No match " . $search . " != " . $proxy_url
|
||||||
|
);
|
||||||
|
$mismatch = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$mismatch) {
|
||||||
|
phpCAS::trace("Proxy chain matches");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
phpCAS::trace("Proxy chain skipped: size mismatch");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate the size of the the list as compared to our chain.
|
||||||
|
*
|
||||||
|
* @param array $list List of proxies
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function isSizeValid (array $list)
|
||||||
|
{
|
||||||
|
return (sizeof($this->chain) == sizeof($list));
|
||||||
|
}
|
||||||
|
}
|
119
phpCAS-1.3.6/source/CAS/ProxyChain/AllowedList.php
Normal file
119
phpCAS-1.3.6/source/CAS/ProxyChain/AllowedList.php
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxyChain/AllowedList.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ProxyChain is a container for storing chains of valid proxies that can
|
||||||
|
* be used to validate proxied requests to a service
|
||||||
|
*
|
||||||
|
* @class CAS_ProxyChain_AllowedList
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CAS_ProxyChain_AllowedList
|
||||||
|
{
|
||||||
|
|
||||||
|
private $_chains = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether proxies are allowed by configuration
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isProxyingAllowed()
|
||||||
|
{
|
||||||
|
return (count($this->_chains) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a chain of proxies to the list of possible chains
|
||||||
|
*
|
||||||
|
* @param CAS_ProxyChain_Interface $chain A chain of proxies
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function allowProxyChain(CAS_ProxyChain_Interface $chain)
|
||||||
|
{
|
||||||
|
$this->_chains[] = $chain;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the proxies found in the response match the allowed proxies
|
||||||
|
*
|
||||||
|
* @param array $proxies list of proxies to check
|
||||||
|
*
|
||||||
|
* @return bool whether the proxies match the allowed proxies
|
||||||
|
*/
|
||||||
|
public function isProxyListAllowed(array $proxies)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
if (empty($proxies)) {
|
||||||
|
phpCAS::trace("No proxies were found in the response");
|
||||||
|
phpCAS::traceEnd(true);
|
||||||
|
return true;
|
||||||
|
} elseif (!$this->isProxyingAllowed()) {
|
||||||
|
phpCAS::trace("Proxies are not allowed");
|
||||||
|
phpCAS::traceEnd(false);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
$res = $this->contains($proxies);
|
||||||
|
phpCAS::traceEnd($res);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate the proxies from the proxy ticket validation against the
|
||||||
|
* chains that were definded.
|
||||||
|
*
|
||||||
|
* @param array $list List of proxies from the proxy ticket validation.
|
||||||
|
*
|
||||||
|
* @return if any chain fully matches the supplied list
|
||||||
|
*/
|
||||||
|
public function contains(array $list)
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
$count = 0;
|
||||||
|
foreach ($this->_chains as $chain) {
|
||||||
|
phpCAS::trace("Checking chain ". $count++);
|
||||||
|
if ($chain->matches($list)) {
|
||||||
|
phpCAS::traceEnd(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
phpCAS::trace("No proxy chain matches.");
|
||||||
|
phpCAS::traceEnd(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
64
phpCAS-1.3.6/source/CAS/ProxyChain/Any.php
Normal file
64
phpCAS-1.3.6/source/CAS/ProxyChain/Any.php
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxyChain/Any.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A proxy-chain definition that will match any list of proxies.
|
||||||
|
*
|
||||||
|
* Use this class for quick testing or in certain production screnarios you
|
||||||
|
* might want to allow allow any other valid service to proxy your service.
|
||||||
|
*
|
||||||
|
* THIS CLASS IS HOWEVER NOT RECOMMENDED FOR PRODUCTION AND HAS SECURITY
|
||||||
|
* IMPLICATIONS: YOU ARE ALLOWING ANY SERVICE TO ACT ON BEHALF OF A USER
|
||||||
|
* ON THIS SERVICE.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxyChain_Any
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_ProxyChain_Any
|
||||||
|
implements CAS_ProxyChain_Interface
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Match a list of proxies.
|
||||||
|
*
|
||||||
|
* @param array $list The list of proxies in front of this service.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function matches(array $list)
|
||||||
|
{
|
||||||
|
phpCAS::trace("Using CAS_ProxyChain_Any. No proxy validation is performed.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
53
phpCAS-1.3.6/source/CAS/ProxyChain/Interface.php
Normal file
53
phpCAS-1.3.6/source/CAS/ProxyChain/Interface.php
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxyChain/Interface.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An interface for classes that define a list of allowed proxies in front of
|
||||||
|
* the current application.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxyChain_Interface
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
interface CAS_ProxyChain_Interface
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Match a list of proxies.
|
||||||
|
*
|
||||||
|
* @param array $list The list of proxies in front of this service.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function matches(array $list);
|
||||||
|
|
||||||
|
}
|
59
phpCAS-1.3.6/source/CAS/ProxyChain/Trusted.php
Normal file
59
phpCAS-1.3.6/source/CAS/ProxyChain/Trusted.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/ProxyChain/Trusted.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A proxy-chain definition that defines a chain up to a trusted proxy and
|
||||||
|
* delegates the resposibility of validating the rest of the chain to that
|
||||||
|
* trusted proxy.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxyChain_Trusted
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_ProxyChain_Trusted
|
||||||
|
extends CAS_ProxyChain
|
||||||
|
implements CAS_ProxyChain_Interface
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate the size of the the list as compared to our chain.
|
||||||
|
*
|
||||||
|
* @param array $list list of proxies
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function isSizeValid (array $list)
|
||||||
|
{
|
||||||
|
return (sizeof($this->chain) <= sizeof($list));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
71
phpCAS-1.3.6/source/CAS/ProxyTicketException.php
Normal file
71
phpCAS-1.3.6/source/CAS/ProxyTicketException.php
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @class CAS/ProxyTicketException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An Exception for errors related to fetching or validating proxy tickets.
|
||||||
|
*
|
||||||
|
* @class CAS_ProxyTicketException
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_ProxyTicketException
|
||||||
|
extends BadMethodCallException
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param string $message Message text
|
||||||
|
* @param int $code Error code
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct ($message, $code = PHPCAS_SERVICE_PT_FAILURE)
|
||||||
|
{
|
||||||
|
// Warn if the code is not in our allowed list
|
||||||
|
$ptCodes = array(
|
||||||
|
PHPCAS_SERVICE_PT_FAILURE,
|
||||||
|
PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE,
|
||||||
|
PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
|
||||||
|
);
|
||||||
|
if (!in_array($code, $ptCodes)) {
|
||||||
|
trigger_error(
|
||||||
|
'Invalid code '.$code
|
||||||
|
.' passed. Must be one of PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, or PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct($message, $code);
|
||||||
|
}
|
||||||
|
}
|
379
phpCAS-1.3.6/source/CAS/Request/AbstractRequest.php
Normal file
379
phpCAS-1.3.6/source/CAS/Request/AbstractRequest.php
Normal file
|
@ -0,0 +1,379 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Request/AbstractRequest.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides support for performing web-requests via curl
|
||||||
|
*
|
||||||
|
* @class CAS_Request_AbstractRequest
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
abstract class CAS_Request_AbstractRequest
|
||||||
|
implements CAS_Request_RequestInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $url = null;
|
||||||
|
protected $cookies = array();
|
||||||
|
protected $headers = array();
|
||||||
|
protected $isPost = false;
|
||||||
|
protected $postBody = null;
|
||||||
|
protected $caCertPath = null;
|
||||||
|
protected $validateCN = true;
|
||||||
|
private $_sent = false;
|
||||||
|
private $_responseHeaders = array();
|
||||||
|
private $_responseBody = null;
|
||||||
|
private $_errorMessage = '';
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Configure the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the URL of the Request
|
||||||
|
*
|
||||||
|
* @param string $url Url to set
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setUrl ($url)
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->url = $url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a cookie to the request.
|
||||||
|
*
|
||||||
|
* @param string $name Name of entry
|
||||||
|
* @param string $value value of entry
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function addCookie ($name, $value)
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->cookies[$name] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an array of cookies to the request.
|
||||||
|
* The cookie array is of the form
|
||||||
|
* array('cookie_name' => 'cookie_value', 'cookie_name2' => cookie_value2')
|
||||||
|
*
|
||||||
|
* @param array $cookies cookies to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function addCookies (array $cookies)
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->cookies = array_merge($this->cookies, $cookies);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a header string to the request.
|
||||||
|
*
|
||||||
|
* @param string $header Header to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function addHeader ($header)
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->headers[] = $header;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an array of header strings to the request.
|
||||||
|
*
|
||||||
|
* @param array $headers headers to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function addHeaders (array $headers)
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->headers = array_merge($this->headers, $headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make the request a POST request rather than the default GET request.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function makePost ()
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->isPost = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a POST body to the request
|
||||||
|
*
|
||||||
|
* @param string $body body to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setPostBody ($body)
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!$this->isPost) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Cannot add a POST body to a GET request, use makePost() first.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->postBody = $body;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify the path to an SSL CA certificate to validate the server with.
|
||||||
|
*
|
||||||
|
* @param string $caCertPath path to cert
|
||||||
|
* @param bool $validate_cn valdiate CN of certificate
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setSslCaCert ($caCertPath,$validate_cn=true)
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$this->caCertPath = $caCertPath;
|
||||||
|
$this->validateCN = $validate_cn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 2. Send the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the request.
|
||||||
|
*
|
||||||
|
* @return bool TRUE on success, FALSE on failure.
|
||||||
|
* @throws CAS_OutOfSequenceException If called multiple times.
|
||||||
|
*/
|
||||||
|
public function send ()
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot send again.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (is_null($this->url) || !$this->url) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'A url must be specified via setUrl() before the request can be sent.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$this->_sent = true;
|
||||||
|
return $this->sendRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the request and store the results.
|
||||||
|
*
|
||||||
|
* @return bool TRUE on success, FALSE on failure.
|
||||||
|
*/
|
||||||
|
abstract protected function sendRequest ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store the response headers.
|
||||||
|
*
|
||||||
|
* @param array $headers headers to store
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function storeResponseHeaders (array $headers)
|
||||||
|
{
|
||||||
|
$this->_responseHeaders = array_merge($this->_responseHeaders, $headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a single response header to our array.
|
||||||
|
*
|
||||||
|
* @param string $header header to store
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function storeResponseHeader ($header)
|
||||||
|
{
|
||||||
|
$this->_responseHeaders[] = $header;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store the response body.
|
||||||
|
*
|
||||||
|
* @param string $body body to store
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function storeResponseBody ($body)
|
||||||
|
{
|
||||||
|
$this->_responseBody = $body;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a string to our error message.
|
||||||
|
*
|
||||||
|
* @param string $message message to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function storeErrorMessage ($message)
|
||||||
|
{
|
||||||
|
$this->_errorMessage .= $message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 3. Access the response
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the headers of the response.
|
||||||
|
*
|
||||||
|
* @return array An array of header strings.
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseHeaders ()
|
||||||
|
{
|
||||||
|
if (!$this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has not been sent yet. Cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $this->_responseHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer HTTP status code of the response
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseStatusCode ()
|
||||||
|
{
|
||||||
|
if (!$this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has not been sent yet. Cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!preg_match(
|
||||||
|
'/HTTP\/[0-9.]+\s+([0-9]+)\s*(.*)/',
|
||||||
|
$this->_responseHeaders[0], $matches
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
throw new CAS_Request_Exception(
|
||||||
|
'Bad response, no status code was found in the first line.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return intval($matches[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the body of response.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseBody ()
|
||||||
|
{
|
||||||
|
if (!$this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has not been sent yet. Cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_responseBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer a message describing any errors if the request failed.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getErrorMessage ()
|
||||||
|
{
|
||||||
|
if (!$this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has not been sent yet. Cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $this->_errorMessage;
|
||||||
|
}
|
||||||
|
}
|
146
phpCAS-1.3.6/source/CAS/Request/CurlMultiRequest.php
Normal file
146
phpCAS-1.3.6/source/CAS/Request/CurlMultiRequest.php
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Request/AbstractRequest.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface defines a class library for performing multiple web requests
|
||||||
|
* in batches. Implementations of this interface may perform requests serially
|
||||||
|
* or in parallel.
|
||||||
|
*
|
||||||
|
* @class CAS_Request_CurlMultiRequest
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_Request_CurlMultiRequest
|
||||||
|
implements CAS_Request_MultiRequestInterface
|
||||||
|
{
|
||||||
|
private $_requests = array();
|
||||||
|
private $_sent = false;
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Add Requests
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a new Request to this batch.
|
||||||
|
* Note, implementations will likely restrict requests to their own concrete
|
||||||
|
* class hierarchy.
|
||||||
|
*
|
||||||
|
* @param CAS_Request_RequestInterface $request reqest to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
* @throws CAS_InvalidArgumentException If passed a Request of the wrong
|
||||||
|
* implmentation.
|
||||||
|
*/
|
||||||
|
public function addRequest (CAS_Request_RequestInterface $request)
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!$request instanceof CAS_Request_CurlRequest) {
|
||||||
|
throw new CAS_InvalidArgumentException(
|
||||||
|
'As a CAS_Request_CurlMultiRequest, I can only work with CAS_Request_CurlRequest objects.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_requests[] = $request;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the number of requests added to this batch.
|
||||||
|
*
|
||||||
|
* @return number of request elements
|
||||||
|
*/
|
||||||
|
public function getNumRequests()
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot '.__METHOD__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return count($this->_requests);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 2. Send the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the request. After sending, all requests will have their
|
||||||
|
* responses poulated.
|
||||||
|
*
|
||||||
|
* @return bool TRUE on success, FALSE on failure.
|
||||||
|
* @throws CAS_OutOfSequenceException If called multiple times.
|
||||||
|
*/
|
||||||
|
public function send ()
|
||||||
|
{
|
||||||
|
if ($this->_sent) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'Request has already been sent cannot send again.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!count($this->_requests)) {
|
||||||
|
throw new CAS_OutOfSequenceException(
|
||||||
|
'At least one request must be added via addRequest() before the multi-request can be sent.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_sent = true;
|
||||||
|
|
||||||
|
// Initialize our handles and configure all requests.
|
||||||
|
$handles = array();
|
||||||
|
$multiHandle = curl_multi_init();
|
||||||
|
foreach ($this->_requests as $i => $request) {
|
||||||
|
$handle = $request->initAndConfigure();
|
||||||
|
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
$handles[$i] = $handle;
|
||||||
|
curl_multi_add_handle($multiHandle, $handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute the requests in parallel.
|
||||||
|
do {
|
||||||
|
curl_multi_exec($multiHandle, $running);
|
||||||
|
} while ($running > 0);
|
||||||
|
|
||||||
|
// Populate all of the responses or errors back into the request objects.
|
||||||
|
foreach ($this->_requests as $i => $request) {
|
||||||
|
$buf = curl_multi_getcontent($handles[$i]);
|
||||||
|
$request->_storeResponseBody($buf);
|
||||||
|
curl_multi_remove_handle($multiHandle, $handles[$i]);
|
||||||
|
curl_close($handles[$i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_multi_close($multiHandle);
|
||||||
|
}
|
||||||
|
}
|
200
phpCAS-1.3.6/source/CAS/Request/CurlRequest.php
Normal file
200
phpCAS-1.3.6/source/CAS/Request/CurlRequest.php
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Request/CurlRequest.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides support for performing web-requests via curl
|
||||||
|
*
|
||||||
|
* @class CAS_Request_CurlRequest
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_Request_CurlRequest
|
||||||
|
extends CAS_Request_AbstractRequest
|
||||||
|
implements CAS_Request_RequestInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set additional curl options
|
||||||
|
*
|
||||||
|
* @param array $options option to set
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setCurlOptions (array $options)
|
||||||
|
{
|
||||||
|
$this->_curlOptions = $options;
|
||||||
|
}
|
||||||
|
private $_curlOptions = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the request and store the results.
|
||||||
|
*
|
||||||
|
* @return bool true on success, false on failure.
|
||||||
|
*/
|
||||||
|
protected function sendRequest ()
|
||||||
|
{
|
||||||
|
phpCAS::traceBegin();
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* initialize the CURL session
|
||||||
|
*********************************************************/
|
||||||
|
$ch = $this->initAndConfigure();
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Perform the query
|
||||||
|
*********************************************************/
|
||||||
|
$buf = curl_exec($ch);
|
||||||
|
if ( $buf === false ) {
|
||||||
|
phpCAS::trace('curl_exec() failed');
|
||||||
|
$this->storeErrorMessage(
|
||||||
|
'CURL error #'.curl_errno($ch).': '.curl_error($ch)
|
||||||
|
);
|
||||||
|
$res = false;
|
||||||
|
} else {
|
||||||
|
$this->storeResponseBody($buf);
|
||||||
|
phpCAS::trace("Response Body: \n".$buf."\n");
|
||||||
|
$res = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
// close the CURL session
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
phpCAS::traceEnd($res);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to initialize our cURL handle and configure the request.
|
||||||
|
* This method should NOT be used outside of the CurlRequest or the
|
||||||
|
* CurlMultiRequest.
|
||||||
|
*
|
||||||
|
* @return resource The cURL handle on success, false on failure
|
||||||
|
*/
|
||||||
|
public function initAndConfigure()
|
||||||
|
{
|
||||||
|
/*********************************************************
|
||||||
|
* initialize the CURL session
|
||||||
|
*********************************************************/
|
||||||
|
$ch = curl_init($this->url);
|
||||||
|
|
||||||
|
if (version_compare(PHP_VERSION, '5.1.3', '>=')) {
|
||||||
|
//only avaible in php5
|
||||||
|
curl_setopt_array($ch, $this->_curlOptions);
|
||||||
|
} else {
|
||||||
|
foreach ($this->_curlOptions as $key => $value) {
|
||||||
|
curl_setopt($ch, $key, $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Set SSL configuration
|
||||||
|
*********************************************************/
|
||||||
|
if ($this->caCertPath) {
|
||||||
|
if ($this->validateCN) {
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
||||||
|
} else {
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
||||||
|
}
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
|
||||||
|
curl_setopt($ch, CURLOPT_CAINFO, $this->caCertPath);
|
||||||
|
phpCAS::trace('CURL: Set CURLOPT_CAINFO ' . $this->caCertPath);
|
||||||
|
} else {
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Configure curl to capture our output.
|
||||||
|
*********************************************************/
|
||||||
|
// return the CURL output into a variable
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||||
|
|
||||||
|
// get the HTTP header with a callback
|
||||||
|
curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, '_curlReadHeaders'));
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Add cookie headers to our request.
|
||||||
|
*********************************************************/
|
||||||
|
if (count($this->cookies)) {
|
||||||
|
$cookieStrings = array();
|
||||||
|
foreach ($this->cookies as $name => $val) {
|
||||||
|
$cookieStrings[] = $name.'='.$val;
|
||||||
|
}
|
||||||
|
curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookieStrings));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Add any additional headers
|
||||||
|
*********************************************************/
|
||||||
|
if (count($this->headers)) {
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Flag and Body for POST requests
|
||||||
|
*********************************************************/
|
||||||
|
if ($this->isPost) {
|
||||||
|
curl_setopt($ch, CURLOPT_POST, 1);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->postBody);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store the response body.
|
||||||
|
* This method should NOT be used outside of the CurlRequest or the
|
||||||
|
* CurlMultiRequest.
|
||||||
|
*
|
||||||
|
* @param string $body body to stor
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function _storeResponseBody ($body)
|
||||||
|
{
|
||||||
|
$this->storeResponseBody($body);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method for capturing the headers from a curl request.
|
||||||
|
*
|
||||||
|
* @param handle $ch handle of curl
|
||||||
|
* @param string $header header
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function _curlReadHeaders ($ch, $header)
|
||||||
|
{
|
||||||
|
$this->storeResponseHeader($header);
|
||||||
|
return strlen($header);
|
||||||
|
}
|
||||||
|
}
|
45
phpCAS-1.3.6/source/CAS/Request/Exception.php
Normal file
45
phpCAS-1.3.6/source/CAS/Request/Exception.php
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Request/Exception.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An Exception for problems performing requests
|
||||||
|
*
|
||||||
|
* @class CAS_Request_Exception
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_Request_Exception
|
||||||
|
extends Exception
|
||||||
|
implements CAS_Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
83
phpCAS-1.3.6/source/CAS/Request/MultiRequestInterface.php
Normal file
83
phpCAS-1.3.6/source/CAS/Request/MultiRequestInterface.php
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Request/MultiRequestInterface.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface defines a class library for performing multiple web requests
|
||||||
|
* in batches. Implementations of this interface may perform requests serially
|
||||||
|
* or in parallel.
|
||||||
|
*
|
||||||
|
* @class CAS_Request_MultiRequestInterface
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
interface CAS_Request_MultiRequestInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Add Requests
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a new Request to this batch.
|
||||||
|
* Note, implementations will likely restrict requests to their own concrete
|
||||||
|
* class hierarchy.
|
||||||
|
*
|
||||||
|
* @param CAS_Request_RequestInterface $request request interface
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been
|
||||||
|
* sent.
|
||||||
|
* @throws CAS_InvalidArgumentException If passed a Request of the wrong
|
||||||
|
* implmentation.
|
||||||
|
*/
|
||||||
|
public function addRequest (CAS_Request_RequestInterface $request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the number of requests added to this batch.
|
||||||
|
*
|
||||||
|
* @return number of request elements
|
||||||
|
*/
|
||||||
|
public function getNumRequests ();
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 2. Send the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the request. After sending, all requests will have their
|
||||||
|
* responses poulated.
|
||||||
|
*
|
||||||
|
* @return bool TRUE on success, FALSE on failure.
|
||||||
|
* @throws CAS_OutOfSequenceException If called multiple times.
|
||||||
|
*/
|
||||||
|
public function send ();
|
||||||
|
}
|
179
phpCAS-1.3.6/source/CAS/Request/RequestInterface.php
Normal file
179
phpCAS-1.3.6/source/CAS/Request/RequestInterface.php
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/Request/RequestInterface.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface defines a class library for performing web requests.
|
||||||
|
*
|
||||||
|
* @class CAS_Request_RequestInterface
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
interface CAS_Request_RequestInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* Configure the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the URL of the Request
|
||||||
|
*
|
||||||
|
* @param string $url url to set
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setUrl ($url);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a cookie to the request.
|
||||||
|
*
|
||||||
|
* @param string $name name of cookie
|
||||||
|
* @param string $value value of cookie
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function addCookie ($name, $value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an array of cookies to the request.
|
||||||
|
* The cookie array is of the form
|
||||||
|
* array('cookie_name' => 'cookie_value', 'cookie_name2' => cookie_value2')
|
||||||
|
*
|
||||||
|
* @param array $cookies cookies to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function addCookies (array $cookies);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a header string to the request.
|
||||||
|
*
|
||||||
|
* @param string $header header to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function addHeader ($header);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an array of header strings to the request.
|
||||||
|
*
|
||||||
|
* @param array $headers headers to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function addHeaders (array $headers);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make the request a POST request rather than the default GET request.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function makePost ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a POST body to the request
|
||||||
|
*
|
||||||
|
* @param string $body body to add
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setPostBody ($body);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify the path to an SSL CA certificate to validate the server with.
|
||||||
|
*
|
||||||
|
* @param string $caCertPath path to cert file
|
||||||
|
* @param boolean $validate_cn validate CN of SSL certificate
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function setSslCaCert ($caCertPath, $validate_cn = true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 2. Send the Request
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the request.
|
||||||
|
*
|
||||||
|
* @return bool TRUE on success, FALSE on failure.
|
||||||
|
* @throws CAS_OutOfSequenceException If called multiple times.
|
||||||
|
*/
|
||||||
|
public function send ();
|
||||||
|
|
||||||
|
/*********************************************************
|
||||||
|
* 3. Access the response
|
||||||
|
*********************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the headers of the response.
|
||||||
|
*
|
||||||
|
* @return array An array of header strings.
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseHeaders ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer HTTP status code of the response
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseStatusCode ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the body of response.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getResponseBody ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer a message describing any errors if the request failed.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws CAS_OutOfSequenceException If called before the Request has been sent.
|
||||||
|
*/
|
||||||
|
public function getErrorMessage ();
|
||||||
|
}
|
70
phpCAS-1.3.6/source/CAS/TypeMismatchException.php
Normal file
70
phpCAS-1.3.6/source/CAS/TypeMismatchException.php
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to Jasig under one or more contributor license
|
||||||
|
* agreements. See the NOTICE file distributed with this work for
|
||||||
|
* additional information regarding copyright ownership.
|
||||||
|
*
|
||||||
|
* Jasig licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* PHP Version 5
|
||||||
|
*
|
||||||
|
* @file CAS/InvalidArgumentException.php
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception that denotes invalid arguments were passed.
|
||||||
|
*
|
||||||
|
* @class CAS_InvalidArgumentException
|
||||||
|
* @category Authentication
|
||||||
|
* @package PhpCAS
|
||||||
|
* @author Adam Franco <afranco@middlebury.edu>
|
||||||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||||
|
* @link https://wiki.jasig.org/display/CASC/phpCAS
|
||||||
|
*/
|
||||||
|
class CAS_TypeMismatchException
|
||||||
|
extends CAS_InvalidArgumentException
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructor, provides a nice message.
|
||||||
|
*
|
||||||
|
* @param mixed $argument Argument
|
||||||
|
* @param string $argumentName Argument Name
|
||||||
|
* @param string $type Type
|
||||||
|
* @param string $message Error Message
|
||||||
|
* @param integer $code Code
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct (
|
||||||
|
$argument, $argumentName, $type, $message = '', $code = 0
|
||||||
|
) {
|
||||||
|
if (is_object($argument)) {
|
||||||
|
$foundType = get_class($argument).' object';
|
||||||
|
} else {
|
||||||
|
$foundType = gettype($argument);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct(
|
||||||
|
'type mismatched for parameter '
|
||||||
|
. $argumentName . ' (should be \'' . $type .' \'), '
|
||||||
|
. $foundType . ' given. ' . $message, $code
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
Loading…
Reference in a new issue