author | Michael Krelin <hacker@klever.net> | 2008-03-01 16:14:55 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2008-03-01 16:14:55 (UTC) |
commit | fe00dd0be8fd88dc8179eed7a38663f07c1288a7 (patch) (unidiff) | |
tree | 7c16d78aef4f216192b197a37420ec9c0a77d2c4 | |
parent | d85adfb349b3c7a988bec21fcbad86f5f98c70de (diff) | |
download | foxri-fe00dd0be8fd88dc8179eed7a38663f07c1288a7.zip foxri-fe00dd0be8fd88dc8179eed7a38663f07c1288a7.tar.gz foxri-fe00dd0be8fd88dc8179eed7a38663f07c1288a7.tar.bz2 |
added more OpenID service types and handling of append='qxri' attribute
* added OpenID 1.1 and 2.0 service types to SERVICE_CLASSES
* append qxri to URI in presence of append='qxri' attribute (append='authority'
is yet to be handled)
* added more OpenID service type URIs to friendlyServiceName()
Signed-off-by: Michael Krelin <hacker@klever.net>
-rwxr-xr-x | src/components/xriProtocolHandler.js | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/components/xriProtocolHandler.js b/src/components/xriProtocolHandler.js index 1105874..3d27784 100755 --- a/src/components/xriProtocolHandler.js +++ b/src/components/xriProtocolHandler.js | |||
@@ -40,24 +40,27 @@ const XP_STRING_TYPE = 2; | |||
40 | const XP_BOOLEAN_TYPE = 3; | 40 | const XP_BOOLEAN_TYPE = 3; |
41 | const XP_UNORDERED_NODE_ITERATOR_TYPE = 4; | 41 | const XP_UNORDERED_NODE_ITERATOR_TYPE = 4; |
42 | const XP_ORDERED_NODE_ITERATOR_TYPE = 5; | 42 | const XP_ORDERED_NODE_ITERATOR_TYPE = 5; |
43 | const XP_UNORDERED_NODE_SNAPSHOT_TYPE = 6; | 43 | const XP_UNORDERED_NODE_SNAPSHOT_TYPE = 6; |
44 | const XP_ORDERED_NODE_SNAPSHOT_TYPE = 7; | 44 | const XP_ORDERED_NODE_SNAPSHOT_TYPE = 7; |
45 | const XP_ANY_UNORDERED_NODE_TYPE = 8; | 45 | const XP_ANY_UNORDERED_NODE_TYPE = 8; |
46 | const XP_FIRST_ORDERED_NODE_TYPE = 9; | 46 | const XP_FIRST_ORDERED_NODE_TYPE = 9; |
47 | 47 | ||
48 | 48 | ||
49 | var SERVICE_CLASSES = { | 49 | var SERVICE_CLASSES = { |
50 | 'xri://+i-service*(+contact)*($v*1.0)': 'i-contact', | 50 | 'xri://+i-service*(+contact)*($v*1.0)': 'i-contact', |
51 | 'http://openid.net/signon/1.0': 'openid', | 51 | 'http://openid.net/signon/1.0': 'openid', |
52 | 'http://openid.net/signon/1.1': 'openid', | ||
53 | 'http://specs.openid.net/auth/2.0/signon': 'openid', | ||
54 | 'http://specs.openid.net/auth/2.0/server': 'openid', | ||
52 | 'xri://$res*auth*($v*2.0)': 'res-auth', | 55 | 'xri://$res*auth*($v*2.0)': 'res-auth', |
53 | 'xri://+i-service*(+authn)*(+saml)*($v*1.0)': 'authn-saml', | 56 | 'xri://+i-service*(+authn)*(+saml)*($v*1.0)': 'authn-saml', |
54 | 'xri://+i-service*(+metadata)*(+saml)*($v*1.0)' : 'metadata-saml', | 57 | 'xri://+i-service*(+metadata)*(+saml)*($v*1.0)' : 'metadata-saml', |
55 | 'xri://+i-service*(+forwarding)*($v*1.0)': 'i-forwarding' | 58 | 'xri://+i-service*(+forwarding)*($v*1.0)': 'i-forwarding' |
56 | }; | 59 | }; |
57 | 60 | ||
58 | 61 | ||
59 | const HTML_HEAD = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n\ | 62 | const HTML_HEAD = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n\ |
60 | <html xmlns=\"http://www.w3.org/1999/xhtml\">\n\ | 63 | <html xmlns=\"http://www.w3.org/1999/xhtml\">\n\ |
61 | <head>\n\ | 64 | <head>\n\ |
62 | <title>FoXRI Explorer - #QXRI#</title>\n\ | 65 | <title>FoXRI Explorer - #QXRI#</title>\n\ |
63 | <link href=\"chrome://foxri/content/foxri_explorer.css\" rel=\"stylesheet\" type=\"text/css\" />\n\ | 66 | <link href=\"chrome://foxri/content/foxri_explorer.css\" rel=\"stylesheet\" type=\"text/css\" />\n\ |
@@ -228,28 +231,29 @@ function renderService(srv, doc, qxri) | |||
228 | if (!knownServiceType) { | 231 | if (!knownServiceType) { |
229 | var srvType = guessServiceTypeByMime(m.nodeValue); | 232 | var srvType = guessServiceTypeByMime(m.nodeValue); |
230 | knownServiceType = srvType? srvType : null; | 233 | knownServiceType = srvType? srvType : null; |
231 | } | 234 | } |
232 | 235 | ||
233 | mediaTypes.push(m.nodeValue); | 236 | mediaTypes.push(m.nodeValue); |
234 | if (m.nodeValue) { | 237 | if (m.nodeValue) { |
235 | html_mediatypes += "<strong>Media Type:</strong> " + m.nodeValue + "<br/>"; | 238 | html_mediatypes += "<strong>Media Type:</strong> " + m.nodeValue + "<br/>"; |
236 | } | 239 | } |
237 | } | 240 | } |
238 | 241 | ||
239 | 242 | ||
240 | res = runExpr(doc, srv, "xrd:URI/text()"); | 243 | res = runExpr(doc, srv, "xrd:URI"); |
241 | var u; | 244 | var uu; |
242 | while (u = res.iterateNext()) { | 245 | while (uu = res.iterateNext()) { |
243 | if (!u.nodeValue) | 246 | var u = uu.firstChild; |
247 | if (!(u.nodeValue && u.nodeType==3)) | ||
244 | continue; | 248 | continue; |
245 | 249 | ||
246 | var srvType = guessServiceTypeByURI(u.nodeValue); | 250 | var srvType = guessServiceTypeByURI(u.nodeValue); |
247 | if (!knownServiceType) { | 251 | if (!knownServiceType) { |
248 | knownServiceType = srvType; | 252 | knownServiceType = srvType; |
249 | } | 253 | } |
250 | 254 | ||
251 | html_uris += "<div class=\"" + getServiceClass(srvType) + "\">"; | 255 | html_uris += "<div class=\"" + getServiceClass(srvType) + "\">"; |
252 | 256 | ||
253 | var linkContent = u.nodeValue; | 257 | var linkContent = u.nodeValue; |
254 | var uriParts = u.nodeValue.match('^(.*):(.*)$'); | 258 | var uriParts = u.nodeValue.match('^(.*):(.*)$'); |
255 | if (!uriParts) | 259 | if (!uriParts) |
@@ -276,25 +280,32 @@ function renderService(srv, doc, qxri) | |||
276 | else if (uriParts[2] == "add") { | 280 | else if (uriParts[2] == "add") { |
277 | linkContent = "<img src=\"chrome://foxri/content/skype_add_large.png\" alt=\"Add " + uriParts[1] + " to Skype\"/>"; | 281 | linkContent = "<img src=\"chrome://foxri/content/skype_add_large.png\" alt=\"Add " + uriParts[1] + " to Skype\"/>"; |
278 | } | 282 | } |
279 | } | 283 | } |
280 | } | 284 | } |
281 | else if (uriParts[1] == 'aim') { | 285 | else if (uriParts[1] == 'aim') { |
282 | uriParts = uriParts[2].match('^(.*)\\?.*screenname=([^&]*)', 'i'); | 286 | uriParts = uriParts[2].match('^(.*)\\?.*screenname=([^&]*)', 'i'); |
283 | if (uriParts) { | 287 | if (uriParts) { |
284 | linkContent = "<img src=\"chrome://foxri/content/aim_logo.gif\" alt=\"Chat with " + uriParts[2] + "\"/> Chat with " + uriParts[2]; | 288 | linkContent = "<img src=\"chrome://foxri/content/aim_logo.gif\" alt=\"Chat with " + uriParts[2] + "\"/> Chat with " + uriParts[2]; |
285 | } | 289 | } |
286 | } | 290 | } |
287 | 291 | ||
288 | html_uris += "<a href=\""+u.nodeValue+"\">" | 292 | var linkhref = u.nodeValue; |
293 | var xrap = uu.getAttribute('append'); | ||
294 | if(xrap=='qxri') { | ||
295 | linkhref += qxri.replace(/^xri:\/\//,''); | ||
296 | }else if(xrap!=null){ | ||
297 | dump("Unhandled @append: "+xrap+"\n"); | ||
298 | } | ||
299 | html_uris += "<a href=\""+linkhref+"\">" | ||
289 | + linkContent + "</a>"; | 300 | + linkContent + "</a>"; |
290 | html_uris += "</div>"; | 301 | html_uris += "</div>"; |
291 | } | 302 | } |
292 | 303 | ||
293 | var html = "<div class=\"service srv_" + getServiceClass(knownServiceType) + "\">\n"; | 304 | var html = "<div class=\"service srv_" + getServiceClass(knownServiceType) + "\">\n"; |
294 | html += html_types; | 305 | html += html_types; |
295 | html += html_paths; | 306 | html += html_paths; |
296 | html += html_mediatypes; | 307 | html += html_mediatypes; |
297 | if (html_uris) { | 308 | if (html_uris) { |
298 | html += "<strong>URI(s):</strong><br/>\n"; | 309 | html += "<strong>URI(s):</strong><br/>\n"; |
299 | html += html_uris; | 310 | html += html_uris; |
300 | } | 311 | } |
@@ -383,25 +394,30 @@ function guessServiceTypeByMime(mimeType) | |||
383 | return "image"; | 394 | return "image"; |
384 | } | 395 | } |
385 | return null; | 396 | return null; |
386 | } | 397 | } |
387 | 398 | ||
388 | 399 | ||
389 | 400 | ||
390 | function friendlyServiceName(srvType, uri) | 401 | function friendlyServiceName(srvType, uri) |
391 | { | 402 | { |
392 | if (srvType && srvType == "xri://+i-service*(+contact)*($v*1.0)") { | 403 | if (srvType && srvType == "xri://+i-service*(+contact)*($v*1.0)") { |
393 | return "Contact Service"; | 404 | return "Contact Service"; |
394 | } | 405 | } |
395 | else if (srvType && srvType == "http://openid.net/signon/1.0") { | 406 | else if (srvType && ( |
407 | srvType == "http://openid.net/signon/1.0" | ||
408 | || srvType == "http://openid.net/signon/1.1" | ||
409 | || srvType == "http://specs.openid.net/auth/2.0/signon" | ||
410 | || srcType == "http://specs.openid.net/auth/2.0/server" | ||
411 | ) ) { | ||
396 | return "OpenID Authentication Service"; | 412 | return "OpenID Authentication Service"; |
397 | } | 413 | } |
398 | else if (srvType && srvType == "xri://$res*auth*($v*2.0)") { | 414 | else if (srvType && srvType == "xri://$res*auth*($v*2.0)") { |
399 | return "Authority Resolution Service"; | 415 | return "Authority Resolution Service"; |
400 | } | 416 | } |
401 | else { | 417 | else { |
402 | if (uri == null) { | 418 | if (uri == null) { |
403 | return "Generic Service"; | 419 | return "Generic Service"; |
404 | } | 420 | } |
405 | if (uri.match(/^https?:/i)) { | 421 | if (uri.match(/^https?:/i)) { |
406 | return "Web Link"; | 422 | return "Web Link"; |
407 | } | 423 | } |