Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
simplesamlphp
Manage
Activity
Members
Labels
Plan
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
Perun
Perun ProxyIdP
v1
simplesamlphp
Commits
aa8fa58f
Unverified
Commit
aa8fa58f
authored
7 years ago
by
Tim van Dijen
Committed by
GitHub
7 years ago
Browse files
Options
Downloads
Patches
Plain Diff
PSR-2
; no functional changes
parent
4dc98dfb
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
modules/oauth/lib/OAuthStore.php
+163
-142
163 additions, 142 deletions
modules/oauth/lib/OAuthStore.php
with
163 additions
and
142 deletions
modules/oauth/lib/OAuthStore.php
+
163
−
142
View file @
aa8fa58f
...
@@ -11,170 +11,191 @@ require_once(dirname(dirname(__FILE__)) . '/libextinc/OAuth.php');
...
@@ -11,170 +11,191 @@ require_once(dirname(dirname(__FILE__)) . '/libextinc/OAuth.php');
* @author Mark Dobrinic, <mdobrinic@cozmanova.com>, Cozmanova bv
* @author Mark Dobrinic, <mdobrinic@cozmanova.com>, Cozmanova bv
* @package SimpleSAMLphp
* @package SimpleSAMLphp
*/
*/
class
sspmod_oauth_OAuthStore
extends
OAuthDataStore
{
class
sspmod_oauth_OAuthStore
extends
OAuthDataStore
{
private
$store
;
private
$store
;
private
$config
;
private
$config
;
private
$defaultversion
=
'1.0'
;
private
$defaultversion
=
'1.0'
;
protected
$_store_tables
=
array
(
protected
$_store_tables
=
array
(
'consumers'
=>
'consumer = array with consumer attributes'
,
'consumers'
=>
'consumer = array with consumer attributes'
,
'nonce'
=>
'nonce+consumer_key = -boolean-'
,
'nonce'
=>
'nonce+consumer_key = -boolean-'
,
'requesttorequest'
=>
'requestToken.key = array(version,callback,consumerKey,)'
,
'requesttorequest'
=>
'requestToken.key = array(version,callback,consumerKey,)'
,
'authorized'
=>
'requestToken.key, verifier = array(authenticated-user-attributes)'
,
'authorized'
=>
'requestToken.key, verifier = array(authenticated-user-attributes)'
,
'access'
=>
'accessToken.key+consumerKey = accesstoken'
,
'access'
=>
'accessToken.key+consumerKey = accesstoken'
,
'request'
=>
'requestToken.key+consumerKey = requesttoken'
,
'request'
=>
'requestToken.key+consumerKey = requesttoken'
,
);
);
function
__construct
()
{
public
function
__construct
()
$this
->
store
=
new
sspmod_core_Storage_SQLPermanentStorage
(
'oauth'
);
{
$this
->
config
=
SimpleSAML_Configuration
::
getOptionalConfig
(
'module_oauth.php'
);
$this
->
store
=
new
sspmod_core_Storage_SQLPermanentStorage
(
'oauth'
);
$this
->
config
=
SimpleSAML_Configuration
::
getOptionalConfig
(
'module_oauth.php'
);
}
}
/**
/**
* Attach the data to the token, and establish the Callback URL and verifier
* Attach the data to the token, and establish the Callback URL and verifier
* @param $requestTokenKey RequestToken that was authorized
* @param $requestTokenKey RequestToken that was authorized
* @param $data Data that is authorized and to be attached to the requestToken
* @param $data Data that is authorized and to be attached to the requestToken
* @return array(string:url, string:verifier) ; empty verifier for 1.0-response
* @return array(string:url, string:verifier) ; empty verifier for 1.0-response
*/
*/
public
function
authorize
(
$requestTokenKey
,
$data
)
{
public
function
authorize
(
$requestTokenKey
,
$data
)
$url
=
null
;
{
$url
=
null
;
// See whether to remember values from the original requestToken request:
$request_attributes
=
$this
->
store
->
get
(
'requesttorequest'
,
$requestTokenKey
,
''
);
// must be there ..
// See whether to remember values from the original requestToken request:
if
(
$request_attributes
[
'value'
])
{
$request_attributes
=
$this
->
store
->
get
(
'requesttorequest'
,
$requestTokenKey
,
''
);
// establish callback to use
// must be there ..
if
(
$request_attributes
[
'value'
][
'callback'
])
{
if
(
$request_attributes
[
'value'
])
{
$url
=
$request_attributes
[
'value'
][
'callback'
];
// establish callback to use
}
if
(
$request_attributes
[
'value'
][
'callback'
])
{
}
$url
=
$request_attributes
[
'value'
][
'callback'
];
}
}
// Is there a callback registered? This is leading, even over a supplied oauth_callback-parameter
$oConsumer
=
$this
->
lookup_consumer
(
$request_attributes
[
'value'
][
'consumerKey'
]);
// Is there a callback registered? This is leading, even over a supplied oauth_callback-parameter
if
(
$oConsumer
&&
(
$oConsumer
->
callback_url
))
$url
=
$oConsumer
->
callback_url
;
$oConsumer
=
$this
->
lookup_consumer
(
$request_attributes
[
'value'
][
'consumerKey'
]);
$verifier
=
SimpleSAML\Utils\Random
::
generateID
();
if
(
$oConsumer
&&
(
$oConsumer
->
callback_url
))
{
$url
=
\SimpleSAML\Utils\HTTP
::
addURLParameters
(
$url
,
array
(
"oauth_verifier"
=>
$verifier
));
$url
=
$oConsumer
->
callback_url
;
}
$this
->
store
->
set
(
'authorized'
,
$requestTokenKey
,
$verifier
,
$data
,
$this
->
config
->
getValue
(
'requestTokenDuration'
,
60
*
30
)
);
$verifier
=
SimpleSAML\Utils\Random
::
generateID
();
return
array
(
$url
,
$verifier
);
$url
=
\SimpleSAML\Utils\HTTP
::
addURLParameters
(
$url
,
array
(
"oauth_verifier"
=>
$verifier
));
}
$this
->
store
->
set
(
'authorized'
,
$requestTokenKey
,
$verifier
,
$data
,
$this
->
config
->
getValue
(
'requestTokenDuration'
,
60
*
30
)
);
/**
* Perform lookup whether a given token exists in the list of authorized tokens; if a verifier is
return
array
(
$url
,
$verifier
);
* passed as well, the verifier *must* match the verifier that was registered with the token<br/>
* Note that an accessToken should never be stored with a verifier
* @param $requestToken
* @param $verifier
* @return unknown_type
*/
public
function
isAuthorized
(
$requestToken
,
$verifier
=
''
)
{
SimpleSAML\Logger
::
info
(
'OAuth isAuthorized('
.
$requestToken
.
')'
);
return
$this
->
store
->
exists
(
'authorized'
,
$requestToken
,
$verifier
);
}
public
function
getAuthorizedData
(
$token
,
$verifier
=
''
)
{
SimpleSAML\Logger
::
info
(
'OAuth getAuthorizedData('
.
$token
.
')'
);
$data
=
$this
->
store
->
get
(
'authorized'
,
$token
,
$verifier
);
return
$data
[
'value'
];
}
public
function
moveAuthorizedData
(
$requestToken
,
$verifier
,
$accessTokenKey
)
{
SimpleSAML\Logger
::
info
(
'OAuth moveAuthorizedData('
.
$requestToken
.
', '
.
$accessTokenKey
.
')'
);
// Retrieve authorizedData from authorized.requestToken (with provider verifier)
$authorizedData
=
$this
->
getAuthorizedData
(
$requestToken
,
$verifier
);
// Remove the requesttoken+verifier from authorized store
$this
->
store
->
remove
(
'authorized'
,
$requestToken
,
$verifier
);
// Add accesstoken with authorizedData to authorized store (with empty verifier)
// accessTokenKey+consumer => accessToken is already registered in 'access'-table
$this
->
store
->
set
(
'authorized'
,
$accessTokenKey
,
''
,
$authorizedData
,
$this
->
config
->
getValue
(
'accessTokenDuration'
,
60
*
60
*
24
));
}
public
function
lookup_consumer
(
$consumer_key
)
{
SimpleSAML\Logger
::
info
(
'OAuth lookup_consumer('
.
$consumer_key
.
')'
);
if
(
!
$this
->
store
->
exists
(
'consumers'
,
$consumer_key
,
''
))
return
NULL
;
$consumer
=
$this
->
store
->
get
(
'consumers'
,
$consumer_key
,
''
);
$callback
=
NULL
;
if
(
$consumer
[
'value'
][
'callback_url'
])
$callback
=
$consumer
[
'value'
][
'callback_url'
];
if
(
$consumer
[
'value'
][
'RSAcertificate'
])
{
return
new
OAuthConsumer
(
$consumer
[
'value'
][
'key'
],
$consumer
[
'value'
][
'RSAcertificate'
],
$callback
);
}
else
{
return
new
OAuthConsumer
(
$consumer
[
'value'
][
'key'
],
$consumer
[
'value'
][
'secret'
],
$callback
);
}
}
}
function
lookup_token
(
$consumer
,
$tokenType
=
'default'
,
$token
)
{
/**
SimpleSAML\Logger
::
info
(
'OAuth lookup_token('
.
$consumer
->
key
.
', '
.
$tokenType
.
','
.
$token
.
')'
);
* Perform lookup whether a given token exists in the list of authorized tokens; if a verifier is
$data
=
$this
->
store
->
get
(
$tokenType
,
$token
,
$consumer
->
key
);
* passed as well, the verifier *must* match the verifier that was registered with the token<br/>
if
(
$data
==
NULL
)
throw
new
Exception
(
'Could not find token'
);
* Note that an accessToken should never be stored with a verifier
return
$data
[
'value'
];
* @param $requestToken
* @param $verifier
* @return unknown_type
*/
public
function
isAuthorized
(
$requestToken
,
$verifier
=
''
)
{
SimpleSAML\Logger
::
info
(
'OAuth isAuthorized('
.
$requestToken
.
')'
);
return
$this
->
store
->
exists
(
'authorized'
,
$requestToken
,
$verifier
);
}
}
function
lookup_nonce
(
$consumer
,
$token
,
$nonce
,
$timestamp
)
{
public
function
getAuthorizedData
(
$token
,
$verifier
=
''
)
SimpleSAML\Logger
::
info
(
'OAuth lookup_nonce('
.
$consumer
.
', '
.
$token
.
','
.
$nonce
.
')'
);
{
if
(
$this
->
store
->
exists
(
'nonce'
,
$nonce
,
$consumer
->
key
))
return
TRUE
;
SimpleSAML\Logger
::
info
(
'OAuth getAuthorizedData('
.
$token
.
')'
)
;
$this
->
store
->
s
et
(
'
nonce'
,
$nonce
,
$consumer
->
key
,
TRUE
,
$this
->
config
->
getValue
(
'nonceCache'
,
60
*
60
*
24
*
14
)
);
$data
=
$this
->
store
->
g
et
(
'
authorized'
,
$token
,
$verifier
);
return
FALSE
;
return
$data
[
'value'
]
;
}
}
function
new_request_token
(
$consumer
,
$callback
=
null
,
$version
=
null
)
{
public
function
moveAuthorizedData
(
$requestToken
,
$verifier
,
$accessTokenKey
)
SimpleSAML\Logger
::
info
(
'OAuth new_request_token('
.
$consumer
.
')'
);
{
SimpleSAML\Logger
::
info
(
'OAuth moveAuthorizedData('
.
$requestToken
.
', '
.
$accessTokenKey
.
')'
);
$lifetime
=
$this
->
config
->
getValue
(
'requestTokenDuration'
,
60
*
30
);
// Retrieve authorizedData from authorized.requestToken (with provider verifier)
$token
=
new
OAuthToken
(
SimpleSAML\Utils\Random
::
generateID
(),
SimpleSAML\Utils\Random
::
generateID
());
$authorizedData
=
$this
->
getAuthorizedData
(
$requestToken
,
$verifier
);
$token
->
callback
=
$callback
;
// OAuth1.0-RevA
$this
->
store
->
set
(
'request'
,
$token
->
key
,
$consumer
->
key
,
$token
,
$lifetime
);
// Remove the requesttoken+verifier from authorized store
$this
->
store
->
remove
(
'authorized'
,
$requestToken
,
$verifier
);
// also store in requestToken->key => array('callback'=>CallbackURL, 'version'=>oauth_version
$request_attributes
=
array
(
// Add accesstoken with authorizedData to authorized store (with empty verifier)
'callback'
=>
$callback
,
// accessTokenKey+consumer => accessToken is already registered in 'access'-table
'version'
=>
(
$version
?
$version
:
$this
->
defaultversion
),
$this
->
store
->
set
(
'authorized'
,
$accessTokenKey
,
''
,
$authorizedData
,
$this
->
config
->
getValue
(
'accessTokenDuration'
,
60
*
60
*
24
));
'consumerKey'
=>
$consumer
->
key
,
}
);
$this
->
store
->
set
(
'requesttorequest'
,
$token
->
key
,
''
,
$request_attributes
,
$lifetime
);
public
function
lookup_consumer
(
$consumer_key
)
{
// also store in requestToken->key => Consumer->key (enables consumer-lookup during reqToken-authorization stage)
SimpleSAML\Logger
::
info
(
'OAuth lookup_consumer('
.
$consumer_key
.
')'
);
$this
->
store
->
set
(
'requesttoconsumer'
,
$token
->
key
,
''
,
$consumer
->
key
,
$lifetime
);
if
(
!
$this
->
store
->
exists
(
'consumers'
,
$consumer_key
,
''
))
{
return
null
;
}
$consumer
=
$this
->
store
->
get
(
'consumers'
,
$consumer_key
,
''
);
$callback
=
null
;
if
(
$consumer
[
'value'
][
'callback_url'
])
{
$callback
=
$consumer
[
'value'
][
'callback_url'
];
}
if
(
$consumer
[
'value'
][
'RSAcertificate'
])
{
return
new
OAuthConsumer
(
$consumer
[
'value'
][
'key'
],
$consumer
[
'value'
][
'RSAcertificate'
],
$callback
);
}
else
{
return
new
OAuthConsumer
(
$consumer
[
'value'
][
'key'
],
$consumer
[
'value'
][
'secret'
],
$callback
);
}
}
function
lookup_token
(
$consumer
,
$tokenType
=
'default'
,
$token
)
{
SimpleSAML\Logger
::
info
(
'OAuth lookup_token('
.
$consumer
->
key
.
', '
.
$tokenType
.
','
.
$token
.
')'
);
$data
=
$this
->
store
->
get
(
$tokenType
,
$token
,
$consumer
->
key
);
if
(
$data
==
null
)
{
throw
new
Exception
(
'Could not find token'
);
}
return
$data
[
'value'
];
}
function
lookup_nonce
(
$consumer
,
$token
,
$nonce
,
$timestamp
)
{
SimpleSAML\Logger
::
info
(
'OAuth lookup_nonce('
.
$consumer
.
', '
.
$token
.
','
.
$nonce
.
')'
);
if
(
$this
->
store
->
exists
(
'nonce'
,
$nonce
,
$consumer
->
key
))
{
return
true
;
}
$this
->
store
->
set
(
'nonce'
,
$nonce
,
$consumer
->
key
,
TRUE
,
$this
->
config
->
getValue
(
'nonceCache'
,
60
*
60
*
24
*
14
));
return
false
;
}
function
new_request_token
(
$consumer
,
$callback
=
null
,
$version
=
null
)
{
SimpleSAML\Logger
::
info
(
'OAuth new_request_token('
.
$consumer
.
')'
);
$lifetime
=
$this
->
config
->
getValue
(
'requestTokenDuration'
,
60
*
30
);
$token
=
new
OAuthToken
(
SimpleSAML\Utils\Random
::
generateID
(),
SimpleSAML\Utils\Random
::
generateID
());
$token
->
callback
=
$callback
;
// OAuth1.0-RevA
$this
->
store
->
set
(
'request'
,
$token
->
key
,
$consumer
->
key
,
$token
,
$lifetime
);
// also store in requestToken->key => array('callback'=>CallbackURL, 'version'=>oauth_version
$request_attributes
=
array
(
'callback'
=>
$callback
,
'version'
=>
(
$version
?
$version
:
$this
->
defaultversion
),
'consumerKey'
=>
$consumer
->
key
,
);
$this
->
store
->
set
(
'requesttorequest'
,
$token
->
key
,
''
,
$request_attributes
,
$lifetime
);
// also store in requestToken->key => Consumer->key (enables consumer-lookup during reqToken-authorization stage)
$this
->
store
->
set
(
'requesttoconsumer'
,
$token
->
key
,
''
,
$consumer
->
key
,
$lifetime
);
return
$token
;
return
$token
;
}
}
function
new_access_token
(
$requestToken
,
$consumer
,
$verifier
=
null
)
{
function
new_access_token
(
$requestToken
,
$consumer
,
$verifier
=
null
)
SimpleSAML\Logger
::
info
(
'OAuth new_access_token('
.
$requestToken
.
','
.
$consumer
.
')'
);
{
$accesstoken
=
new
OAuthToken
(
SimpleSAML\Utils\Random
::
generateID
(),
SimpleSAML\Utils\Random
::
generateID
());
SimpleSAML\Logger
::
info
(
'OAuth new_access_token('
.
$requestToken
.
','
.
$consumer
.
')'
);
$this
->
store
->
set
(
'access'
,
$accesstoken
->
key
,
$consumer
->
key
,
$accesstoken
,
$this
->
config
->
getValue
(
'accessTokenDuration'
,
60
*
60
*
24
)
);
$accesstoken
=
new
OAuthToken
(
SimpleSAML\Utils\Random
::
generateID
(),
SimpleSAML\Utils\Random
::
generateID
());
$this
->
store
->
set
(
'access'
,
$accesstoken
->
key
,
$consumer
->
key
,
$accesstoken
,
$this
->
config
->
getValue
(
'accessTokenDuration'
,
60
*
60
*
24
)
);
return
$accesstoken
;
return
$accesstoken
;
}
}
/**
/**
* Return OAuthConsumer-instance that a given requestToken was issued to
* Return OAuthConsumer-instance that a given requestToken was issued to
* @param $requestTokenKey
* @param $requestTokenKey
* @return unknown_type
* @return unknown_type
*/
*/
public
function
lookup_consumer_by_requestToken
(
$requestTokenKey
)
{
public
function
lookup_consumer_by_requestToken
(
$requestTokenKey
)
SimpleSAML\Logger
::
info
(
'OAuth lookup_consumer_by_requestToken('
.
$requestTokenKey
.
')'
);
{
if
(
!
$this
->
store
->
exists
(
'requesttorequest'
,
$requestTokenKey
,
''
))
return
NULL
;
SimpleSAML\Logger
::
info
(
'OAuth lookup_consumer_by_requestToken('
.
$requestTokenKey
.
')'
);
if
(
!
$this
->
store
->
exists
(
'requesttorequest'
,
$requestTokenKey
,
''
))
{
$request
=
$this
->
store
->
get
(
'requesttorequest'
,
$requestTokenKey
,
''
);
return
null
;
$consumerKey
=
$request
[
'value'
][
'consumerKey'
];
}
if
(
!
$consumerKey
)
{
return
NULL
;
}
$consumer
=
$this
->
store
->
get
(
'consumers'
,
$consumerKey
[
'value'
],
''
);
return
$consumer
[
'value'
];
}
$request
=
$this
->
store
->
get
(
'requesttorequest'
,
$requestTokenKey
,
''
);
$consumerKey
=
$request
[
'value'
][
'consumerKey'
];
if
(
!
$consumerKey
)
{
return
null
;
}
$consumer
=
$this
->
store
->
get
(
'consumers'
,
$consumerKey
[
'value'
],
''
);
return
$consumer
[
'value'
];
}
}
}
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