This commit is contained in:
Django Doucet 2023-04-21 15:27:02 -06:00
parent f396c6da4e
commit 023ba25f38

View file

@ -110,6 +110,13 @@ class Signature {
} }
} }
/**
* Verifies the http signatures
*
* @param WP_REQUEST | Array $request
* @return void
* @author Django Doucet
*/
public static function verify_http_signature( $request ) { public static function verify_http_signature( $request ) {
$headers = $request->get_headers(); $headers = $request->get_headers();
@ -172,21 +179,13 @@ class Signature {
} }
public static function default_server_headers() { /**
$headers = array( * Gets the signature algorithm from the signature header
'(request-target)' => strtolower( $_SERVER['REQUEST_METHOD'] ) . ' ' . $_SERVER['REQUEST_URI'], *
'content-type' => $_SERVER['CONTENT_TYPE'], * @param array $signature_block
'content-length' => $_SERVER['CONTENT_LENGTH'], * @return string algorithm
); * @author Django Doucet
foreach ( $_SERVER as $k => $v ) { */
if ( \strpos( $k, 'HTTP_' ) === 0 ) {
$field = \str_replace( '_', '-', \strtolower( \substr( $k, 5 ) ) );
$headers[ $field ] = $v;
}
}
return $headers;
}
public static function get_signature_algorithm( $signature_block ) { public static function get_signature_algorithm( $signature_block ) {
if ( $signature_block['algorithm'] ) { if ( $signature_block['algorithm'] ) {
switch ( $signature_block['algorithm'] ) { switch ( $signature_block['algorithm'] ) {
@ -199,6 +198,13 @@ class Signature {
return false; return false;
} }
/**
* Parses the Signature header
*
* @param array $header
* @return array signature parts
* @author Django Doucet <django.doucet@webdevstudios.com>
*/
public static function parse_signature_header( $header ) { public static function parse_signature_header( $header ) {
$ret = array(); $ret = array();
$matches = array(); $matches = array();
@ -230,6 +236,15 @@ class Signature {
return $ret; return $ret;
} }
/**
* Gets the header data from the included pseudo headers
*
* @param array $signed_headers
* @param array $signature_block (pseudo-headers)
* @param array $headers (original http headers)
* @return signed headers for comparison
* @author Django Doucet
*/
public static function get_signed_data( $signed_headers, $signature_block, $headers ) { public static function get_signed_data( $signed_headers, $signature_block, $headers ) {
$signed_data = ''; $signed_data = '';
// This also verifies time-based values by returning false if any of these are out of range. // This also verifies time-based values by returning false if any of these are out of range.