aboutsummaryrefslogtreecommitdiff
path: root/models/openid-php-openid-782224d/Tests/Auth/Yadis/DiscoverData.php
blob: bf02d660dcd5fa18e74784bb0b87d3377c67e3d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php

require_once "Auth/Yadis/Yadis.php";
require_once "Tests/Auth/Yadis/TestUtil.php";

global $testlist;
$testlist = array(
                  // success,  input_name,          id_name,            result_name
                  array(true,  "equiv",             "equiv",            "xrds"),
                  array(true,  "header",            "header",           "xrds"),
                  array(true,  "lowercase_header",  "lowercase_header", "xrds"),
                  array(true,  "xrds",              "xrds",             "xrds"),
                  array(true,  "xrds_ctparam",      "xrds_ctparam",     "xrds_ctparam"),
                  array(true,  "xrds_ctcase",       "xrds_ctcase",      "xrds_ctcase"),
                  array(false, "xrds_html",         "xrds_html",        "xrds_html"),
                  array(true,  "redir_equiv",       "equiv",            "xrds"),
                  array(true,  "redir_header",      "header",           "xrds"),
                  array(true,  "redir_xrds",        "xrds",             "xrds"),
                  array(false, "redir_xrds_html",   "xrds_html",        "xrds_html"),
                  array(true,  "redir_redir_equiv", "equiv",            "xrds"),
                  array(false, "404_server_response", null,             null),
                  array(false, "404_with_header",     null,             null),
                  array(false, "404_with_meta",       null,             null),
                  array(false, "201_server_response", null,             null),
                  array(false, "500_server_response", null,             null)
                  );

function getExampleXRDS()
{
    return Tests_Auth_Yadis_readdata('example-xrds.xml');
}

global $example_xrds;
$example_xrds = getExampleXRDS();

global $default_test_file;
$default_test_file = 'test1-discover.txt';

global $discover_tests;
$discover_tests = array();

function readTests($filename)
{
    $data = Tests_Auth_Yadis_readdata($filename);

    if ($data === null) {
        return null;
    }

    $tests = array();
    foreach (preg_split("/\f\n/", $data) as $case) {
        list($name, $content) = explode("\n", $case, 2);
        $tests[$name] = $content;
    }
    return $tests;
}

function getData($filename, $name)
{
    global $discover_tests;
    if (!array_key_exists($filename, $discover_tests)) {
        $data = readTests($filename);
        if ($data === null) {
            return null;
        }
        $discover_tests[$filename] = $data;
    }

    $file_tests = $discover_tests[$filename];

    if (array_key_exists($name, $file_tests)) {
        return $file_tests[$name];
    } else {
        return null;
    }
}

function fillTemplate($test_name, $template, $base_url, $example_xrds)
{
    $mapping = array(
                     array('URL_BASE/', $base_url),
                     array('<XRDS Content>', $example_xrds),
                     array('YADIS_HEADER', 'X-XRDS-Location'),
                     array('NAME', $test_name));

    foreach ($mapping as $pair) {
        list($k, $v) = $pair;
        $template = str_replace($k, $v, $template);
    }

    return $template;
}

function generateSample($test_name, $base_url,
                        $_example_xrds = null, $filename = null)
{
    global $example_xrds, $default_test_file;

    if ($_example_xrds === null) {
        $_example_xrds = $example_xrds;
    }

    if ($filename === null) {
        $filename = $default_test_file;
    }

    $template = getData($filename, $test_name);

    if ($template === null) {
        return null;
    }

    return fillTemplate($test_name, $template, $base_url, $_example_xrds);
}

function generateResult($base_url, $input_name, $id_name, $result_name, $success)
{
    $input_url = $base_url . $input_name; // urlparse.urljoin(base_url, input_name)

    // If the name is null then we expect the protocol to fail, which
    // we represent by null
    if ($id_name === null) {
        // assert result_name is null
        return array($input_url, null); // DiscoveryFailure
    }

    $result = generateSample($result_name, $base_url);
    list($headers, $content) = explode("\n\n", $result, 2);
    $header_lines = explode("\n", $headers);
    $ctype = null;
    foreach ($header_lines as $header_line) {
        if (strpos($header_line, 'Content-Type:') === 0) {
            list($temp, $ctype) = explode(":", $header_line, 2);
            $ctype = trim($ctype);
            break;
        }
    }

    $id_url = $base_url . $id_name;

    $result = new Auth_Yadis_Yadis();
    $result->uri = $id_url;
    if ($success) {
        $result->xrds_uri = $base_url . $result_name;
    } else {
        $result->xrds_uri = null;
    }
    $result->content_type = $ctype;
    $result->body = $content;
    return array($input_url, $result);
}