diff --git a/wasm/clients/assets/ndf.js b/wasm/clients/assets/ndf.js new file mode 100644 index 0000000000000000000000000000000000000000..f21e4285f045a5152da5a9677bc3b1df60332c3b --- /dev/null +++ b/wasm/clients/assets/ndf.js @@ -0,0 +1 @@ +const ndf = '{"Timestamp":"2022-09-15T20:32:54.969471751Z","Gateways":[{"Id":"aXQ5tSv5SCzO6D5B+mvdfpjpHA/pUSNn0H3aB1DazGcB","Address":"34.218.59.127:11420","Tls_certificate":"-----BEGIN CERTIFICATE-----\\n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\\ner0CAERXQ8INuB+0hIvN8BOj398=\\n-----END CERTIFICATE-----\\n","Bin":"NorthAmerica"},{"Id":"MaRqf5zWQ5CNdcU7v7WnFONk4v0OVxSo+GCCy13VH1cB","Address":"35.163.143.85:11420","Tls_certificate":"-----BEGIN CERTIFICATE-----\\n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\\ner0CAERXQ8INuB+0hIvN8BOj398=\\n-----END CERTIFICATE-----\\n","Bin":"NorthAmerica"},{"Id":"NdGFG0QsD5Mq3hTDUz72U2XsFrfEuQLCAWsp5KfwhMsB","Address":"34.222.125.145:11420","Tls_certificate":"-----BEGIN CERTIFICATE-----\\n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\\ner0CAERXQ8INuB+0hIvN8BOj398=\\n-----END CERTIFICATE-----\\n","Bin":"NorthAmerica"}],"Nodes":[{"Id":"aXQ5tSv5SCzO6D5B+mvdfpjpHA/pUSNn0H3aB1DazGcC","Address":"34.222.234.81:11420","Tls_certificate":"-----BEGIN CERTIFICATE-----\\n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\\ndXlQopayrCZupumR32Aj1NvCpew=\\n-----END CERTIFICATE-----\\n","Status":0},{"Id":"MaRqf5zWQ5CNdcU7v7WnFONk4v0OVxSo+GCCy13VH1cC","Address":"34.220.39.172:11420","Tls_certificate":"-----BEGIN CERTIFICATE-----\\n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\\ndXlQopayrCZupumR32Aj1NvCpew=\\n-----END CERTIFICATE-----\\n","Status":0},{"Id":"NdGFG0QsD5Mq3hTDUz72U2XsFrfEuQLCAWsp5KfwhMsC","Address":"54.245.59.96:11420","Tls_certificate":"-----BEGIN CERTIFICATE-----\\nMIIF4DCCA8igAwIBAgIUKp7JaVNSBHlwPMd9z5XnHCcS5igwDQYJKoZIhvcNAQEL\\nBQAwgYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJQ2xhcmVt\\nb250MRAwDgYDVQQKDAdFbGl4eGlyMRQwEgYDVQQLDAtEZXZlbG9wbWVudDETMBEG\\nA1UEAwwKZWxpeHhpci5pbzEfMB0GCSqGSIb3DQEJARYQYWRtaW5AZWxpeHhpci5p\\nbzAeFw0yMTExMzAxODM4MTJaFw0zMTExMjgxODM4MTJaMIGMMQswCQYDVQQGEwJV\\nUzELMAkGA1UECAwCQ0ExEjAQBgNVBAcMCUNsYXJlbW9udDEQMA4GA1UECgwHRWxp\\neHhpcjEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEzARBgNVBAMMCmVsaXh4aXIuaW8x\\nHzAdBgkqhkiG9w0BCQEWEGFkbWluQGVsaXh4aXIuaW8wggIiMA0GCSqGSIb3DQEB\\nAQUAA4ICDwAwggIKAoICAQDFUvgX5bfTGjIt2oRkQfLrZRRAtIVqmxRljVQ4hb4o\\nu0wVoFGz7AhSgq1hVs67Sa/AHNs6gMdVFyGE0M+gZ8DEKJ1txC9WADxZhBmefuih\\nR+hv2ZEjIYz7ZoZJWjXuJROvd8zS8gCSsTvRwKf3rR5dBO0eELyHGB7Fv9GAM3gT\\nyjqAJqMQixM506/SUqDXf/4mO1QZFp/YF3uDJzrD94baJV7ihPPYZJQ0ND1MRaDW\\nfMoCA1utEKLMvG1XLFLu8CLU4oKLG+E6tRXathORUs4fqAbBIIQmE/lYYhA+c9Ez\\nbBwbsjpz2t/wCMDIiqAk5WLAWiiWVx7qoAjSpAfAQtiBGU/ccFUUPj1+PhjM/6+5\\nGo2r831KqAgwPmN+XpBHpU+ca0vROyvBIr1OcDr2bvxjGxGo4Y0sjNcHTZY17p0V\\n+82x+kltzh0t6BfxpKEFsm3W2FAgzmZNo6g7V/8eA/3Kzx/ePhZ6IY6ocJZJ4tpK\\nhuVoL/MMNkso/dJwhLfc7QwDofBsEQOe64ww0Y/JK9cJ9YZcSiIe1bts0g1ITDmD\\nkaN5gswXsqjBuY1V/seqY0voyYzDP/jOZD3mGYUF0XrhIX1FYd7tg6d9mDeS2H+v\\n1qFM5aWOog/2bc7zmtaQRJCkUiEomRqNHBhmCbIlxjMSvPKoIaZxEBZrfOD4FuDO\\nZQIDAQABozgwNjAVBgNVHREEDjAMggplbGl4eGlyLmlvMB0GA1UdDgQWBBTpxYvt\\njyMdEEW3DHx9QVvKg5303TANBgkqhkiG9w0BAQsFAAOCAgEAROp1LcmDA2JFKo5r\\nkpzpRgOLgAKJH0SaRWoHa40sjtJIOcZH3nn0imuj1nXxS2sKCb7RW4F4/oVQzOdR\\nYuraCUbMZ1gltfS6phhLPYsui5v4ySjqO7T+b2IYC+CkzXBzGr8dEGe5ha5Z+33o\\n163RF+FOeEFZuGcVxRieBgarYH/t3FyzzpzSGBo05PZKynApoqaYQPN0GYBdUgY/\\ng5WH7/9DZ++hKpP2pwkJRVIG5P5xV4ngEqQZ168Ky4TDeQaI6FC//TUOBTDByKRJ\\nYF1uLNlzVmvVeaboo2jrPTDbnMWiGzxPO7d1O3GG3AytAv3LmabtyM8vJwCJ/Ox2\\ngwDxOjVg/Lsh6cRVUyBdD9l591aP5fehvFLP+LNUqNJz7iQXcN4LzB95MdtAGMum\\nPDhm1U1o5Trzl4bNkuev9jzIt8y6ntedRGJHqjDxMSGu3V/9Iie/6CzNsvzybRc2\\nl8L9F6S+VFIHP32EEptqwlPiFg5Q6GUhldD9JZITUh3fQlwD03lqAj3CqUaJczf5\\n6fXt5Hj5WhSdp5ef0yPIZRDdDKTuxiregDVFW7Z9Ht6icY+J19+mrYOgpPrrXRN0\\njtgYrPBXBz6d8wKt9qaTPP4saa+aLZ1U472cYJpZhM2MHk4ImUcyZdIXty0T04zL\\ndXlQopayrCZupumR32Aj1NvCpew=\\n-----END CERTIFICATE-----\\n","Status":0}],"Registration":{"Address":"scheduling.default.cmix.rip:11420","ClientRegistrationAddress":"registration.default.cmix.rip:11420","Tls_certificate":"-----BEGIN CERTIFICATE-----\\n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\\nEnretBzQkeKeBwoB2u6NTiOmUjk=\\n-----END CERTIFICATE-----\\n","EllipticPubKey":"44uH5BrNPXpTGNj+0scgp8Q6/8ZSEMx5qWtSqXlA7tk="},"Notification":{"Address":"35.83.235.95:11420","Tls_certificate":"-----BEGIN CERTIFICATE-----\\n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\\nkwtotNMuC4bEiPY2kwcI/5bZrA4=\\n-----END CERTIFICATE-----\\n"},"Udb":{"Id":"83dObgQkTG/OMPdTisCHkRgdFW45NMDCuKUCrVIlPpgD","Cert":"-----BEGIN CERTIFICATE-----\\n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\\nPX9OUpkLAunw8WY78lVFS5KhnVE=\\n-----END CERTIFICATE-----\\n","Address":"44.225.110.44:11420","DhPubKey":"eyJWYWx1ZSI6Mjc0MDEyNDI1OTU4MTc0Mzg2NzU3MTY3NzAyNTYyNzU2MTczMTA3MjQwMjE1MjQ0Mzc2MzM2NzMzNjI2MjYxNzY3MDkzMzUwMTA2MTI3MzM2MzU5OTUzMDc5MTMxMDU5ODEyNjY1NTQ3ODM5NDQ2NjIwMjUzNjQ2MDQwNTI3Mjk5NTc0MTM5OTAxMjExMjcxODgwODUxOTI0MDA3MDcxMzc1MjM5NDc4MzQ2MTI5MDMyNzA2ODYxNzI1MTE5NjkwNzIwNDAyODg0Njg4NTE4Mjc2NTI1NDkwMDEwMDA3NjQ5Nzc3NTY1NjI0OTYxNjQ4OTY2NzA0MTAxMTk2NDczMjM3Njc2NjkyNTE2ODAwODMzMTU3NDUxOTc4MzI3MDg2NDg0Mjk4ODcxOTI1NDQxMDgyNDk3NjUwNTM4NDUyNDQxNTExNzg2NzcyMTQ1MjM2MDkzODEwMjUxMjkwMTM4NTQ5MDYxMzIxNTU0MjI2MTUyMjYxODAxNDY5OTc0NjEzNTkwNzM4NzMyNjY4Njg2MjAxODQ2Mzk4MDE0OTY2ODEzNzA4ODUwMzI5MzkyMDU4Mzg1MzA1MjU4MDE4MTY4MzU5OTc0ODA4NDIwMzMzMjc0ODgxMzI2MTYxNTc2Njk1NjQwNzIwNjQ4MzgyMDM2MjI3NjcyNjY1MDI2NjE4MjU5Mjc3NjI4MjkzNzM1NzU1MTI4MTcwMTE5ODQzODc3MzcxMDM2MzIzMzEyMzAyNDQ0MDc5NTY4MzY4MjMxNTA5MjM3Mjk2MTUwODY4OTc4NDg4ODE0MjE0NTQ1NTQzNTI3NTU0MDE5NzE4MTU2OTgyODQyNjExNDY1MjE2MDg1MDY5NTE5MjgzNzk3NzE2NjM0NzI2MzEzMDQ0OTU5MDg2MzU2ODY5MTQxMDk4MjE1NzAxNDU2MTAzNjY4Nzg0NTQ4ODk3MTIyMDIzNDk1NzU3NTUwMjcwODM0MDY0ODQzMDI1MjQ0MjA1NTIwNzQ5Njc3MTUxMzUzNjU2MjQ4NDE5NDI1MjgzODMxNzU1NzYxMTIzOTU2NTc0MTM1NDYyMTAxODg0NDIxNzYwNTQ1MTk2MjUyNDgzOTAxNDkwOTA0NzIyMjIzMjkwODE2Njk1ODYwMDg0Nzc3NDMwMDY2NjE2MjExNzU0Njc4NzgxMjY3MDA4OTgwMjUxMTAyMDUxNjgzODQxMTMwNDUwNjkyMzQ4NzUyMjczNzk3MTM4OCwiRmluZ2VycHJpbnQiOjE1OTg5NDMzMDQzMTY2NzU4NzU0fQ=="},"E2e":{"Prime":"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF","Small_prime":"","Generator":"2"},"Cmix":{"Prime":"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF","Small_prime":"","Generator":"2"},"AddressSpace":[{"Size":18,"Timestamp":"2022-09-15T20:32:54.878604Z"}],"ClientVersion":"4.0.0","WhitelistedIds":[],"WhitelistedIpAddresses":[],"RateLimits":{"Capacity":28000,"LeakedTokens":4000,"LeakDuration":86400000000000}}' \ No newline at end of file diff --git a/wasm/clients/assets/utils.js b/wasm/clients/assets/utils.js index 980b6d91122d25d72abfc87587962b7674adf8b0..88bf6e0cf2be00eef0ee51d245ac2e4bbf906a7f 100644 --- a/wasm/clients/assets/utils.js +++ b/wasm/clients/assets/utils.js @@ -55,6 +55,10 @@ async function sleepUntil(f, timeoutMs) { // error messages to an element. function newHtmlConsole(elem) { return { + overwrite: function (message) { + console.log(message) + elem.innerHTML = message + }, log: function (message) { console.log(message) elem.innerHTML += "<p>" + message + "</p>" diff --git a/wasm/clients/channels/channels.js b/wasm/clients/channels/channels.js index 9bda901acaccf6275a3f64d5fe4f4843e221e19d..88f9813be839ee808b7cc1ad0ba779d37f0dc8d4 100644 --- a/wasm/clients/channels/channels.js +++ b/wasm/clients/channels/channels.js @@ -47,39 +47,6 @@ async function Channels(htmlConsole, messageConsole, stopNetworkFollowerBtn, ndf htmlConsole.log("Loaded Cmix.") console.log("Loaded Cmix: " + JSON.stringify(net)) - // Get reception identity (automatically created if one does not exist) - const identityStorageKey = "identityStorageKey"; - let identity; - try { - htmlConsole.log("Getting reception identity.") - identity = LoadReceptionIdentity(identityStorageKey, net.GetID()); - } catch (e) { - htmlConsole.log("No reception identity found. Generating a new one.") - - // If no extant xxdk.ReceptionIdentity, generate and store a new one - identity = await net.MakeReceptionIdentity(); - - StoreReceptionIdentity(identityStorageKey, identity, net.GetID()); - } - - let authCallbacks = { - Confirm: function (contact, receptionId, ephemeralId, roundId) { - htmlConsole.log("Confirm: from " + Uint8ArrayToBase64(receptionId) + " on round " + roundId) - }, - Request: async function (contact, receptionId, ephemeralId, roundId) { - htmlConsole.log("Request: from " + Uint8ArrayToBase64(receptionId) + " on round " + roundId) - }, - Reset: function (contact, receptionId, ephemeralId, roundId) { - htmlConsole.log("Reset: from " + Uint8ArrayToBase64(receptionId) + " on round " + roundId) - } - } - - - // Create an E2E client - // Pass in auth object which controls auth callbacks for this client - htmlConsole.log("Logging in E2E") - let e2eClient = Login(net.GetID(), authCallbacks, identity, new Uint8Array(null)); - htmlConsole.log("Logged in E2E") //////////////////////////////////////////////////////////////////////////// // Start network threads // @@ -143,7 +110,7 @@ async function Channels(htmlConsole, messageConsole, stopNetworkFollowerBtn, ndf const username = usernameInput1.value - joinChannel(htmlConsole, messageConsole, e2eClient, username, + joinChannel(htmlConsole, messageConsole, net, username, chanGen.Channel, chanNameOutput, chanDescriptionOutput, chanIdOutput, prettyPrintOutput) }) @@ -152,7 +119,7 @@ async function Channels(htmlConsole, messageConsole, stopNetworkFollowerBtn, ndf joinChannelSubmit.addEventListener("click", () => { const username = usernameInput2.value - joinChannel(htmlConsole, messageConsole, e2eClient, username, + joinChannel(htmlConsole, messageConsole, net, username, prettyPrintInput.value, chanNameOutput, chanDescriptionOutput, chanIdOutput, prettyPrintOutput) }) @@ -160,28 +127,47 @@ async function Channels(htmlConsole, messageConsole, stopNetworkFollowerBtn, ndf } -async function joinChannel(htmlConsole, messageConsole, e2eClient, username, +async function joinChannel(htmlConsole, messageConsole, net, username, prettyPrint, nameOutput, descriptionOutput, idOutput, prettyPrintOutput) { document.getElementById("makeChannel").style.display = "none"; document.getElementById("joinChannel").style.display = "none"; - document.getElementById("messageLabel").innerHTML += " as " + username; + document.getElementById("messageLabel").innerHTML += " as <em>" + username + "</em>"; + // The eventModel is used only without the database let eventModel = { JoinChannel: function (channel){}, LeaveChannel: function (channelID){}, ReceiveMessage: function (channelID, messageID, senderUsername, text, timestamp, lease, roundId, status){ - messageConsole.log("<em>" + senderUsername + " said: </em>" + text) - htmlConsole.log(senderUsername + ": " + text) + messageConsole.overwrite(text) + // htmlConsole.log(senderUsername + ": " + text) }, ReceiveReply: function (channelID, messageID, reactionTo, senderUsername, text, timestamp, lease, roundId, status){}, ReceiveReaction: function (channelID, messageID, reactionTo, senderUsername, reaction, timestamp, lease, roundId, status){}, UpdateSentStatus: function (messageID, status){}, } - let chanManager = NewChannelsManagerDummyNameService(e2eClient.GetID(), username, eventModel) + // This is for use without the database + let chanManager = NewChannelsManagerDummyNameService(net.GetID(), username, eventModel) + + // Use this when using the database + // let chanManager = NewChannelsManagerWithIndexedDbDummyNameService(net.GetID(), username) + + // let chanInfo = JSON.parse(dec.decode(chanManager.JoinChannel(prettyPrint))) + let chanInfo; + + try { + chanInfo = JSON.parse(dec.decode(chanManager.JoinChannel(prettyPrint))) + } catch (e) { + console.log(e) + if (e.toString().includes("the channel cannot be added because it already exists")) { + chanManager.ReplayChannelFromPrettyPrint(prettyPrint) + chanInfo = JSON.parse(dec.decode(GetChannelInfo(prettyPrint))) + } else { + throw e + } + } - let chanInfo = JSON.parse(dec.decode(chanManager.JoinChannel(prettyPrint))) nameOutput.value = chanInfo.Name descriptionOutput.value = chanInfo.Description @@ -195,9 +181,23 @@ async function joinChannel(htmlConsole, messageConsole, e2eClient, username, messageInput.disabled = false sendMessageSubmit.addEventListener("click", async () => { let message = messageInput.value - messageInput.value = "" - let chanSendReportJson = await chanManager.SendMessage( - Base64ToUint8Array(chanInfo.ChannelID), message, 30000, new Uint8Array(null)) - htmlConsole.log("chanSendReport: " + dec.decode(chanSendReportJson)) + if (message !== "") { + messageInput.value = "" + let chanSendReportJson = await chanManager.SendMessage( + Base64ToUint8Array(chanInfo.ChannelID), message, 30000, new Uint8Array(null)) + htmlConsole.log("chanSendReport: " + dec.decode(chanSendReportJson)) + } + }) + + messageInput.addEventListener("keypress", async e => { + if (e.key === "Enter") { + let message = messageInput.value + if (message !== "") { + messageInput.value = "" + let chanSendReportJson = await chanManager.SendMessage( + Base64ToUint8Array(chanInfo.ChannelID), message, 30000, new Uint8Array(null)) + htmlConsole.log("chanSendReport: " + dec.decode(chanSendReportJson)) + } + } }) } \ No newline at end of file diff --git a/wasm/clients/channels/index.html b/wasm/clients/channels/index.html index d84e160cce689f4b628617db9fcdb860f9f75dce..aa829dd61010f8ab02b8182289ae2c63fc2798f6 100644 --- a/wasm/clients/channels/index.html +++ b/wasm/clients/channels/index.html @@ -9,14 +9,16 @@ <html lang="en"> <head> <meta charset="UTF-8"> - <title>Channel Client</title> + <title>The Internet Speakeasy Client</title> <link rel="stylesheet" type="text/css" href="../assets/styles.css"> + <link rel="icon" type="image/x-icon" href="favicon.ico"> <script type="text/javascript" src="channels.js"></script> <script type="text/javascript" src="../assets/utils.js"></script> <script type="text/javascript" src="../assets/wasm_exec.js"></script> + <script type="text/javascript" src="../assets/ndf.js"></script> <script> const go = new Go(); const binPath = '../assets/xxdk.wasm' @@ -44,34 +46,46 @@ const statePath = 'channelPath'; const statePass = 'password'; - document.getElementById('ndfInput').addEventListener('change', e => { - let reader = new FileReader(); - reader.onload = async function (e) { - try { - await Channels(htmlConsole, messageConsole, stopNetworkFollowerBtn, - e.target.result, statePath, statePass); - } catch (e) { - htmlConsole.error(e) - } - }; - reader.readAsText(e.target.files[0]); + // document.getElementById('ndfInput').addEventListener('change', e => { + // let reader = new FileReader(); + // reader.onload = async function (e) { + // try { + // await Channels(htmlConsole, messageConsole, stopNetworkFollowerBtn, + // e.target.result, statePath, statePass); + // } catch (e) { + // htmlConsole.error(e) + // } + // }; + // reader.readAsText(e.target.files[0]); + // }, false); + + document.getElementById('startNetwork').addEventListener('click', async e => { + try { + await Channels(htmlConsole, messageConsole, stopNetworkFollowerBtn, + ndf, statePath, statePass); + } catch (e) { + htmlConsole.error(e) + } }, false); }); </script> </head> <body> -<h1 style="margin-top: 0">Channel Client</h1> +<h1 style="margin-top: 0">The Internet Speakeasy Client</h1> <div class="toolbar"> <input type="button" value="Clear localStorage" onclick="localStorage.clear();"> <input type="button" value="Download Log File" id="logFileDownload"> <input type="button" value="Stop Network Follower" id="stopNetworkFollowerBtn" style="display:none;" > </div> -<p>Selecting an NDF will start the client.</p> <form id="startCmix"> - <div> +<!-- <div> <label for="ndfInput">Select NDF file to use <code>ndf</code> variable in JS:</label><br/> <input type="file" id="ndfInput" required/> + </div>--> + <div> + <p>Click on the button below to connect to the network and start the client.</p> + <input type="button" id="startNetwork" value="Connect to Network"/> </div> </form> <form id="makeChannel"> @@ -80,14 +94,14 @@ <input type="text" id="username1" disabled/> </div> <div> - <label for="chanName">Channel Name</label><br/> + <label for="chanName">Speakeasy Name</label><br/> <input type="text" id="chanName" required disabled/> </div> <div> - <label for="chanDescription">Channel Description</label><br/> + <label for="chanDescription">Speakeasy Description</label><br/> <input type="text" id="chanDescription" required disabled/> </div> - <input type="button" value="Make Channel" id="makeChannelSubmit" disabled /> + <input type="button" value="Make Speakeasy" id="makeChannelSubmit" disabled /> </form> <form id="joinChannel"> <div> @@ -95,26 +109,26 @@ <input type="text" id="username2" disabled/> </div> <div> - <label for="prettyPrintInput">Channel to Join</label><br/> + <label for="prettyPrintInput">Speakeasy to Join</label><br/> <input type="text" id="prettyPrintInput" required disabled/> - <input type="button" value="Join Channel" id="joinChannelSubmit" disabled/> + <input type="button" value="Join Speakeasy" id="joinChannelSubmit" disabled/> </div> </form> <form id="channelInfo"> <div> - <label for="chanNameOutput">Channel Name</label><br/> + <label for="chanNameOutput">Speakeasy Name</label><br/> <input type="text" id="chanNameOutput" disabled/> </div> <div> - <label for="chanDescriptionOutput">Channel Description</label><br/> + <label for="chanDescriptionOutput">Speakeasy Description</label><br/> <input type="text" id="chanDescriptionOutput" disabled/> </div> <div> - <label for="chanIdOutput">Channel ID</label><br/> + <label for="chanIdOutput">Speakeasy ID</label><br/> <input type="text" id="chanIdOutput" disabled/> </div> <div> - <label for="prettyPrintOutput">Channel Share</label><br/> + <label for="prettyPrintOutput">Speakeasy Share</label><br/> <input type="text" id="prettyPrintOutput" disabled/> </div> </form>