From ef6fc62a5048afd8467af20b34861ad085566481 Mon Sep 17 00:00:00 2001
From: Marvin Borner
Date: Thu, 10 May 2018 13:31:42 +0200
Subject: Removed caching (performance issues) + fixed some issues for firefox
alignment
---
.../sprinkles/core/assets/SiteAssets/css/main.css | 29 ++++++++++++++--------
.../sprinkles/core/assets/SiteAssets/js/main.js | 17 +++++++------
2 files changed, 29 insertions(+), 17 deletions(-)
(limited to 'main/app/sprinkles/core/assets')
diff --git a/main/app/sprinkles/core/assets/SiteAssets/css/main.css b/main/app/sprinkles/core/assets/SiteAssets/css/main.css
index 999bdaa..aa234a0 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/css/main.css
+++ b/main/app/sprinkles/core/assets/SiteAssets/css/main.css
@@ -76,7 +76,6 @@ SWIPEABLE
HEADER
******/
.header {
- -js-display: flex;
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
@@ -323,18 +322,23 @@ hr.ChatHeaderDivider {
}
@-webkit-keyframes sk-bouncedelay {
- 0%, 80%, 100% { -webkit-transform: scale(0) }
- 40% { -webkit-transform: scale(1.0) }
+ 0%, 80%, 100% {
+ -webkit-transform: scale(0)
+ }
+ 40% {
+ -webkit-transform: scale(1.0)
+ }
}
@keyframes sk-bouncedelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
- } 40% {
- -webkit-transform: scale(1.0);
- transform: scale(1.0);
- }
+ }
+ 40% {
+ -webkit-transform: scale(1.0);
+ transform: scale(1.0);
+ }
}
/*********
@@ -371,7 +375,6 @@ FRIEND TAB
align-self: center;
}
-
/***********
PERSONAL TAB
***********/
@@ -382,7 +385,6 @@ PERSONAL TAB
}
.PersonalOverviewHeader {
- -js-display: flex;
display: flex;
justify-content: space-evenly;
align-items: flex-end;
@@ -421,7 +423,6 @@ PERSONAL TAB
NAVBAR
*****/
.Navbar {
- -js-display: flex;
display: flex;
flex-wrap: nowrap;
justify-content: center;
@@ -433,11 +434,19 @@ NAVBAR
width: 100%;
}
+.NavbarIconWrap {
+ width: calc(100vw / 5);
+ width: -moz-calc(100vw / 5);
+ width: -webkit-calc(100vw / 5);
+}
+
.NavbarIconWrap {
margin: auto;
}
.NavbarIconWrap img {
+ display: block;
+ margin: 0 auto;
height: 30px;
width: 30px;
}
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/main.js b/main/app/sprinkles/core/assets/SiteAssets/js/main.js
index 7dd6006..9d1d697 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/main.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/main.js
@@ -12,8 +12,8 @@ var ExploreData = $("#ExploreData");
* CACHE IMAGES
* @type {*|jQueryImageCaching|jQuery}
*/
-var cachedNavbarIcons = $(".NavbarIconWrap img").imageCaching();
-var cashedAvatarIcons = $("img.Avatar").imageCaching();
+//var cachedNavbarIcons = $(".NavbarIconWrap img").imageCaching();
+//var cashedAvatarIcons = $("img.Avatar").imageCaching();
/**
* POPUPS
@@ -111,10 +111,13 @@ MainTabWindows.slick({
MainTabWindows.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
currentSlide = $("#" + currentSlide);
nextSlide = $("#" + nextSlide);
- currentSlide.children().attr("data-src", (currentSlide.children().attr("data-src").split('.svg')[0].replace('Activated', '') + ".svg"));
- nextSlide.children().attr("data-caching-key", nextSlide.children().attr("data-src").split('.svg')[0].split('/').pop() + "Activated_nav_cached");
- nextSlide.children().attr("data-src", nextSlide.children().attr("data-src").split('.svg')[0] + "Activated.svg");
- cachedNavbarIcons.refresh();
+
+ currentSlide.children().attr("src", (currentSlide.children().attr("src").split('.svg')[0].replace('Activated', '') + ".svg"));
+ nextSlide.children().attr("src", nextSlide.children().attr("src").split('.svg')[0] + "Activated.svg");
+ //currentSlide.children().attr("data-src", (currentSlide.children().attr("data-src").split('.svg')[0].replace('Activated', '') + ".svg"));
+ //nextSlide.children().attr("data-caching-key", nextSlide.children().attr("data-src").split('.svg')[0].split('/').pop() + "Activated_nav_cached");
+ //nextSlide.children().attr("data-src", nextSlide.children().attr("data-src").split('.svg')[0] + "Activated.svg");
+ //cachedNavbarIcons.refresh();
$el = nextSlide;
$el.addClass("ActiveTab");
leftPos = $el.position().left;
@@ -143,7 +146,7 @@ UserSearchBar.keyup(function () {
alerts.ufAlerts().ufAlerts('fetch');
SearchResults.append("![]()
" + answer.full_name + "
");
- $(".SearchResults .Avatar").imageCaching(); // refresh
+ //$(".SearchResults .Avatar").imageCaching(); // refresh
},
error: function () {
console.log("%c[SEARCH LOGGER] User " + RequestedUser + " was not found!", "color: red");
--
cgit v1.2.3
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
---
TODO.md | 2 -
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 ++++++-
15 files changed, 299 insertions(+), 149 deletions(-)
delete mode 100644 TODO.md
(limited to 'main/app/sprinkles/core/assets')
diff --git a/TODO.md b/TODO.md
deleted file mode 100644
index 3504e89..0000000
--- a/TODO.md
+++ /dev/null
@@ -1,2 +0,0 @@
-### TODO (for future implementations)
-* Use Laravels database migrations system
\ No newline at end of file
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
From 80b9827a0576ef36ff08f8b9c6e3ef647c965781 Mon Sep 17 00:00:00 2001
From: Marvin Borner
Date: Fri, 11 May 2018 15:41:23 +0200
Subject: More chat encryption...
---
.../assets/userfrosting/js/pages/register.js | 34 +------------
.../assets/userfrosting/js/pages/sign-in.js | 49 +++++++++++++------
.../account/templates/pages/sign-in.html.twig | 1 -
main/app/sprinkles/admin/routes/users.php | 2 +
.../admin/src/Controller/UserController.php | 57 +++++++++++++++++++---
.../sprinkles/core/assets/SiteAssets/js/chat.js | 52 +++++++++++++++-----
.../sprinkles/core/assets/SiteAssets/js/main.js | 53 ++++++++++++--------
main/app/sprinkles/core/config/default.php | 2 +-
.../templates/pages/abstract/mainsite.html.twig | 15 ++++--
.../sprinkles/core/templates/pages/test.html.twig | 28 ++---------
10 files changed, 174 insertions(+), 119 deletions(-)
(limited to 'main/app/sprinkles/core/assets')
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 97870a7..a311305 100644
--- a/main/app/sprinkles/account/assets/userfrosting/js/pages/register.js
+++ b/main/app/sprinkles/account/assets/userfrosting/js/pages/register.js
@@ -85,39 +85,7 @@ $(document).ready(function () {
msgTarget: $("#alerts-page"),
keyupDelay: 500
}).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();
- }
- });
-
- });
+ 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 b627f2d..97f19e9 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,19 +34,40 @@ $(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);
+ if (localStorage.getItem("PrivateKey") === null && localStorage.getItem("🔒") === null) {
+ // 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: $("input[name=user_name]").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',
+ dataType : "json",
+ url: site.uri.public + '/api/users/u/' + $("input[name=user_name]").val() + '/publickey',
+ data: data,
+ async: false
+ });
+ redirectOnLogin(jqXHR);
+ });
+ } else {
+ 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 083d170..2fb6e1c 100644
--- a/main/app/sprinkles/account/templates/pages/sign-in.html.twig
+++ b/main/app/sprinkles/account/templates/pages/sign-in.html.twig
@@ -62,7 +62,6 @@
{% endblock %}
{% block scripts_page %}
-
+
{# Override this block in a child layout template or page template to override site-level scripts. #}
{% block scripts_site %}
{{ assets.js('js/main') | raw }}
diff --git a/main/app/sprinkles/core/templates/pages/test.html.twig b/main/app/sprinkles/core/templates/pages/test.html.twig
index 972e734..6f64962 100644
--- a/main/app/sprinkles/core/templates/pages/test.html.twig
+++ b/main/app/sprinkles/core/templates/pages/test.html.twig
@@ -25,35 +25,13 @@
\ No newline at end of file
--
cgit v1.2.3
From 933f652b65b42cc143bec27fb4cb137f645b7d6c Mon Sep 17 00:00:00 2001
From: Marvin Borner
Date: Fri, 11 May 2018 23:39:01 +0200
Subject: Message encryption integration - decryption needs work
---
.../sprinkles/core/assets/SiteAssets/js/chat.js | 56 ++++++++++++++--------
.../php/Chatserver/src/ChatProcessor.php | 6 +++
2 files changed, 43 insertions(+), 19 deletions(-)
(limited to 'main/app/sprinkles/core/assets')
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
index ac3f3f7..54f8262 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
@@ -1,25 +1,15 @@
/**
- * GENERAL CHAT
+ * ENCRYPTION
*/
-var ReceiversUsername = "marvinborner"; // HARD
+var ReceiversUsername = ""; // HARD
var openpgp = window.openpgp;
var options, EncryptedText;
var PublicKey = [];
openpgp.initWorker({path: '/assets-raw/core/assets/SiteAssets/js/openpgp.worker.js'});
-var privKeyObj = openpgp.key.readArmored(localStorage.getItem("PrivateKey")).keys[0];
-privKeyObj.decrypt(localStorage.getItem("🔒"));
-$.ajax({
- type: 'GET',
- url: site.uri.public + '/api/users/u/' + ReceiversUsername + '/publickey',
- dataType: "json",
- success: function (response) {
- //if (response.user_id === ReceiversUsername->id) {
- PublicKey[ReceiversUsername] = response.PublicKey;
- console.log(PublicKey[ReceiversUsername])
- //}
- }
-});
+/**
+ * GENERAL CHAT
+ */
function InitializeChatServer() {
var ChatTextInput = $("#ChatTextInput");
var SubscribeTextInput = $("#SubscribeTextInput");
@@ -49,7 +39,7 @@ function InitializeChatServer() {
var TypingIndicatorMessage = $(".TypingIndicatorMessage").parent();
var LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
var MessageObject = JSON.parse(e.data);
- var Message = MessageObject.Message;
+ var Message = MessageObject.Message; // ENCRYPTED MESSAGE (NOT ENCRYPTED ON SERVER MESSAGES)
var Username = MessageObject.Username;
var Fullname = MessageObject.Fullname;
var Avatar = MessageObject.Avatar;
@@ -59,8 +49,35 @@ function InitializeChatServer() {
var WasHimself = MessageObject.WasHimself;
var ServerMessageType = MessageObject.ServerMessageType;
var Granted = MessageObject.Granted;
+ ReceiversUsername = MessageObject.Receiver;
+
+ // GET PUBLIC KEY IF NOT ALREADY DID
+ if (!(ReceiversUsername in PublicKey) && ReceiversUsername !== null) {
+ $.ajax({
+ type: 'GET',
+ url: site.uri.public + '/api/users/u/' + ReceiversUsername + '/publickey',
+ dataType: "json",
+ success: function (response) {
+ PublicKey[ReceiversUsername] = response.PublicKey;
+ console.log(PublicKey[ReceiversUsername])
+ }
+ });
+ }
if (ServerMessage === false) { // NO SERVER MESSAGE -> SENT BY USER
+
+ // DECRYPT MESSAGE
+ var privKeyObj = openpgp.key.readArmored(localStorage.getItem("PrivateKey")).keys[0];
+ privKeyObj.decrypt(localStorage.getItem("🔒"));
+ options = {
+ message: openpgp.message.readArmored("-----BEGIN PGP MESSAGE-----\r\nVersion: OpenPGP.js v3.0.9\r\nComment: https://openpgpjs.org\r\n\n" + Message + "\r\n-----END PGP MESSAGE-----\r\n"),
+ //publicKeys: openpgp.key.readArmored(PublicKey[Username]).keys, // FOR VERIFICATION
+ privateKeys: [privKeyObj]
+ };
+ openpgp.decrypt(options).then(function(plaintext) {
+ Message = plaintext.data;
+ });
+
if (WasHimself === true) { // -> MESSAGE WAS FROM HIMSELF
console.log("%c[CHATSOCKET LOGGER] You sent a message!", "color: darkorange");
if (!LastMessage.hasClass("MessageSent")) { // CHECK IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
@@ -208,11 +225,12 @@ function InitializeChatServer() {
if (e.keyCode === 13 && ChatTextInput.val().length > 0) {
options = {
data: ChatTextInput.val(),
- publicKeys: openpgp.key.readArmored(PublicKey[ReceiversUsername]).keys,
- privateKeys: [privKeyObj] // FOR SIGNING
+ publicKeys: openpgp.key.readArmored(PublicKey[ReceiversUsername]).keys
+ //privateKeys: [privKeyObj] // FOR SIGNING
};
openpgp.encrypt(options).then(function (Encrypted) {
EncryptedText = Encrypted.data;
+ console.log(EncryptedText);
// USER USUALLY STOPS TYPING ON SENDING -> CHANGE STATE TO FALSE
sendTypingState(false);
@@ -222,7 +240,7 @@ function InitializeChatServer() {
ChatSocket.send(JSON.stringify({
ClientMessageType: "ChatMessage",
MessageType: "Private",
- Message: EncryptedText.substr(91).slice(0,-29)
+ Message: EncryptedText.substr(91).slice(0,-29) // SLICING FOR DATABASE SAVING (LESS DATA)
}));
ChatTextInput.val("");
ChatTextInput.val("");
diff --git a/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php b/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
index e4f7f30..1553468 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
+++ b/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
@@ -51,6 +51,7 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject->ServerMessage = TRUE;
$MessageObject->ServerMessageType = "Verify";
$MessageObject->Granted = TRUE;
+ $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
$this->verifiedUsers[$conn->resourceId] = TRUE;
$this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
} else {
@@ -58,6 +59,7 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject->ServerMessage = TRUE;
$MessageObject->ServerMessageType = "Verify";
$MessageObject->Granted = FALSE;
+ $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
$this->verifiedUsers[$conn->resourceId] = FALSE;
$this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
$this->onClose($conn);
@@ -67,6 +69,7 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject->ServerMessage = TRUE;
$MessageObject->ServerMessageType = "Verify";
$MessageObject->Granted = FALSE;
+ $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
$this->verifiedUsers[$conn->resourceId] = FALSE;
$this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
$this->onClose($conn);
@@ -84,6 +87,7 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject->ServerMessage = TRUE;
$MessageObject->ServerMessageType = "GroupJoin";
$MessageObject->GroupName = $channel;
+ $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
$MessageObject->Username = $this->userInfo[$conn->resourceId]->user_name;
$MessageObject->Fullname = $this->userInfo[$conn->resourceId]->first_name . " " . $this->userInfo[$conn->resourceId]->last_name;
$MessageObject->Avatar = $this->userInfo[$conn->resourceId]->avatar;
@@ -105,6 +109,7 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject = new \stdClass();
$MessageObject->ServerMessage = FALSE;
$MessageObject->GroupName = $channel;
+ $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$target]]->user_name;
$MessageObject->Username = $this->userInfo[$conn->resourceId]->user_name;
$MessageObject->Fullname = $this->userInfo[$conn->resourceId]->first_name . " " . $this->userInfo[$conn->resourceId]->last_name;
$MessageObject->Avatar = $this->userInfo[$conn->resourceId]->avatar;
@@ -136,6 +141,7 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject->ServerMessage = TRUE;
$MessageObject->ServerMessageType = "TypingState";
$MessageObject->GroupName = $channel;
+ $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
$MessageObject->Username = $this->userInfo[$conn->resourceId]->user_name;
$MessageObject->Fullname = $this->userInfo[$conn->resourceId]->first_name . " " . $this->userInfo[$conn->resourceId]->last_name;
$MessageObject->Avatar = $this->userInfo[$conn->resourceId]->avatar;
--
cgit v1.2.3
From 1f05a05eec9fc88aca7d3e4e7d9e891ae31ba4eb Mon Sep 17 00:00:00 2001
From: Marvin Borner
Date: Sat, 12 May 2018 12:29:12 +0200
Subject: Even more chat encryption...
---
.../sprinkles/core/assets/SiteAssets/js/chat.js | 149 +++++++++++++--------
1 file changed, 90 insertions(+), 59 deletions(-)
(limited to 'main/app/sprinkles/core/assets')
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
index 54f8262..76e34db 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
@@ -3,9 +3,17 @@
*/
var ReceiversUsername = ""; // HARD
var openpgp = window.openpgp;
-var options, EncryptedText;
+var options, EncryptedMessage, DecryptedMessage;
var PublicKey = [];
openpgp.initWorker({path: '/assets-raw/core/assets/SiteAssets/js/openpgp.worker.js'});
+var privKeyObj = openpgp.key.readArmored(localStorage.getItem("PrivateKey").replace(/\r/, "")).keys[0];
+privKeyObj.decrypt(localStorage.getItem("🔒"));
+
+/**
+ * GLOBAL DECLARATIONS
+ */
+var LastMessage, Username;
+
/**
* GENERAL CHAT
@@ -37,10 +45,10 @@ function InitializeChatServer() {
ChatSocket.onmessage = function (e) {
// DECLARATIONS
var TypingIndicatorMessage = $(".TypingIndicatorMessage").parent();
- var LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
+ LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
var MessageObject = JSON.parse(e.data);
var Message = MessageObject.Message; // ENCRYPTED MESSAGE (NOT ENCRYPTED ON SERVER MESSAGES)
- var Username = MessageObject.Username;
+ Username = MessageObject.Username;
var Fullname = MessageObject.Fullname;
var Avatar = MessageObject.Avatar;
var GroupName = MessageObject.GroupName;
@@ -52,14 +60,14 @@ function InitializeChatServer() {
ReceiversUsername = MessageObject.Receiver;
// GET PUBLIC KEY IF NOT ALREADY DID
- if (!(ReceiversUsername in PublicKey) && ReceiversUsername !== null) {
+ if (!(ReceiversUsername in PublicKey) && ReceiversUsername !== null && ReceiversUsername !== undefined) {
$.ajax({
type: 'GET',
url: site.uri.public + '/api/users/u/' + ReceiversUsername + '/publickey',
dataType: "json",
success: function (response) {
PublicKey[ReceiversUsername] = response.PublicKey;
- console.log(PublicKey[ReceiversUsername])
+ console.log("%c[ENCRYPTION LOGGER] Publickey of " + ReceiversUsername + ": " + PublicKey[ReceiversUsername].substr(96).slice(0, -35), "color: #20c20e; background-color: black;")
}
});
}
@@ -67,58 +75,44 @@ function InitializeChatServer() {
if (ServerMessage === false) { // NO SERVER MESSAGE -> SENT BY USER
// DECRYPT MESSAGE
- var privKeyObj = openpgp.key.readArmored(localStorage.getItem("PrivateKey")).keys[0];
- privKeyObj.decrypt(localStorage.getItem("🔒"));
options = {
- message: openpgp.message.readArmored("-----BEGIN PGP MESSAGE-----\r\nVersion: OpenPGP.js v3.0.9\r\nComment: https://openpgpjs.org\r\n\n" + Message + "\r\n-----END PGP MESSAGE-----\r\n"),
- //publicKeys: openpgp.key.readArmored(PublicKey[Username]).keys, // FOR VERIFICATION
+ message: openpgp.message.readArmored("-----BEGIN PGP MESSAGE-----\r\nVersion: OpenPGP.js v3.0.9\r\nComment: https://openpgpjs.org\r\n\r\n" + Message + "\r\n\-----END PGP MESSAGE-----\r\n"),
+ publicKeys: openpgp.key.readArmored(PublicKey[Username]).keys, // FOR VERIFICATION
privateKeys: [privKeyObj]
};
openpgp.decrypt(options).then(function(plaintext) {
- Message = plaintext.data;
- });
-
- if (WasHimself === true) { // -> MESSAGE WAS FROM HIMSELF
- console.log("%c[CHATSOCKET LOGGER] You sent a message!", "color: darkorange");
- if (!LastMessage.hasClass("MessageSent")) { // CHECK IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
- ChatMessages.append("");
- } else if (LastMessage.hasClass("MessageSent")) { // IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
- ChatMessages.append("");
- if (LastMessage.hasClass("AloneMessage")) {
- LastMessage.removeClass("AloneMessage");
- LastMessage.addClass("TopMessage");
- } else if (LastMessage.hasClass("BottomMessage")) {
- LastMessage.removeClass("BottomMessage");
- LastMessage.addClass("MiddleMessage");
- }
- }
- } else if (WasHimself === false) { // -> MESSAGE WAS FROM OTHER USER
- console.log("%c[CHATSOCKET LOGGER] You received a message!", "color: darkorange");
- NotifySound.play();
- Push.create(Fullname, { // CREATE NOTIFICATION
- body: Message,
- icon: Avatar,
- timeout: 5000,
- onClick: function () {
- window.focus();
- this.close();
- }
- });
- if (!LastMessage.hasClass("MessageReceived")) { // CHECK IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
- ChatMessages.append("");
- } else if (LastMessage.hasClass("MessageReceived")) { // IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
- ChatMessages.append("");
- if (LastMessage.hasClass("AloneMessage")) {
- LastMessage.removeClass("AloneMessage");
- LastMessage.addClass("TopMessage");
- } else if (LastMessage.hasClass("BottomMessage")) {
- LastMessage.removeClass("BottomMessage");
- LastMessage.addClass("MiddleMessage");
+ DecryptedMessage = plaintext.data;
+ if (WasHimself === true) { // -> MESSAGE WAS FROM HIMSELF -> Don't write to chat, as its done directly (on enter function at the bottom, for performance)
+ console.log("%c[CHATSOCKET LOGGER] Message sending succeeded!", "color: darkorange");
+ } else if (WasHimself === false) { // -> MESSAGE WAS FROM OTHER USER
+ console.log("%c[CHATSOCKET LOGGER] You received a message!", "color: darkorange");
+ NotifySound.play();
+ Push.create(Fullname, { // CREATE NOTIFICATION
+ body: DecryptedMessage,
+ icon: Avatar,
+ timeout: 5000,
+ onClick: function () {
+ window.focus();
+ this.close();
+ }
+ });
+ if (!LastMessage.hasClass("MessageReceived")) { // CHECK IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
+ ChatMessages.append("");
+ } else if (LastMessage.hasClass("MessageReceived")) { // IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
+ ChatMessages.append("");
+ if (LastMessage.hasClass("AloneMessage")) {
+ LastMessage.removeClass("AloneMessage");
+ LastMessage.addClass("TopMessage");
+ } else if (LastMessage.hasClass("BottomMessage")) {
+ LastMessage.removeClass("BottomMessage");
+ LastMessage.addClass("MiddleMessage");
+ }
}
}
- }
+ });
+
// CONVERT LINKS TO LINKS
- $('.MessageReceived').linkify({
+ $('.ChatMessage').linkify({
target: "_blank"
});
} else if (ServerMessage === true) { // SERVER MESSAGE
@@ -223,24 +217,61 @@ function InitializeChatServer() {
// SEND MESSAGE FROM INPUT FIELD
ChatTextInput.keyup(function (e) {
if (e.keyCode === 13 && ChatTextInput.val().length > 0) {
+
+ var LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
+ if (!LastMessage.hasClass("MessageSent")) { // CHECK IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
+ ChatMessages.append("" + ChatTextInput.val() + "
");
+ } else if (LastMessage.hasClass("MessageSent")) { // IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
+ ChatMessages.append("" + ChatTextInput.val() + "
");
+ if (LastMessage.hasClass("AloneMessage")) {
+ LastMessage.removeClass("AloneMessage");
+ LastMessage.addClass("TopMessage");
+ } else if (LastMessage.hasClass("BottomMessage")) {
+ LastMessage.removeClass("BottomMessage");
+ LastMessage.addClass("MiddleMessage");
+ }
+ }
+
+ // USER USUALLY STOPS TYPING ON SENDING -> CHANGE STATE TO FALSE
+ sendTypingState(false);
+ isTyping = false;
+ clearTimeout(typingTimer);
+
+ // ENCRYPT AND SEND MESSAGE WITH OWN PUBLIC KEY
options = {
data: ChatTextInput.val(),
- publicKeys: openpgp.key.readArmored(PublicKey[ReceiversUsername]).keys
- //privateKeys: [privKeyObj] // FOR SIGNING
+ publicKeys: openpgp.key.readArmored(PublicKey[ReceiversUsername]).keys,
+ privateKeys: [privKeyObj] // FOR SIGNING
};
openpgp.encrypt(options).then(function (Encrypted) {
- EncryptedText = Encrypted.data;
- console.log(EncryptedText);
+ EncryptedMessage = Encrypted.data.substr(91).slice(0,-29); // SLICING FOR DATABASE SAVING (LESS DATA)
+ console.log("%c[ENCRYPTION LOGGER] Encrypted message for sender: " + EncryptedMessage, "color: #20c20e; background-color: black;");
- // USER USUALLY STOPS TYPING ON SENDING -> CHANGE STATE TO FALSE
- sendTypingState(false);
- isTyping = false;
- clearTimeout(typingTimer);
+ ChatSocket.send(JSON.stringify({
+ ClientMessageType: "ChatMessage",
+ MessageType: "Private",
+ EncryptedWithKey: ReceiversUsername,
+ Message: EncryptedMessage
+ }));
+ ChatTextInput.val("");
+ ChatTextInput.val("");
+ });
+
+ // ENCRYPT AND SEND MESSAGE WITH RECEIVERS PUBLIC KEY
+ options = {
+ data: ChatTextInput.val(),
+ publicKeys: openpgp.key.readArmored(PublicKey[ReceiversUsername]).keys,
+ privateKeys: [privKeyObj] // FOR SIGNING
+ };
+ openpgp.encrypt(options).then(function (Encrypted) {
+ EncryptedMessage = Encrypted.data.substr(91).slice(0,-29); // SLICING FOR DATABASE SAVING (LESS DATA)
+ console.log("%c[ENCRYPTION LOGGER] Encrypted message for receiver: " + EncryptedMessage, "color: #20c20e; background-color: black;");
ChatSocket.send(JSON.stringify({
ClientMessageType: "ChatMessage",
MessageType: "Private",
- Message: EncryptedText.substr(91).slice(0,-29) // SLICING FOR DATABASE SAVING (LESS DATA)
+ EncryptedWithKey: ReceiversUsername,
+ Message: EncryptedMessage
}));
ChatTextInput.val("");
ChatTextInput.val("");
--
cgit v1.2.3