Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

Differences Between: [Versions 310 and 402] [Versions 310 and 403]

Custom XML parser for signed and/or encrypted XML Docs

Author: Donal McMullan donal@catalyst.net.nz
License: http://www.gnu.org/copyleft/gpl.html GNU Public License
Version: 0.0.1
File Size: 317 lines (11 kb)
Included or required:0 times
Referenced: 1 time
Includes or requires: 0 files

Defines 2 classes

mnet_encxml_parser:: (2 methods):
  __construct()
  mnet_encxml_parser()

name:: (13 methods):
  initialise()
  parse()
  free_resource()
  start_element()
  parse_timestamp()
  parse_cipher()
  parse_wwwroot()
  parse_digest()
  parse_signature()
  parse_object()
  discard_data()
  parse_fault()
  end_element()


Class: mnet_encxml_parser  - X-Ref

Custom XML parser class for signed and/or encrypted XML Docs

__construct()   X-Ref
Constructor creates and initialises parser resource and calls initialise

return: bool True

mnet_encxml_parser()   X-Ref
Old syntax of class constructor. Deprecated in PHP7.


Class: name  - X-Ref

initialise()   X-Ref
Set default element handlers and initialise properties to empty.

return: bool True

parse($data)   X-Ref
Parse a block of XML text

The XML Text will be an XML-RPC request which is wrapped in an XML doc
with a signature from the sender. This envelope may be encrypted and
delivered within another XML envelope with a symmetric key. The parser
should first decrypt this XML, and then place the XML-RPC request into
the data_object property, and the signature into the signature property.

See the W3C's {@link http://www.w3.org/TR/xmlenc-core/ XML Encryption Syntax and Processing}
and {@link http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/ XML-Signature Syntax and Processing}
guidelines for more detail on the XML.

-----XML-Envelope---------------------------------
|                                                |
|    Symmetric-key--------------------------     |
|    |_____________________________________|     |
|                                                |
|    Encrypted data-------------------------     |
|    |                                     |     |
|    |  -XML-Envelope------------------    |     |
|    |  |                             |    |     |
|    |  |  --Signature-------------   |    |     |
|    |  |  |______________________|   |    |     |
|    |  |                             |    |     |
|    |  |  --Signed-Payload--------   |    |     |
|    |  |  |                      |   |    |     |
|    |  |  |   XML-RPC Request    |   |    |     |
|    |  |  |______________________|   |    |     |
|    |  |                             |    |     |
|    |  |_____________________________|    |     |
|    |_____________________________________|     |
|                                                |
|________________________________________________|

param: string  $data   The XML that you want to parse
return: bool            True on success - false on failure

free_resource()   X-Ref
Destroy the parser and free up any related resource.


start_element($parser, $name, $attrs)   X-Ref
Set the character-data handler to the right function for each element

For each tag (element) name, this function switches the character-data
handler to the function that handles that element. Note that character
data is referred to the handler in blocks of 1024 bytes.

param: mixed   $parser The XML parser
param: string  $name   The name of the tag, e.g. method_call
param: array   $attrs  The tag's attributes (if any exist).
return: bool            True

parse_timestamp($parser, $data)   X-Ref
Add the next chunk of character data to the remote_timestamp string

param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)
return: bool            True

parse_cipher($parser, $data)   X-Ref
Add the next chunk of character data to the cipher string for that tag

The XML parser calls the character-data handler with 1024-character
chunks of data. This means that the handler may be called several times
for a single tag, so we use the concatenate operator (.) to build the
tag content into a string.
We should not encounter more than one of each tag type, except for the
cipher tag. We will often see two of those. We prevent the content of
these two tags being concatenated together by counting each tag, and
using its 'number' as the key to an array of ciphers.

param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)
return: bool            True

parse_wwwroot($parser, $data)   X-Ref
Add the next chunk of character data to the remote_wwwroot string

param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)
return: bool            True

parse_digest($parser, $data)   X-Ref
Add the next chunk of character data to the digest string

param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)
return: bool            True

parse_signature($parser, $data)   X-Ref
Add the next chunk of character data to the signature string

param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)
return: bool            True

parse_object($parser, $data)   X-Ref
Add the next chunk of character data to the data_object string

param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)
return: bool            True

discard_data($parser, $data)   X-Ref
Discard the next chunk of character data

This is used for tags that we're not interested in.

param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)
return: bool            True

parse_fault($parser, $data)   X-Ref
No description

end_element($parser, $name)   X-Ref
Switch the character-data handler to ignore the next chunk of data

param: mixed   $parser The XML parser
param: string  $name   The name of the tag, e.g. method_call
return: bool            True