Permalink
Browse files

Added WebSocket WebID authentication test.

  • Loading branch information...
1 parent 7775f56 commit 0af5455873379dae7c96a4e615a70c618c5e3a27 @dlongley dlongley committed May 7, 2011
Showing with 709 additions and 1 deletion.
  1. +574 −0 tests/nodejs-ws-webid.js
  2. +3 −1 tests/tls.html
  3. +132 −0 tests/ws-webid.js
View
@@ -21,6 +21,7 @@
<script type="text/javascript" src="forge/tls.js"></script>
<script type="text/javascript" src="forge/tlssocket.js"></script>
<script type="text/javascript" src="forge/http.js"></script>
+ <script type="text/javascript" src="ws-webid.js"></script>
<script type="text/javascript">
//<![CDATA[
@@ -209,7 +210,7 @@
{
client.clearCookies();
}
-
+
function websocket_test()
{
// create certificate
@@ -404,6 +405,7 @@
<button id="client_cookies" onclick="javascript:return client_cookies();">cookies</button>
<button id="clear_cookies" onclick="javascript:return client_clear_cookies();">clear cookies</button>
<button id="websocket" onclick="javascript:return websocket_test();">websocket test</button>
+ <button id="websocket-webid" onclick="javascript:return websocket_webid('localhost', 8080);">websocket webid test</button>
</div>
</fieldset>
View
@@ -0,0 +1,132 @@
+var websocket_webid = function(host, port)
+{
+ var cat = 'ws';
+
+ // TODO: get private key and certificate from local storage
+ var privateKey =
+ '-----BEGIN RSA PRIVATE KEY-----\r\n' +
+'MIICXAIBAAKBgQCTmE8QLARsC57Z1OrOaLM6AS3fn70N7BvlU7z7yw8UpcJA/jOl\r\n' +
+'NWu7eS9uzuckdVZ9FE0+x3DRvhtDI6K+18dcrUWtl5ADWXcs1QS3/7bGh7IybFyY\r\n' +
+'0xT4VzLHcx6K4PNmfkjAQdyOz/EsuRqZ/ngIQ2tdHdkkzdQPECbTvFeG2wIDAQAB\r\n' +
+'AoGAds3l7l2QHaxo7GzfqNBMXEdwto2tLxS8C6eQ+pkkBXm72HcF+Vj75AcTMD2p\r\n' +
+'fwZYXQxHdV4yqRI+fZeku7uTA/3yBAAvNobbEN5jtHnq0ZTO/HO8HuHkKrCvD8c3\r\n' +
+'0rJV6lNIuaARI9jZFf6HVchW3PMjKUpYhTs/sFhRxmsMpTkCQQDu8TPzXRmN1aw8\r\n' +
+'tSI2Nyn8QUy9bw/12tlVaZIhrcVCiJl7JHGqSCowTqZlwmJIjd4W0zWjTvS7tEeO\r\n' +
+'FaZHtP8lAkEAniGvm8S9zyzmhWRRIuU6EE2dtTbeAa5aSOK3nBaaNu2cHUxWle+J\r\n' +
+'8lE4uequ9wqDG1AfOLobPmHReccmOI6N/wJAIP/I1/RkohT/a4bsiaZGsyLlkUf0\r\n' +
+'YVTvLP+ege44zv6Ei+A1nnnG8dL64hTdc/27zVUwFDTEUeQM+c99nmudzQJBAApY\r\n' +
+'qeTHOqQTjAGuTqC53tKyQV9Z96yke8PJEbpkwDJX2Z8RH5kv0xbHua5wbII9bdab\r\n' +
+'p29OvfmW7N3K6fVJXoECQHK8FDC0i8v1Ui8FoBmt+Z1c1+/9TCEE0abUQ6rfOUbm\r\n' +
+'XHMMac/n4qDs0OoCjR4u46dpoK+WN7zcg56tToFPVow=\r\n' +
+'-----END RSA PRIVATE KEY-----';
+ var certificate =
+ '-----BEGIN CERTIFICATE-----\r\n' +
+'MIICgDCCAemgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRMwEQYDVQQDEwpKb2hu\r\n' +
+'IFNtaXRoMRMwEQYDVQQHEwpCbGFja3NidXJnMREwDwYDVQQIEwhWaXJnaW5pYTEL\r\n' +
+'MAkGA1UEBhMCVVMxDDAKBgNVBAoTA0ZvbzAeFw0xMDExMjYxNzUxMzJaFw0xMTEx\r\n' +
+'MjYxNzUxMzJaMFgxEzARBgNVBAMTCkpvaG4gU21pdGgxEzARBgNVBAcTCkJsYWNr\r\n' +
+'c2J1cmcxETAPBgNVBAgTCFZpcmdpbmlhMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD\r\n' +
+'Rm9vMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTmE8QLARsC57Z1OrOaLM6\r\n' +
+'AS3fn70N7BvlU7z7yw8UpcJA/jOlNWu7eS9uzuckdVZ9FE0+x3DRvhtDI6K+18dc\r\n' +
+'rUWtl5ADWXcs1QS3/7bGh7IybFyY0xT4VzLHcx6K4PNmfkjAQdyOz/EsuRqZ/ngI\r\n' +
+'Q2tdHdkkzdQPECbTvFeG2wIDAQABo1owWDAMBgNVHRMEBTADAQH/MAsGA1UdDwQE\r\n' +
+'AwIC9DA7BgNVHREENDAyhjBodHRwOi8vd2ViaWQuZGlnaXRhbGJhemFhci5jb20v\r\n' +
+'aWRzLzE1MzQ1NzI2NDcjbWUwDQYJKoZIhvcNAQEFBQADgYEAPNm8albI4w6anynw\r\n' +
+'XE/+00sCVks9BbgTcIpRqZPGqSuTRwoYW35isNLDqFqIUdVREMvFrEn3nOlOyKi0\r\n' +
+'29G8JtLHFSXZsqf38Zou/bGAhtEH1AVEbM2bRtEnG8IW24jL8hiciz4htxmjnkHN\r\n' +
+'JnQ8SQtUSWplGnz0vMFEOv6JbnI=\r\n' +
+'-----END CERTIFICATE-----';
+
+ // create websocket
+ var ws = new WebSocket('ws://' + host + ':' + port);
+ forge.log.debug(cat, 'Created WebSocket', ws);
+
+ // create TLS client
+ var success = false;
+ var tls = forge.tls.createConnection(
+ {
+ server: false,
+ caStore: [],
+ sessionCache: {},
+ // supported cipher suites in order of preference
+ cipherSuites: [
+ forge.tls.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA,
+ forge.tls.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA],
+ virtualHost: host,
+ verify: function(c, verified, depth, certs)
+ {
+ forge.log.debug(cat,
+ 'TLS Client verifying certificate w/CN: \"' +
+ certs[0].subject.getField('CN').value + '\"');
+ // accept any certificate from the server for this test
+ return true;
+ },
+ connected: function(c)
+ {
+ forge.log.debug(cat, 'Client connected');
+ },
+ getCertificate: function(c, hint)
+ {
+ forge.log.debug(cat, 'Client using client-certificate');
+ return certificate;
+ },
+ getPrivateKey: function(c, cert)
+ {
+ return privateKey;
+ },
+ tlsDataReady: function(c)
+ {
+ // send base64-encoded TLS data to server
+ ws.send(forge.util.encode64(c.tlsData.getBytes()));
+ },
+ dataReady: function(c)
+ {
+ var response = c.data.getBytes();
+ forge.log.debug(cat, 'Client received \"' + response + '\"');
+ try
+ {
+ response = JSON.parse(response);
+ success = response.success;
+
+ // TODO: call window.authenticate on response json, just like
+ // w/flash version
+ }
+ catch(ex) {}
+ c.close();
+ },
+ closed: function(c)
+ {
+ forge.log.debug(cat, 'Client disconnected');
+ if(success)
+ {
+ forge.log.debug(cat, 'PASS');
+ }
+ else
+ {
+ forge.log.debug(cat, 'FAIL');
+ }
+ },
+ error: function(c, error)
+ {
+ forge.log.debug(cat, 'Client error: ' + error.message);
+ }
+ });
+
+ ws.onopen = function(evt)
+ {
+ forge.log.debug(cat, 'WebSocket connected');
+
+ // do TLS handshake
+ tls.handshake();
+ };
+ ws.onmessage = function(evt)
+ {
+ // base64-decode data and process it
+ tls.process(forge.util.decode64(evt.data));
+ };
+ ws.onclose = function(evt)
+ {
+ forge.log.debug(cat, 'WebSocket closed');
+ };
+};
+

0 comments on commit 0af5455

Please sign in to comment.