forked from yql/yql-tables
-
Notifications
You must be signed in to change notification settings - Fork 1
/
openid.normalize.xml
64 lines (52 loc) · 1.54 KB
/
openid.normalize.xml
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
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd" https="true">
<meta>
<author>Erik Eldridge</author>
<description>
Normalize url for openid usage
</description>
<sampleQuery>select * from {table} where id='yahoo.com'</sampleQuery>
<documentationURL>http://wiki.github.com/erikeldridge/yql-openid-support/</documentationURL>
</meta>
<bindings>
<select produces="JSON">
<inputs>
<key id="id" type="xs:string" paramType="variable" required="true"/>
</inputs>
<execute><![CDATA[
//ref: http://openid.net/specs/openid-authentication-2_0.html#normalization_example
function normalizeIdentifier (identifier) {
var pattern = '^(http[s]*)?'//scheme
+ '(:\/\/)?'//separator
+'([^:?#/]+)'//domain
+'([^:?#]+)?',//path
match = identifier.match(new RegExp(pattern)),
normalized = '';
if (undefined === match[1]) {
normalized += 'http';
} else {
normalized += match[1];
}
normalized += '://';
if (undefined === match[3]) {
return false;
}
normalized += match[3];
// if there's a path
if (match[4]) {
normalized += match[4];
} else {
normalized += '/';
}
return normalized;
}
var normalized = normalizeIdentifier(id);
if (!normalized) {
response.object = { state : "error", details : "domain required, eg example.com" };
} else {
response.object = { "state" : "success", "id" : normalized };
}
]]></execute>
</select>
</bindings>
</table>