A self hosted chat application with end-to-end encrypted messaging.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

135 lines
5.5 KiB

console.log('Hello world!');
var getAllMessagesURL = `http://${hostAddress}/api/admin/get/messages/`; //hostAddress set in thymeleaf backend
var reencryptURL = `http://${hostAddress}/api/admin/post/re-encrypt`;
var getAllRegularUsersURL = `http://${hostAddress}/api/regular-users`;
var username = sessionStorage.getItem('username');
var password = sessionStorage.getItem('password');
var authToken = 'Basic ' + btoa(username + ":" + password);
var iterations = 10000;
function handleAddToAdminForm() {
document.getElementById('addUserToAdminForm').addEventListener(
'submit',
function(e) {
e.preventDefault();
getAllRegularUsers()
// .then(usernamesArray => {
// console.lo
// });
});
}
function handleChangePassphraseForm() {
document.getElementById('changePassphraseForm').addEventListener(
'submit',
function(e) {
e.preventDefault();
let changePassphraseDropDown = document.getElementById('changePassphraseDropDown');
let user = changePassphraseDropDown.value;
let passphraseOld = document.getElementById('passphraseOld');
let passphraseNew = document.getElementById('passphraseNew');
// let messageCipherNew = {};
console.log(user);
getAllMessages(user)
.then(json => {
console.log(json);
return json;
})
.then(json => {
let jsonNew = [];
let messageCiphers = [];
let chatMessageDTOs = [];
if (json.length > 0) {
json.forEach(function(obj) {
let newObj = obj;
let messageID = obj.messageCipher.id;
let plainText = sjcl.decrypt(passphraseOld.value, JSON.stringify(obj.messageCipher));
let messageCipherNew = sjcl.encrypt(passphraseNew.value, plainText, { mode: "gcm", ts: 128, adata: "", iter: iterations });
// let plainText = sjcl.decrypt("password", JSON.stringify(obj.messageCipher));
// let messageCipherNew = sjcl.encrypt("password2", plainText, { mode: "gcm", ts: 128, adata: "", iter: iterations });
// console.log(messageCipherNew)
let messageCipherNewObj = JSON.parse(messageCipherNew);
// console.log(messageCipherNewObj);
messageCipherNewObj.id = messageID;
newObj.messageCipher = messageCipherNewObj;
// obj.messageCipher = messageCipherNewObj;
// console.log(obj.messageCipher);
// console.log(plainText);
// console.log(messageCipherNewObj);
jsonNew.push(newObj);
messageCiphers.push(messageCipherNewObj);
// let messageCipherJson = JSON.stringify(messageCipherNewObj);
let fromUser = sessionStorage.getItem('username');
let chatMessageDTO = {
"toUser": user,
"fromUser": username,
"messageCipher": messageCipherNewObj
}
chatMessageDTOs.push(chatMessageDTO);
});
// console.log(jsonNew);
}
// sendReencryptedMessages(JSON.stringify(jsonNew));
console.log
sendReencryptedMessages(JSON.stringify(chatMessageDTOs));
// sendReencryptedMessages(JSON.stringify(messageCiphers));
return jsonNew;
})
.then(json => {
json.forEach(function(obj) {
let plainText = sjcl.decrypt("password2", JSON.stringify(obj.messageCipher));
console.log(plainText);
})
});
});
}
async function getAllMessages(user) {
let headers = new Headers();
// headers.append('Accept','application/json')
// headers.append('Content-Type', 'application/json');
headers.append('Authorization', authToken);
let response = await fetch(`${getAllMessagesURL}${user}`, {
method: 'GET',
headers: headers
});
let data = await response.json();
return data;
}
async function getAllRegularUsers() {
let headers = new Headers();
// headers.append('Accept','application/json')
// headers.append('Content-Type', 'application/json');
headers.append('Authorization', authToken);
let response = await fetch(`${getAllRegularUsersURL}`, {
method: 'GET',
headers: headers
});
let data = await response.json();
return data;
}
function sendReencryptedMessages(chatMessageDTOs) {
let headers = new Headers();
// console.log("Token = " + btoa("hmm" + ":" + "hmm"))
// headers.append('Accept','application/json')
headers.append('Content-Type', 'application/json');
headers.append('Authorization', authToken);
fetch(reencryptURL, {
method: 'POST',
headers: headers,
body: chatMessageDTOs
})
.then(response => console.log(response));
}
handleAddToAdminForm();
handleChangePassphraseForm();