blob: 2ce58167638a1c4e882b2b36e192ae2e01a095a1 [file] [log] [blame]
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');
};
};