133 lines
4.6 KiB
JavaScript
133 lines
4.6 KiB
JavaScript
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');
|
|
};
|
|
};
|
|
|