Passed
Pull Request — master (#226)
by Jaime Pérez
02:34
created

MessageFactory::fromXML()   B

Complexity

Conditions 8
Paths 8

Size

Total Lines 25
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 8
eloc 21
c 1
b 0
f 0
nc 8
nop 1
dl 0
loc 25
rs 8.4444
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SAML2\XML\samlp;
6
7
use DOMElement;
8
use Exception;
9
use SAML2\Constants;
10
use Webmozart\Assert\Assert;
11
12
/**
13
 * Factory class for all SAML 2 messages.
14
 */
15
abstract class MessageFactory
16
{
17
    /**
18
     * Convert an XML element into a message.
19
     *
20
     * @param \DOMElement $xml The root XML element
21
     * @throws \Exception
22
     * @return \SAML2\XML\samlp\AbstractMessage The message
23
     *
24
     * @throws \InvalidArgumentException if assertions are false
25
     */
26
    public static function fromXML(DOMElement $xml): object
27
    {
28
        Assert::same(
29
            $xml->namespaceURI,
30
            Constants::NS_SAMLP,
31
            'Unknown namespace of SAML message: ' . var_export($xml->namespaceURI, true)
32
        );
33
34
        switch ($xml->localName) {
35
            case 'AttributeQuery':
36
                return AttributeQuery::fromXML($xml);
37
            case 'AuthnRequest':
38
                return AuthnRequest::fromXML($xml);
39
            case 'LogoutResponse':
40
                return LogoutResponse::fromXML($xml);
41
            case 'LogoutRequest':
42
                return LogoutRequest::fromXML($xml);
43
            case 'Response':
44
                return Response::fromXML($xml);
45
            case 'ArtifactResponse':
46
                return ArtifactResponse::fromXML($xml);
47
            case 'ArtifactResolve':
48
                return ArtifactResolve::fromXML($xml);
49
            default:
50
                throw new Exception('Unknown SAML message: ' . var_export($xml->localName, true));
51
        }
52
    }
53
}
54