From a8d37fab30ccbced5ec8819510ee84893460bb5e Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Thu, 10 May 2018 20:42:13 +0200 Subject: Began chat encrpytion integration and ECC key generation on registration --- main/app/sprinkles/account/asset-bundles.json | 152 +++++++++++---------- .../assets/userfrosting/js/pages/register.js | 63 ++++++--- .../assets/userfrosting/js/pages/sign-in.js | 13 ++ .../account/templates/pages/sign-in.html.twig | 1 + main/app/sprinkles/admin/routes/users.php | 2 + .../admin/src/Controller/PostController.php | 5 +- .../admin/src/Controller/UserController.php | 26 ++++ .../admin/src/Controller/WormholeController.php | 6 +- .../sprinkles/core/assets/SiteAssets/css/main.css | 1 + .../sprinkles/core/assets/SiteAssets/js/chat.js | 26 ++-- .../sprinkles/core/assets/SiteAssets/js/main.js | 93 +++++++------ .../sprinkles/core/assets/SiteAssets/js/push.js | 3 +- .../sprinkles/core/templates/pages/index.html.twig | 2 +- .../sprinkles/core/templates/pages/test.html.twig | 53 ++++++- 14 files changed, 299 insertions(+), 147 deletions(-) (limited to 'main') diff --git a/main/app/sprinkles/account/asset-bundles.json b/main/app/sprinkles/account/asset-bundles.json index 77ee559..7fc9430 100644 --- a/main/app/sprinkles/account/asset-bundles.json +++ b/main/app/sprinkles/account/asset-bundles.json @@ -1,79 +1,81 @@ { - "bundle": { - "js/pages/account-settings": { - "scripts": [ - "userfrosting/js/pages/account-settings.js" - ], - "options": { - "result": { - "type": { - "scripts": "plain" - } - } - } - }, - "js/pages/forgot-password": { - "scripts": [ - "userfrosting/js/pages/forgot-password.js" - ], - "options": { - "result": { - "type": { - "scripts": "plain" - } - } - } - }, - "js/pages/resend-verification": { - "scripts": [ - "userfrosting/js/pages/resend-verification.js" - ], - "options": { - "result": { - "type": { - "scripts": "plain" - } - } - } - }, - "js/pages/set-or-reset-password": { - "scripts": [ - "userfrosting/js/pages/set-or-reset-password.js" - ], - "options": { - "result": { - "type": { - "scripts": "plain" - } - } - } - }, - "js/pages/register": { - "scripts": [ - "vendor/speakingurl/speakingurl.min.js", - "userfrosting/js/uf-captcha.js", - "userfrosting/js/pages/register.js" - ], - "options": { - "result": { - "type": { - "scripts": "plain" - } - } - } - }, - "js/pages/sign-in": { - "scripts": [ - "vendor/urijs/src/URI.js", - "userfrosting/js/pages/sign-in.js" - ], - "options": { - "result": { - "type": { - "scripts": "plain" - } - } - } + "bundle": { + "js/pages/account-settings": { + "scripts": [ + "userfrosting/js/pages/account-settings.js" + ], + "options": { + "result": { + "type": { + "scripts": "plain" + } } + } + }, + "js/pages/forgot-password": { + "scripts": [ + "userfrosting/js/pages/forgot-password.js" + ], + "options": { + "result": { + "type": { + "scripts": "plain" + } + } + } + }, + "js/pages/resend-verification": { + "scripts": [ + "userfrosting/js/pages/resend-verification.js" + ], + "options": { + "result": { + "type": { + "scripts": "plain" + } + } + } + }, + "js/pages/set-or-reset-password": { + "scripts": [ + "userfrosting/js/pages/set-or-reset-password.js" + ], + "options": { + "result": { + "type": { + "scripts": "plain" + } + } + } + }, + "js/pages/register": { + "scripts": [ + "vendor/speakingurl/speakingurl.min.js", + "userfrosting/js/uf-captcha.js", + "SiteAssets/js/encryption.js", + "userfrosting/js/pages/register.js" + ], + "options": { + "result": { + "type": { + "scripts": "plain" + } + } + } + }, + "js/pages/sign-in": { + "scripts": [ + "vendor/urijs/src/URI.js", + "SiteAssets/js/encryption.js", + "userfrosting/js/pages/sign-in.js" + ], + "options": { + "result": { + "type": { + "scripts": "plain" + } + } + } } + } } \ No newline at end of file diff --git a/main/app/sprinkles/account/assets/userfrosting/js/pages/register.js b/main/app/sprinkles/account/assets/userfrosting/js/pages/register.js index d855bb9..97870a7 100644 --- a/main/app/sprinkles/account/assets/userfrosting/js/pages/register.js +++ b/main/app/sprinkles/account/assets/userfrosting/js/pages/register.js @@ -6,9 +6,9 @@ * * Target page: account/register */ -$(document).ready(function() { +$(document).ready(function () { // TOS modal - $(this).find('.js-show-tos').click(function() { + $(this).find('.js-show-tos').click(function () { $("body").ufModal({ sourceUrl: site.uri.public + "/modals/account/tos", msgTarget: $("#alerts-page") @@ -17,7 +17,7 @@ $(document).ready(function() { // Auto-generate username when name is filled in var autoGenerate = true; - $("#register").find('input[name=first_name], input[name=last_name]').on('input change', function() { + $("#register").find('input[name=first_name], input[name=last_name]').on('input change', function () { if (!autoGenerate) { return; } @@ -40,26 +40,26 @@ $(document).ready(function() { // Autovalidate username field on a delay var timer; - $("#register").find('input[name=first_name], input[name=last_name], input[name=user_name]').on('input change', function() { + $("#register").find('input[name=first_name], input[name=last_name], input[name=user_name]').on('input change', function () { clearTimeout(timer); // Clear the timer so we don't end up with dupes. - timer = setTimeout(function() { // assign timer a new timeout + timer = setTimeout(function () { // assign timer a new timeout $("#register").find('input[name=user_name]').valid(); - }, 500); + }, 50); }); // Enable/disable username suggestions in registration page - $("#register").find('#form-register-username-suggest').on('click', function(e) { + $("#register").find('#form-register-username-suggest').on('click', function (e) { e.preventDefault(); var form = $("#register"); $.getJSON(site.uri.public + '/account/suggest-username') - .done(function (data) { - // Set suggestion - form.find('input[name=user_name]').val(data.user_name); - }); + .done(function (data) { + // Set suggestion + form.find('input[name=user_name]').val(data.user_name); + }); }); // Turn off autogenerate when someone enters stuff manually in user_name - $("#register").find('input[name=user_name]').on('input', function() { + $("#register").find('input[name=user_name]').on('input', function () { autoGenerate = false; }); @@ -84,10 +84,41 @@ $(document).ready(function() { validators: registrationValidators, msgTarget: $("#alerts-page"), keyupDelay: 500 - }).on("submitSuccess.ufForm", function() { - // Reload to clear form and show alerts - window.location.reload(); - }).on("submitError.ufForm", function() { + }).on("submitSuccess.ufForm", function () { + // GENERATE KEYS + var openpgp = window.openpgp; + var options; + var randomString = Math.random().toString(36).substr(2, 11); // PRIVKEY ENCRYPTION KEY + openpgp.initWorker({path: '/assets-raw/core/assets/SiteAssets/js/openpgp.worker.js'}); + options = { + userIds: [{name: $("#r-form-username").val(), email: $("#r-form-email").val()}], + curve: "curve25519", + passphrase: randomString + }; + openpgp.generateKey(options).then(function (key) { + localStorage.setItem("PrivateKey", key.privateKeyArmored); + localStorage.setItem("🔒", randomString); + + console.log(key.publicKeyArmored); + console.log(key.privateKeyArmored); + // SAVE PUBLIC KEY TO DATABASE + var data = { + csrf_name: site.csrf.name, + csrf_value: site.csrf.value, + PublicKey: key.publicKeyArmored + }; + $.ajax({ + type: 'POST', + url: site.uri.public + '/api/users/u/' + $("#r-form-username").val() + '/publickey', + data: data, + success: function (response) { + console.log(response); + //window.location.reload(); + } + }); + + }); + }).on("submitError.ufForm", function () { // Reload captcha $("#captcha").captcha(); }); diff --git a/main/app/sprinkles/account/assets/userfrosting/js/pages/sign-in.js b/main/app/sprinkles/account/assets/userfrosting/js/pages/sign-in.js index 40a8628..b627f2d 100644 --- a/main/app/sprinkles/account/assets/userfrosting/js/pages/sign-in.js +++ b/main/app/sprinkles/account/assets/userfrosting/js/pages/sign-in.js @@ -34,6 +34,19 @@ $(document).ready(function() { validators: page.validators.login, msgTarget: $("#alerts-page") }).on("submitSuccess.ufForm", function(event, data, textStatus, jqXHR) { + /* GENERATE KEYS + var openpgp = window.openpgp; + var options, PublicKey, PrivateKey; + openpgp.initWorker({path: '/assets-raw/core/assets/SiteAssets/js/openpgp.worker.js'}); + options = { + userIds: [{user_id: current_user_id}], + curve: "curve25519", + passphrase: $("input[name='password']") // only local + }; + openpgp.generateKey(options).then(function (key) { + PrivateKey = key.privateKeyArmored; + PublicKey = key.publicKeyArmored; + });*/ redirectOnLogin(jqXHR); }); }); diff --git a/main/app/sprinkles/account/templates/pages/sign-in.html.twig b/main/app/sprinkles/account/templates/pages/sign-in.html.twig index 2fb6e1c..083d170 100644 --- a/main/app/sprinkles/account/templates/pages/sign-in.html.twig +++ b/main/app/sprinkles/account/templates/pages/sign-in.html.twig @@ -62,6 +62,7 @@ {% endblock %} {% block scripts_page %} + + +{{ assets.js('js/main') | raw }} + + + + \ No newline at end of file -- cgit v1.2.3