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
0
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
d79b51e5
Unverified
Commit
d79b51e5
authored
7 years ago
by
Tim van Dijen
Committed by
GitHub
7 years ago
Browse files
Options
Downloads
Patches
Plain Diff
PSR-2
parent
9d33e884
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/libextinc/OAuth.php
+149
-77
149 additions, 77 deletions
modules/oauth/libextinc/OAuth.php
with
149 additions
and
77 deletions
modules/oauth/libextinc/OAuth.php
+
149
−
77
View file @
d79b51e5
...
@@ -21,14 +21,17 @@ if (!class_exists('OAuthConsumer')) {
...
@@ -21,14 +21,17 @@ if (!class_exists('OAuthConsumer')) {
class
OAuthConsumer
{
class
OAuthConsumer
{
public
$key
;
public
$key
;
public
$secret
;
public
$secret
;
public
$callback_url
;
function
__construct
(
$key
,
$secret
,
$callback_url
=
NULL
)
{
public
function
__construct
(
$key
,
$secret
,
$callback_url
=
null
)
{
$this
->
key
=
$key
;
$this
->
key
=
$key
;
$this
->
secret
=
$secret
;
$this
->
secret
=
$secret
;
$this
->
callback_url
=
$callback_url
;
$this
->
callback_url
=
$callback_url
;
}
}
function
__toString
()
{
public
function
__toString
()
{
return
"OAuthConsumer[key=
$this->key
,secret=
$this->secret
]"
;
return
"OAuthConsumer[key=
$this->key
,secret=
$this->secret
]"
;
}
}
}
}
...
@@ -43,7 +46,8 @@ class OAuthToken {
...
@@ -43,7 +46,8 @@ class OAuthToken {
* key = the token
* key = the token
* secret = the token secret
* secret = the token secret
*/
*/
function
__construct
(
$key
,
$secret
)
{
public
function
__construct
(
$key
,
$secret
)
{
$this
->
key
=
$key
;
$this
->
key
=
$key
;
$this
->
secret
=
$secret
;
$this
->
secret
=
$secret
;
}
}
...
@@ -52,7 +56,8 @@ class OAuthToken {
...
@@ -52,7 +56,8 @@ class OAuthToken {
* generates the basic string serialization of a token that a server
* generates the basic string serialization of a token that a server
* would respond to request_token and access_token calls with
* would respond to request_token and access_token calls with
*/
*/
function
to_string
()
{
public
function
to_string
()
{
return
"oauth_token="
.
return
"oauth_token="
.
OAuthUtil
::
urlencode_rfc3986
(
$this
->
key
)
.
OAuthUtil
::
urlencode_rfc3986
(
$this
->
key
)
.
"&oauth_token_secret="
.
"&oauth_token_secret="
.
...
@@ -69,7 +74,8 @@ class OAuthToken {
...
@@ -69,7 +74,8 @@ class OAuthToken {
* A class for implementing a Signature Method
* A class for implementing a Signature Method
* See section 9 ("Signing Requests") in the spec
* See section 9 ("Signing Requests") in the spec
*/
*/
abstract
class
OAuthSignatureMethod
{
abstract
class
OAuthSignatureMethod
{
/**
/**
* Needs to return the name of the Signature Method (ie HMAC-SHA1)
* Needs to return the name of the Signature Method (ie HMAC-SHA1)
* @return string
* @return string
...
@@ -96,7 +102,8 @@ abstract class OAuthSignatureMethod {
...
@@ -96,7 +102,8 @@ abstract class OAuthSignatureMethod {
* @param string $signature
* @param string $signature
* @return bool
* @return bool
*/
*/
public
function
check_signature
(
$request
,
$consumer
,
$token
,
$signature
)
{
public
function
check_signature
(
$request
,
$consumer
,
$token
,
$signature
)
{
$built
=
$this
->
build_signature
(
$request
,
$consumer
,
$token
);
$built
=
$this
->
build_signature
(
$request
,
$consumer
,
$token
);
// Check for zero length, although unlikely here
// Check for zero length, although unlikely here
...
@@ -125,12 +132,15 @@ abstract class OAuthSignatureMethod {
...
@@ -125,12 +132,15 @@ abstract class OAuthSignatureMethod {
* character (ASCII code 38) even if empty.
* character (ASCII code 38) even if empty.
* - Chapter 9.2 ("HMAC-SHA1")
* - Chapter 9.2 ("HMAC-SHA1")
*/
*/
class
OAuthSignatureMethod_HMAC_SHA1
extends
OAuthSignatureMethod
{
class
OAuthSignatureMethod_HMAC_SHA1
extends
OAuthSignatureMethod
function
get_name
()
{
{
function
get_name
()
{
return
"HMAC-SHA1"
;
return
"HMAC-SHA1"
;
}
}
public
function
build_signature
(
$request
,
$consumer
,
$token
)
{
public
function
build_signature
(
$request
,
$consumer
,
$token
)
{
$base_string
=
$request
->
get_signature_base_string
();
$base_string
=
$request
->
get_signature_base_string
();
$request
->
base_string
=
$base_string
;
$request
->
base_string
=
$base_string
;
...
@@ -151,8 +161,10 @@ class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
...
@@ -151,8 +161,10 @@ class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
* over a secure channel such as HTTPS. It does not use the Signature Base String.
* over a secure channel such as HTTPS. It does not use the Signature Base String.
* - Chapter 9.4 ("PLAINTEXT")
* - Chapter 9.4 ("PLAINTEXT")
*/
*/
class
OAuthSignatureMethod_PLAINTEXT
extends
OAuthSignatureMethod
{
class
OAuthSignatureMethod_PLAINTEXT
extends
OAuthSignatureMethod
public
function
get_name
()
{
{
public
function
get_name
()
{
return
"PLAINTEXT"
;
return
"PLAINTEXT"
;
}
}
...
@@ -165,7 +177,8 @@ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
...
@@ -165,7 +177,8 @@ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
* Please note that the second encoding MUST NOT happen in the SignatureMethod, as
* Please note that the second encoding MUST NOT happen in the SignatureMethod, as
* OAuthRequest handles this!
* OAuthRequest handles this!
*/
*/
public
function
build_signature
(
$request
,
$consumer
,
$token
)
{
public
function
build_signature
(
$request
,
$consumer
,
$token
)
{
$key_parts
=
array
(
$key_parts
=
array
(
$consumer
->
secret
,
$consumer
->
secret
,
(
$token
)
?
$token
->
secret
:
""
(
$token
)
?
$token
->
secret
:
""
...
@@ -187,8 +200,10 @@ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
...
@@ -187,8 +200,10 @@ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
* specification.
* specification.
* - Chapter 9.3 ("RSA-SHA1")
* - Chapter 9.3 ("RSA-SHA1")
*/
*/
abstract
class
OAuthSignatureMethod_RSA_SHA1
extends
OAuthSignatureMethod
{
abstract
class
OAuthSignatureMethod_RSA_SHA1
extends
OAuthSignatureMethod
public
function
get_name
()
{
{
public
function
get_name
()
{
return
"RSA-SHA1"
;
return
"RSA-SHA1"
;
}
}
...
@@ -206,7 +221,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
...
@@ -206,7 +221,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
// Either way should return a string representation of the certificate
// Either way should return a string representation of the certificate
protected
abstract
function
fetch_private_cert
(
&
$request
);
protected
abstract
function
fetch_private_cert
(
&
$request
);
public
function
build_signature
(
$request
,
$consumer
,
$token
)
{
public
function
build_signature
(
$request
,
$consumer
,
$token
)
{
$base_string
=
$request
->
get_signature_base_string
();
$base_string
=
$request
->
get_signature_base_string
();
$request
->
base_string
=
$base_string
;
$request
->
base_string
=
$base_string
;
...
@@ -217,7 +233,7 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
...
@@ -217,7 +233,7 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
$privatekeyid
=
openssl_get_privatekey
(
$cert
);
$privatekeyid
=
openssl_get_privatekey
(
$cert
);
// Sign using the key
// Sign using the key
$ok
=
openssl_sign
(
$base_string
,
$signature
,
$privatekeyid
);
openssl_sign
(
$base_string
,
$signature
,
$privatekeyid
);
// Release the key resource
// Release the key resource
openssl_free_key
(
$privatekeyid
);
openssl_free_key
(
$privatekeyid
);
...
@@ -225,7 +241,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
...
@@ -225,7 +241,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
return
base64_encode
(
$signature
);
return
base64_encode
(
$signature
);
}
}
public
function
check_signature
(
$request
,
$consumer
,
$token
,
$signature
)
{
public
function
check_signature
(
$request
,
$consumer
,
$token
,
$signature
)
{
$decoded_sig
=
base64_decode
(
$signature
);
$decoded_sig
=
base64_decode
(
$signature
);
$base_string
=
$request
->
get_signature_base_string
();
$base_string
=
$request
->
get_signature_base_string
();
...
@@ -246,7 +263,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
...
@@ -246,7 +263,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
}
}
}
}
class
OAuthRequest
{
class
OAuthRequest
{
protected
$parameters
;
protected
$parameters
;
protected
$http_method
;
protected
$http_method
;
protected
$http_url
;
protected
$http_url
;
...
@@ -255,9 +273,10 @@ class OAuthRequest {
...
@@ -255,9 +273,10 @@ class OAuthRequest {
public
static
$version
=
'1.0'
;
public
static
$version
=
'1.0'
;
public
static
$POST_INPUT
=
'php://input'
;
public
static
$POST_INPUT
=
'php://input'
;
function
__construct
(
$http_method
,
$http_url
,
$parameters
=
NULL
)
{
function
__construct
(
$http_method
,
$http_url
,
$parameters
=
null
)
{
$parameters
=
(
$parameters
)
?
$parameters
:
array
();
$parameters
=
(
$parameters
)
?
$parameters
:
array
();
$parameters
=
array_merge
(
OAuthUtil
::
parse_parameters
(
parse_url
(
$http_url
,
PHP_URL_QUERY
)),
$parameters
);
$parameters
=
array_merge
(
OAuthUtil
::
parse_parameters
(
parse_url
(
$http_url
,
PHP_URL_QUERY
)),
$parameters
);
$this
->
parameters
=
$parameters
;
$this
->
parameters
=
$parameters
;
$this
->
http_method
=
$http_method
;
$this
->
http_method
=
$http_method
;
$this
->
http_url
=
$http_url
;
$this
->
http_url
=
$http_url
;
...
@@ -267,7 +286,8 @@ class OAuthRequest {
...
@@ -267,7 +286,8 @@ class OAuthRequest {
/**
/**
* attempt to build up a request from what was passed to the server
* attempt to build up a request from what was passed to the server
*/
*/
public
static
function
from_request
(
$http_method
=
NULL
,
$http_url
=
NULL
,
$parameters
=
NULL
)
{
public
static
function
from_request
(
$http_method
=
NULL
,
$http_url
=
null
,
$parameters
=
null
)
{
$scheme
=
(
!
isset
(
$_SERVER
[
'HTTPS'
])
||
$_SERVER
[
'HTTPS'
]
!=
"on"
)
$scheme
=
(
!
isset
(
$_SERVER
[
'HTTPS'
])
||
$_SERVER
[
'HTTPS'
]
!=
"on"
)
?
'http'
?
'http'
:
'https'
;
:
'https'
;
...
@@ -319,7 +339,8 @@ class OAuthRequest {
...
@@ -319,7 +339,8 @@ class OAuthRequest {
/**
/**
* pretty much a helper function to set up the request
* pretty much a helper function to set up the request
*/
*/
public
static
function
from_consumer_and_token
(
$consumer
,
$token
,
$http_method
,
$http_url
,
$parameters
=
NULL
)
{
public
static
function
from_consumer_and_token
(
$consumer
,
$token
,
$http_method
,
$http_url
,
$parameters
=
null
)
{
$parameters
=
(
$parameters
)
?
$parameters
:
array
();
$parameters
=
(
$parameters
)
?
$parameters
:
array
();
$defaults
=
array
(
"oauth_version"
=>
OAuthRequest
::
$version
,
$defaults
=
array
(
"oauth_version"
=>
OAuthRequest
::
$version
,
"oauth_nonce"
=>
OAuthRequest
::
generate_nonce
(),
"oauth_nonce"
=>
OAuthRequest
::
generate_nonce
(),
...
@@ -333,7 +354,8 @@ class OAuthRequest {
...
@@ -333,7 +354,8 @@ class OAuthRequest {
return
new
OAuthRequest
(
$http_method
,
$http_url
,
$parameters
);
return
new
OAuthRequest
(
$http_method
,
$http_url
,
$parameters
);
}
}
public
function
set_parameter
(
$name
,
$value
,
$allow_duplicates
=
true
)
{
public
function
set_parameter
(
$name
,
$value
,
$allow_duplicates
=
true
)
{
if
(
$allow_duplicates
&&
isset
(
$this
->
parameters
[
$name
]))
{
if
(
$allow_duplicates
&&
isset
(
$this
->
parameters
[
$name
]))
{
// We have already added parameter(s) with this name, so add to the list
// We have already added parameter(s) with this name, so add to the list
if
(
is_scalar
(
$this
->
parameters
[
$name
]))
{
if
(
is_scalar
(
$this
->
parameters
[
$name
]))
{
...
@@ -348,15 +370,18 @@ class OAuthRequest {
...
@@ -348,15 +370,18 @@ class OAuthRequest {
}
}
}
}
public
function
get_parameter
(
$name
)
{
public
function
get_parameter
(
$name
)
{
return
isset
(
$this
->
parameters
[
$name
])
?
$this
->
parameters
[
$name
]
:
null
;
return
isset
(
$this
->
parameters
[
$name
])
?
$this
->
parameters
[
$name
]
:
null
;
}
}
public
function
get_parameters
()
{
public
function
get_parameters
()
{
return
$this
->
parameters
;
return
$this
->
parameters
;
}
}
public
function
unset_parameter
(
$name
)
{
public
function
unset_parameter
(
$name
)
{
unset
(
$this
->
parameters
[
$name
]);
unset
(
$this
->
parameters
[
$name
]);
}
}
...
@@ -364,7 +389,8 @@ class OAuthRequest {
...
@@ -364,7 +389,8 @@ class OAuthRequest {
* The request parameters, sorted and concatenated into a normalized string.
* The request parameters, sorted and concatenated into a normalized string.
* @return string
* @return string
*/
*/
public
function
get_signable_parameters
()
{
public
function
get_signable_parameters
()
{
// Grab all parameters
// Grab all parameters
$params
=
$this
->
parameters
;
$params
=
$this
->
parameters
;
...
@@ -384,7 +410,8 @@ class OAuthRequest {
...
@@ -384,7 +410,8 @@ class OAuthRequest {
* and the parameters (normalized), each urlencoded
* and the parameters (normalized), each urlencoded
* and the concated with &.
* and the concated with &.
*/
*/
public
function
get_signature_base_string
()
{
public
function
get_signature_base_string
()
{
$parts
=
array
(
$parts
=
array
(
$this
->
get_normalized_http_method
(),
$this
->
get_normalized_http_method
(),
$this
->
get_normalized_http_url
(),
$this
->
get_normalized_http_url
(),
...
@@ -399,7 +426,8 @@ class OAuthRequest {
...
@@ -399,7 +426,8 @@ class OAuthRequest {
/**
/**
* just uppercases the http method
* just uppercases the http method
*/
*/
public
function
get_normalized_http_method
()
{
public
function
get_normalized_http_method
()
{
return
strtoupper
(
$this
->
http_method
);
return
strtoupper
(
$this
->
http_method
);
}
}
...
@@ -407,7 +435,8 @@ class OAuthRequest {
...
@@ -407,7 +435,8 @@ class OAuthRequest {
* parses the url and rebuilds it to be
* parses the url and rebuilds it to be
* scheme://host/path
* scheme://host/path
*/
*/
public
function
get_normalized_http_url
()
{
public
function
get_normalized_http_url
()
{
$parts
=
parse_url
(
$this
->
http_url
);
$parts
=
parse_url
(
$this
->
http_url
);
$scheme
=
(
isset
(
$parts
[
'scheme'
]))
?
$parts
[
'scheme'
]
:
'http'
;
$scheme
=
(
isset
(
$parts
[
'scheme'
]))
?
$parts
[
'scheme'
]
:
'http'
;
...
@@ -425,7 +454,8 @@ class OAuthRequest {
...
@@ -425,7 +454,8 @@ class OAuthRequest {
/**
/**
* builds a url usable for a GET request
* builds a url usable for a GET request
*/
*/
public
function
to_url
()
{
public
function
to_url
()
{
$post_data
=
$this
->
to_postdata
();
$post_data
=
$this
->
to_postdata
();
$out
=
$this
->
get_normalized_http_url
();
$out
=
$this
->
get_normalized_http_url
();
if
(
$post_data
)
{
if
(
$post_data
)
{
...
@@ -437,16 +467,18 @@ class OAuthRequest {
...
@@ -437,16 +467,18 @@ class OAuthRequest {
/**
/**
* builds the data one would send in a POST request
* builds the data one would send in a POST request
*/
*/
public
function
to_postdata
()
{
public
function
to_postdata
()
{
return
OAuthUtil
::
build_http_query
(
$this
->
parameters
);
return
OAuthUtil
::
build_http_query
(
$this
->
parameters
);
}
}
/**
/**
* builds the Authorization: header
* builds the Authorization: header
*/
*/
public
function
to_header
(
$realm
=
null
)
{
public
function
to_header
(
$realm
=
null
)
{
$first
=
true
;
$first
=
true
;
if
(
$realm
)
{
if
(
$realm
)
{
$out
=
'Authorization: OAuth realm="'
.
OAuthUtil
::
urlencode_rfc3986
(
$realm
)
.
'"'
;
$out
=
'Authorization: OAuth realm="'
.
OAuthUtil
::
urlencode_rfc3986
(
$realm
)
.
'"'
;
$first
=
false
;
$first
=
false
;
}
else
}
else
...
@@ -454,7 +486,9 @@ class OAuthRequest {
...
@@ -454,7 +486,9 @@ class OAuthRequest {
$total
=
array
();
$total
=
array
();
foreach
(
$this
->
parameters
as
$k
=>
$v
)
{
foreach
(
$this
->
parameters
as
$k
=>
$v
)
{
if
(
substr
(
$k
,
0
,
5
)
!=
"oauth"
)
continue
;
if
(
substr
(
$k
,
0
,
5
)
!=
"oauth"
)
{
continue
;
}
if
(
is_array
(
$v
))
{
if
(
is_array
(
$v
))
{
throw
new
OAuthException
(
'Arrays not supported in headers'
);
throw
new
OAuthException
(
'Arrays not supported in headers'
);
}
}
...
@@ -468,12 +502,14 @@ class OAuthRequest {
...
@@ -468,12 +502,14 @@ class OAuthRequest {
return
$out
;
return
$out
;
}
}
public
function
__toString
()
{
public
function
__toString
()
{
return
$this
->
to_url
();
return
$this
->
to_url
();
}
}
public
function
sign_request
(
$signature_method
,
$consumer
,
$token
)
{
public
function
sign_request
(
$signature_method
,
$consumer
,
$token
)
{
$this
->
set_parameter
(
$this
->
set_parameter
(
"oauth_signature_method"
,
"oauth_signature_method"
,
$signature_method
->
get_name
(),
$signature_method
->
get_name
(),
...
@@ -483,7 +519,8 @@ class OAuthRequest {
...
@@ -483,7 +519,8 @@ class OAuthRequest {
$this
->
set_parameter
(
"oauth_signature"
,
$signature
,
false
);
$this
->
set_parameter
(
"oauth_signature"
,
$signature
,
false
);
}
}
public
function
build_signature
(
$signature_method
,
$consumer
,
$token
)
{
public
function
build_signature
(
$signature_method
,
$consumer
,
$token
)
{
$signature
=
$signature_method
->
build_signature
(
$this
,
$consumer
,
$token
);
$signature
=
$signature_method
->
build_signature
(
$this
,
$consumer
,
$token
);
return
$signature
;
return
$signature
;
}
}
...
@@ -491,14 +528,16 @@ class OAuthRequest {
...
@@ -491,14 +528,16 @@ class OAuthRequest {
/**
/**
* util function: current timestamp
* util function: current timestamp
*/
*/
private
static
function
generate_timestamp
()
{
private
static
function
generate_timestamp
()
{
return
time
();
return
time
();
}
}
/**
/**
* util function: current nonce
* util function: current nonce
*/
*/
private
static
function
generate_nonce
()
{
private
static
function
generate_nonce
()
{
$mt
=
microtime
();
$mt
=
microtime
();
$rand
=
mt_rand
();
$rand
=
mt_rand
();
...
@@ -506,18 +545,21 @@ class OAuthRequest {
...
@@ -506,18 +545,21 @@ class OAuthRequest {
}
}
}
}
class
OAuthServer
{
class
OAuthServer
{
protected
$timestamp_threshold
=
300
;
// in seconds, five minutes
protected
$timestamp_threshold
=
300
;
// in seconds, five minutes
protected
$version
=
'1.0'
;
// hi blaine
protected
$version
=
'1.0'
;
// hi blaine
protected
$signature_methods
=
array
();
protected
$signature_methods
=
array
();
protected
$data_store
;
protected
$data_store
;
function
__construct
(
$data_store
)
{
function
__construct
(
$data_store
)
{
$this
->
data_store
=
$data_store
;
$this
->
data_store
=
$data_store
;
}
}
public
function
add_signature_method
(
$signature_method
)
{
public
function
add_signature_method
(
$signature_method
)
{
$this
->
signature_methods
[
$signature_method
->
get_name
()]
=
$this
->
signature_methods
[
$signature_method
->
get_name
()]
=
$signature_method
;
$signature_method
;
}
}
...
@@ -528,7 +570,8 @@ class OAuthServer {
...
@@ -528,7 +570,8 @@ class OAuthServer {
* process a request_token request
* process a request_token request
* returns the request token on success
* returns the request token on success
*/
*/
public
function
fetch_request_token
(
&
$request
)
{
public
function
fetch_request_token
(
&
$request
)
{
$this
->
get_version
(
$request
);
$this
->
get_version
(
$request
);
$consumer
=
$this
->
get_consumer
(
$request
);
$consumer
=
$this
->
get_consumer
(
$request
);
...
@@ -549,7 +592,8 @@ class OAuthServer {
...
@@ -549,7 +592,8 @@ class OAuthServer {
* process an access_token request
* process an access_token request
* returns the access token on success
* returns the access token on success
*/
*/
public
function
fetch_access_token
(
&
$request
)
{
public
function
fetch_access_token
(
&
$request
)
{
$this
->
get_version
(
$request
);
$this
->
get_version
(
$request
);
$consumer
=
$this
->
get_consumer
(
$request
);
$consumer
=
$this
->
get_consumer
(
$request
);
...
@@ -569,7 +613,8 @@ class OAuthServer {
...
@@ -569,7 +613,8 @@ class OAuthServer {
/**
/**
* verify an api call, checks all the parameters
* verify an api call, checks all the parameters
*/
*/
public
function
verify_request
(
&
$request
)
{
public
function
verify_request
(
&
$request
)
{
$this
->
get_version
(
$request
);
$this
->
get_version
(
$request
);
$consumer
=
$this
->
get_consumer
(
$request
);
$consumer
=
$this
->
get_consumer
(
$request
);
$token
=
$this
->
get_token
(
$request
,
$consumer
,
"access"
);
$token
=
$this
->
get_token
(
$request
,
$consumer
,
"access"
);
...
@@ -581,7 +626,8 @@ class OAuthServer {
...
@@ -581,7 +626,8 @@ class OAuthServer {
/**
/**
* version 1
* version 1
*/
*/
private
function
get_version
(
&
$request
)
{
private
function
get_version
(
&
$request
)
{
$version
=
$request
->
get_parameter
(
"oauth_version"
);
$version
=
$request
->
get_parameter
(
"oauth_version"
);
if
(
!
$version
)
{
if
(
!
$version
)
{
// Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
// Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
...
@@ -597,7 +643,8 @@ class OAuthServer {
...
@@ -597,7 +643,8 @@ class OAuthServer {
/**
/**
* figure out the signature with some defaults
* figure out the signature with some defaults
*/
*/
private
function
get_signature_method
(
$request
)
{
private
function
get_signature_method
(
$request
)
{
$signature_method
=
$request
instanceof
OAuthRequest
$signature_method
=
$request
instanceof
OAuthRequest
?
$request
->
get_parameter
(
"oauth_signature_method"
)
?
$request
->
get_parameter
(
"oauth_signature_method"
)
:
NULL
;
:
NULL
;
...
@@ -622,7 +669,8 @@ class OAuthServer {
...
@@ -622,7 +669,8 @@ class OAuthServer {
/**
/**
* try to find the consumer for the provided request's consumer key
* try to find the consumer for the provided request's consumer key
*/
*/
private
function
get_consumer
(
$request
)
{
private
function
get_consumer
(
$request
)
{
$consumer_key
=
$request
instanceof
OAuthRequest
$consumer_key
=
$request
instanceof
OAuthRequest
?
$request
->
get_parameter
(
"oauth_consumer_key"
)
?
$request
->
get_parameter
(
"oauth_consumer_key"
)
:
NULL
;
:
NULL
;
...
@@ -642,10 +690,11 @@ class OAuthServer {
...
@@ -642,10 +690,11 @@ class OAuthServer {
/**
/**
* try to find the token for the provided request's token key
* try to find the token for the provided request's token key
*/
*/
private
function
get_token
(
$request
,
$consumer
,
$token_type
=
"access"
)
{
private
function
get_token
(
$request
,
$consumer
,
$token_type
=
"access"
)
{
$token_field
=
$request
instanceof
OAuthRequest
$token_field
=
$request
instanceof
OAuthRequest
?
$request
->
get_parameter
(
'oauth_token'
)
?
$request
->
get_parameter
(
'oauth_token'
)
:
NULL
;
:
null
;
if
(
!
empty
(
$token_field
))
{
if
(
!
empty
(
$token_field
))
{
$token
=
$this
->
data_store
->
lookup_token
(
$token
=
$this
->
data_store
->
lookup_token
(
...
@@ -665,14 +714,15 @@ class OAuthServer {
...
@@ -665,14 +714,15 @@ class OAuthServer {
* all-in-one function to check the signature on a request
* all-in-one function to check the signature on a request
* should guess the signature method appropriately
* should guess the signature method appropriately
*/
*/
private
function
check_signature
(
$request
,
$consumer
,
$token
)
{
private
function
check_signature
(
$request
,
$consumer
,
$token
)
{
// this should probably be in a different method
// this should probably be in a different method
$timestamp
=
$request
instanceof
OAuthRequest
$timestamp
=
$request
instanceof
OAuthRequest
?
$request
->
get_parameter
(
'oauth_timestamp'
)
?
$request
->
get_parameter
(
'oauth_timestamp'
)
:
NULL
;
:
null
;
$nonce
=
$request
instanceof
OAuthRequest
$nonce
=
$request
instanceof
OAuthRequest
?
$request
->
get_parameter
(
'oauth_nonce'
)
?
$request
->
get_parameter
(
'oauth_nonce'
)
:
NULL
;
:
null
;
$this
->
check_timestamp
(
$timestamp
);
$this
->
check_timestamp
(
$timestamp
);
$this
->
check_nonce
(
$consumer
,
$token
,
$nonce
,
$timestamp
);
$this
->
check_nonce
(
$consumer
,
$token
,
$nonce
,
$timestamp
);
...
@@ -695,11 +745,13 @@ class OAuthServer {
...
@@ -695,11 +745,13 @@ class OAuthServer {
/**
/**
* check that the timestamp is new enough
* check that the timestamp is new enough
*/
*/
private
function
check_timestamp
(
$timestamp
)
{
private
function
check_timestamp
(
$timestamp
)
if
(
!
$timestamp
)
{
if
(
!
$timestamp
)
{
throw
new
OAuthException
(
throw
new
OAuthException
(
'Missing timestamp parameter. The parameter is required'
'Missing timestamp parameter. The parameter is required'
);
);
}
// verify that timestamp is recentish
// verify that timestamp is recentish
$now
=
time
();
$now
=
time
();
...
@@ -713,11 +765,13 @@ class OAuthServer {
...
@@ -713,11 +765,13 @@ class OAuthServer {
/**
/**
* check that the nonce is not repeated
* check that the nonce is not repeated
*/
*/
private
function
check_nonce
(
$consumer
,
$token
,
$nonce
,
$timestamp
)
{
private
function
check_nonce
(
$consumer
,
$token
,
$nonce
,
$timestamp
)
if
(
!
$nonce
)
{
if
(
!
$nonce
)
{
throw
new
OAuthException
(
throw
new
OAuthException
(
'Missing nonce parameter. The parameter is required'
'Missing nonce parameter. The parameter is required'
);
);
}
// verify that the nonce is uniqueish
// verify that the nonce is uniqueish
$found
=
$this
->
data_store
->
lookup_nonce
(
$found
=
$this
->
data_store
->
lookup_nonce
(
...
@@ -730,27 +784,32 @@ class OAuthServer {
...
@@ -730,27 +784,32 @@ class OAuthServer {
throw
new
OAuthException
(
"Nonce already used:
$nonce
"
);
throw
new
OAuthException
(
"Nonce already used:
$nonce
"
);
}
}
}
}
}
}
class
OAuthDataStore
{
class
OAuthDataStore
function
lookup_consumer
(
$consumer_key
)
{
{
function
lookup_consumer
(
$consumer_key
)
{
// implement me
// implement me
}
}
function
lookup_token
(
$consumer
,
$token_type
,
$token
)
{
function
lookup_token
(
$consumer
,
$token_type
,
$token
)
{
// implement me
// implement me
}
}
function
lookup_nonce
(
$consumer
,
$token
,
$nonce
,
$timestamp
)
{
function
lookup_nonce
(
$consumer
,
$token
,
$nonce
,
$timestamp
)
{
// implement me
// implement me
}
}
function
new_request_token
(
$consumer
,
$callback
=
null
)
{
function
new_request_token
(
$consumer
,
$callback
=
null
)
{
// return a new token attached to this consumer
// return a new token attached to this consumer
}
}
function
new_access_token
(
$token
,
$consumer
,
$verifier
=
null
)
{
function
new_access_token
(
$token
,
$consumer
,
$verifier
=
null
)
{
// return a new access token attached to this consumer
// return a new access token attached to this consumer
// for the user associated with this token if the request token
// for the user associated with this token if the request token
// is authorized
// is authorized
...
@@ -759,8 +818,10 @@ class OAuthDataStore {
...
@@ -759,8 +818,10 @@ class OAuthDataStore {
}
}
class
OAuthUtil
{
class
OAuthUtil
public
static
function
urlencode_rfc3986
(
$input
)
{
{
public
static
function
urlencode_rfc3986
(
$input
)
{
if
(
is_array
(
$input
))
{
if
(
is_array
(
$input
))
{
return
array_map
(
array
(
'OAuthUtil'
,
'urlencode_rfc3986'
),
$input
);
return
array_map
(
array
(
'OAuthUtil'
,
'urlencode_rfc3986'
),
$input
);
}
else
if
(
is_scalar
(
$input
))
{
}
else
if
(
is_scalar
(
$input
))
{
...
@@ -778,7 +839,8 @@ class OAuthUtil {
...
@@ -778,7 +839,8 @@ class OAuthUtil {
// This decode function isn't taking into consideration the above
// This decode function isn't taking into consideration the above
// modifications to the encoding process. However, this method doesn't
// modifications to the encoding process. However, this method doesn't
// seem to be used anywhere so leaving it as is.
// seem to be used anywhere so leaving it as is.
public
static
function
urldecode_rfc3986
(
$string
)
{
public
static
function
urldecode_rfc3986
(
$string
)
{
return
urldecode
(
$string
);
return
urldecode
(
$string
);
}
}
...
@@ -787,7 +849,8 @@ class OAuthUtil {
...
@@ -787,7 +849,8 @@ class OAuthUtil {
// Can filter out any non-oauth parameters if needed (default behaviour)
// Can filter out any non-oauth parameters if needed (default behaviour)
// May 28th, 2010 - method updated to tjerk.meesters for a speed improvement.
// May 28th, 2010 - method updated to tjerk.meesters for a speed improvement.
// see http://code.google.com/p/oauth/issues/detail?id=163
// see http://code.google.com/p/oauth/issues/detail?id=163
public
static
function
split_header
(
$header
,
$only_allow_oauth_parameters
=
true
)
{
public
static
function
split_header
(
$header
,
$only_allow_oauth_parameters
=
true
)
{
$params
=
array
();
$params
=
array
();
if
(
preg_match_all
(
'/('
.
(
$only_allow_oauth_parameters
?
'oauth_'
:
''
)
.
'[a-z_-]*)=(:?"([^"]*)"|([^,]*))/'
,
$header
,
$matches
))
{
if
(
preg_match_all
(
'/('
.
(
$only_allow_oauth_parameters
?
'oauth_'
:
''
)
.
'[a-z_-]*)=(:?"([^"]*)"|([^,]*))/'
,
$header
,
$matches
))
{
foreach
(
$matches
[
1
]
as
$i
=>
$h
)
{
foreach
(
$matches
[
1
]
as
$i
=>
$h
)
{
...
@@ -801,7 +864,8 @@ class OAuthUtil {
...
@@ -801,7 +864,8 @@ class OAuthUtil {
}
}
// helper to try to sort out headers for people who aren't running apache
// helper to try to sort out headers for people who aren't running apache
public
static
function
get_headers
()
{
public
static
function
get_headers
()
{
if
(
function_exists
(
'apache_request_headers'
))
{
if
(
function_exists
(
'apache_request_headers'
))
{
// we need this to get the actual Authorization: header
// we need this to get the actual Authorization: header
// because apache tends to tell us it doesn't exist
// because apache tends to tell us it doesn't exist
...
@@ -812,7 +876,7 @@ class OAuthUtil {
...
@@ -812,7 +876,7 @@ class OAuthUtil {
// returns the headers in the same case as they are in the
// returns the headers in the same case as they are in the
// request
// request
$out
=
array
();
$out
=
array
();
foreach
(
$headers
AS
$key
=>
$value
)
{
foreach
(
$headers
as
$key
=>
$value
)
{
$key
=
str_replace
(
$key
=
str_replace
(
" "
,
" "
,
"-"
,
"-"
,
...
@@ -824,10 +888,12 @@ class OAuthUtil {
...
@@ -824,10 +888,12 @@ class OAuthUtil {
// otherwise we don't have apache and are just going to have to hope
// otherwise we don't have apache and are just going to have to hope
// that $_SERVER actually contains what we need
// that $_SERVER actually contains what we need
$out
=
array
();
$out
=
array
();
if
(
isset
(
$_SERVER
[
'CONTENT_TYPE'
])
)
if
(
isset
(
$_SERVER
[
'CONTENT_TYPE'
]))
{
$out
[
'Content-Type'
]
=
$_SERVER
[
'CONTENT_TYPE'
];
$out
[
'Content-Type'
]
=
$_SERVER
[
'CONTENT_TYPE'
];
if
(
isset
(
$_ENV
[
'CONTENT_TYPE'
])
)
}
if
(
isset
(
$_ENV
[
'CONTENT_TYPE'
]))
{
$out
[
'Content-Type'
]
=
$_ENV
[
'CONTENT_TYPE'
];
$out
[
'Content-Type'
]
=
$_ENV
[
'CONTENT_TYPE'
];
}
foreach
(
$_SERVER
as
$key
=>
$value
)
{
foreach
(
$_SERVER
as
$key
=>
$value
)
{
if
(
substr
(
$key
,
0
,
5
)
==
"HTTP_"
)
{
if
(
substr
(
$key
,
0
,
5
)
==
"HTTP_"
)
{
...
@@ -853,8 +919,11 @@ class OAuthUtil {
...
@@ -853,8 +919,11 @@ class OAuthUtil {
// This function takes a input like a=b&a=c&d=e and returns the parsed
// This function takes a input like a=b&a=c&d=e and returns the parsed
// parameters like this
// parameters like this
// array('a' => array('b','c'), 'd' => 'e')
// array('a' => array('b','c'), 'd' => 'e')
public
static
function
parse_parameters
(
$input
)
{
public
static
function
parse_parameters
(
$input
)
if
(
!
isset
(
$input
)
||
!
$input
)
return
array
();
{
if
(
!
isset
(
$input
)
||
!
$input
)
{
return
array
();
}
$pairs
=
explode
(
'&'
,
$input
);
$pairs
=
explode
(
'&'
,
$input
);
...
@@ -882,8 +951,11 @@ class OAuthUtil {
...
@@ -882,8 +951,11 @@ class OAuthUtil {
return
$parsed_parameters
;
return
$parsed_parameters
;
}
}
public
static
function
build_http_query
(
$params
)
{
public
static
function
build_http_query
(
$params
)
if
(
!
$params
)
return
''
;
{
if
(
!
$params
)
{
return
''
;
}
// Urlencode both keys and values
// Urlencode both keys and values
$keys
=
OAuthUtil
::
urlencode_rfc3986
(
array_keys
(
$params
));
$keys
=
OAuthUtil
::
urlencode_rfc3986
(
array_keys
(
$params
));
...
...
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