Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PlanetRed
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Digital Experience Group
PlanetRed
Commits
2c23f318
Commit
2c23f318
authored
15 years ago
by
Eric Rasmussen
Browse files
Options
Downloads
Patches
Plain Diff
SimpleCAS dir for cas_auth_unl
parent
62ac90af
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
plugins/cas_auth_unl/SimpleCAS.php
+274
-0
274 additions, 0 deletions
plugins/cas_auth_unl/SimpleCAS.php
with
274 additions
and
0 deletions
plugins/cas_auth_unl/SimpleCAS.php
0 → 100644
+
274
−
0
View file @
2c23f318
<?php
/**
* This is a CAS client authentication library for PHP 5.
*
* <code>
* <?php
* $protocol = new SimpleCAS_Protocol_Version2('login.unl.edu', 443, 'cas');
* $client = SimpleCAS::client($protocol);
* $client->forceAuthentication();
*
* if (isset($_GET['logout'])) {
* $client->logout();
* }
*
* if ($client->isAuthenticated()) {
* echo '<h1>Authentication Successful!</h1>';
* echo '<p>The user\'s login is '.$client->getUsername().'</p>';
* echo '<a href="?logout">Logout</a>';
* }
* </code>
*
* PHP version 5
*
* @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/
*/
class
SimpleCAS
{
/**
* Version of the CAS library.
*/
const
VERSION
=
'0.0.1'
;
/**
* Singleton CAS object
*
* @var CAS
*/
static
private
$_instance
;
/**
* Is user authenticated?
*
* @var bool
*/
private
$_authenticated
=
false
;
/**
* Protocol for the server running the CAS service.
*
* @var SimpleCAS_Protocol
*/
protected
$protocol
;
/**
* User's login name if authenticated.
*
* @var string
*/
protected
$username
;
/**
* (Optional) alternative service URL to return to after CAS authentication.
*
* @var string
*/
static
protected
$url
;
/**
* Construct a CAS client object.
*
* @param SimpleCAS_Protocol $protocol Protocol to use for authentication.
*/
private
function
__construct
(
SimpleCAS_Protocol
$protocol
)
{
$this
->
protocol
=
$protocol
;
if
(
$this
->
protocol
instanceof
SimpleCAS_SingleSignOut
&&
isset
(
$_POST
))
{
if
(
$ticket
=
$this
->
protocol
->
validateLogoutRequest
(
$_POST
))
{
$this
->
logout
(
$ticket
);
}
}
if
(
session_id
()
==
''
)
{
session_start
();
}
if
(
isset
(
$_SESSION
[
'__SIMPLECAS_TICKET'
]))
{
$this
->
_authenticated
=
true
;
}
if
(
$this
->
_authenticated
==
false
&&
isset
(
$_GET
[
'ticket'
]))
{
$this
->
validateTicket
(
$_GET
[
'ticket'
]);
}
}
/**
* Checks a ticket to see if it is valid.
*
* If the CAS server verifies the ticket, a session is created and the user
* is marked as authenticated.
*
* @param string $ticket Ticket from the CAS Server
*
* @return bool
*/
protected
function
validateTicket
(
$ticket
)
{
if
(
$uid
=
$this
->
protocol
->
validateTicket
(
$ticket
,
self
::
getURL
()))
{
$this
->
setAuthenticated
(
$uid
);
$this
->
redirect
(
self
::
getURL
());
return
true
;
}
else
{
return
false
;
}
}
/**
* Marks the current session as authenticated.
*
* @param string $uid User name returned by the CAS server.
*
* @return void
*/
protected
function
setAuthenticated
(
$uid
)
{
$_SESSION
[
'__SIMPLECAS_TICKET'
]
=
true
;
$_SESSION
[
'__SIMPLECAS_UID'
]
=
$uid
;
$this
->
_authenticated
=
true
;
}
/**
* Return the authenticated user's login name.
*
* @return string
*/
public
function
getUsername
()
{
return
$_SESSION
[
'__SIMPLECAS_UID'
];
}
/**
* Singleton interface, returns CAS object.
*
* @param CAS_Server $server CAS Server object
*
* @return CAS
*/
static
public
function
client
(
SimpleCAS_Protocol
$protocol
)
{
if
(
!
isset
(
self
::
$_instance
))
{
self
::
$_instance
=
new
self
(
$protocol
);
}
return
self
::
$_instance
;
}
/**
* If client is not authenticated, this will redirecting to login and exit.
*
* Otherwise, return the CAS object.
*
* @return CAS
*/
function
forceAuthentication
()
{
if
(
!
$this
->
isAuthenticated
())
{
self
::
redirect
(
$this
->
protocol
->
getLoginURL
(
self
::
getURL
()));
}
return
$this
;
}
/**
* Check if this user has been authenticated or not.
*
* @return bool
*/
function
isAuthenticated
()
{
return
$this
->
_authenticated
;
}
/**
* Destroys session data for this client, redirects to the server logout
* url.
*
* @param string $url URL to provide the client on logout.
*
* @return void
*/
public
function
logout
(
$url
=
''
)
{
session_destroy
();
if
(
empty
(
$url
))
{
$url
=
self
::
getURL
();
}
$this
->
redirect
(
$this
->
protocol
->
getLogoutURL
(
$url
));
}
/**
* Returns the current URL without CAS affecting parameters.
*
* @return string url
*/
static
public
function
getURL
()
{
if
(
!
empty
(
self
::
$url
))
{
return
self
::
$url
;
}
if
(
isset
(
$_SERVER
[
'HTTPS'
])
&&
!
empty
(
$_SERVER
[
'HTTPS'
])
&&
$_SERVER
[
'HTTPS'
]
==
'on'
)
{
$protocol
=
'https'
;
}
else
{
$protocol
=
'http'
;
}
$url
=
$protocol
.
'://'
.
$_SERVER
[
'SERVER_NAME'
]
.
$_SERVER
[
'REQUEST_URI'
];
$replacements
=
array
(
'/\?logout/'
=>
''
,
'/&ticket=[^&]*/'
=>
''
,
'/\?ticket=[^&;]*/'
=>
'?'
,
'/\?%26/'
=>
'?'
,
'/\?&/'
=>
'?'
,
'/\?$/'
=>
''
);
$url
=
preg_replace
(
array_keys
(
$replacements
),
array_values
(
$replacements
),
$url
);
return
$url
;
}
/**
* Set an alternative return URL
*
* @param string $url alternative return URL
*
* @return void
*/
public
static
function
setURL
(
$url
)
{
self
::
$url
=
$url
;
}
/**
* Send a header to redirect the client to another URL.
*
* @param string $url URL to redirect the client to.
*
* @return void
*/
public
static
function
redirect
(
$url
)
{
header
(
"Location:
$url
"
);
exit
();
}
/**
* Get the version of the CAS library
*
* @return string
*/
static
public
function
getVersion
()
{
return
self
::
VERSION
;
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment