Onionr/onionr/static-data/www/mail/mail.js
2019-02-11 16:36:43 -06:00

219 lines
7.0 KiB
JavaScript
Executable File

/*
Onionr - P2P Anonymous Storage Network
This file handles the mail interface
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
pms = ''
sentbox = ''
threadPart = document.getElementById('threads')
threadPlaceholder = document.getElementById('threadPlaceholder')
tabBtns = document.getElementById('tabBtns')
threadContent = {}
myPub = httpGet('/getActivePubkey')
function openThread(bHash, sender, date, sigBool){
var messageDisplay = document.getElementById('threadDisplay')
var blockContent = httpGet('/getblockbody/' + bHash)
document.getElementById('fromUser').value = sender
messageDisplay.innerText = blockContent
var sigEl = document.getElementById('sigValid')
var sigMsg = 'signature'
if (sigBool){
sigMsg = 'Good ' + sigMsg
sigEl.classList.remove('danger')
}
else{
sigMsg = 'Bad/no ' + sigMsg + ' (message could be fake)'
sigEl.classList.add('danger')
}
sigEl.innerText = sigMsg
overlay('messageDisplay')
}
function setActiveTab(tabName){
threadPart.innerHTML = ""
switch(tabName){
case 'inbox':
getInbox()
break
case 'sentbox':
getSentbox()
break
case 'send message':
overlay('sendMessage')
break
}
}
function loadInboxEntrys(bHash){
fetch('/getblockheader/' + bHash, {
headers: {
"token": webpass
}})
.then((resp) => resp.json()) // Transform the data into json
.then(function(resp) {
//console.log(resp)
var entry = document.createElement('div')
var bHashDisplay = document.createElement('span')
var senderInput = document.createElement('input')
var subjectLine = document.createElement('span')
var dateStr = document.createElement('span')
var validSig = document.createElement('span')
var humanDate = new Date(0)
var metadata = resp['metadata']
humanDate.setUTCSeconds(resp['meta']['time'])
if (resp['meta']['signer'] != ''){
senderInput.value = httpGet('/getHumanReadable/' + resp['meta']['signer'])
}
if (resp['meta']['validSig']){
validSig.innerText = 'Signature Validity: Good'
}
else{
validSig.innerText = 'Signature Validity: Bad'
validSig.style.color = 'red'
}
if (senderInput.value == ''){
senderInput.value = 'Anonymous'
}
bHashDisplay.innerText = bHash.substring(0, 10)
entry.setAttribute('hash', bHash)
senderInput.readOnly = true
dateStr.innerText = humanDate.toString()
if (metadata['subject'] === undefined || metadata['subject'] === null) {
subjectLine.innerText = '()'
}
else{
subjectLine.innerText = '(' + metadata['subject'] + ')'
}
//entry.innerHTML = 'sender ' + resp['meta']['signer'] + ' - ' + resp['meta']['time']
threadPart.appendChild(entry)
entry.appendChild(bHashDisplay)
entry.appendChild(senderInput)
entry.appendChild(validSig)
entry.appendChild(subjectLine)
entry.appendChild(dateStr)
entry.classList.add('threadEntry')
entry.onclick = function(){
openThread(entry.getAttribute('hash'), senderInput.value, dateStr.innerText, resp['meta']['validSig'])
}
}.bind(bHash))
}
function getInbox(){
var showed = false
var requested = ''
for(var i = 0; i < pms.length; i++) {
if (pms[i].trim().length == 0){
continue
}
else{
threadPlaceholder.style.display = 'none'
showed = true
}
loadInboxEntrys(pms[i])
}
if (! showed){
threadPlaceholder.style.display = 'block'
}
}
function getSentbox(){
fetch('/apipoints/mail/sentbox', {
headers: {
"token": webpass
}})
.then((resp) => resp.json()) // Transform the data into json
.then(function(resp) {
var keys = [];
var entry = document.createElement('div')
var entryUsed;
for(var k in resp) keys.push(k);
for (var i = 0; i < keys.length; i++){
var entry = document.createElement('div')
var obj = resp[i];
var toLabel = document.createElement('span')
toLabel.innerText = 'To: '
var toEl = document.createElement('input')
var preview = document.createElement('span')
toEl.readOnly = true
toEl.value = resp[keys[i]][1]
preview.innerText = '(' + resp[keys[i]][2] + ')'
entry.appendChild(toLabel)
entry.appendChild(toEl)
entry.appendChild(preview)
entryUsed = resp[keys[i]]
entry.onclick = function(){
console.log(resp)
showSentboxWindow(toEl.value, entryUsed[0])
}
threadPart.appendChild(entry)
}
threadPart.appendChild(entry)
}.bind(threadPart))
}
function showSentboxWindow(to, content){
document.getElementById('toID').value = to
document.getElementById('sentboxDisplayText').innerText = content
overlay('sentboxDisplay')
}
fetch('/getblocksbytype/pm', {
headers: {
"token": webpass
}})
.then((resp) => resp.text()) // Transform the data into json
.then(function(data) {
pms = data.split(',')
setActiveTab('inbox')
})
tabBtns.onclick = function(event){
var children = tabBtns.children
for (var i = 0; i < children.length; i++) {
var btn = children[i]
btn.classList.remove('activeTab')
}
event.target.classList.add('activeTab')
setActiveTab(event.target.innerText.toLowerCase())
}
var idStrings = document.getElementsByClassName('myPub')
var myHumanReadable = httpGet('/getHumanReadable/' + myPub)
for (var i = 0; i < idStrings.length; i++){
if (idStrings[i].tagName.toLowerCase() == 'input'){
idStrings[i].value = myHumanReadable
}
else{
idStrings[i].innerText = myHumanReadable
}
}
for (var i = 0; i < document.getElementsByClassName('refresh').length; i++){
document.getElementsByClassName('refresh')[i].style.float = 'right'
}
for (var i = 0; i < document.getElementsByClassName('closeOverlay').length; i++){
document.getElementsByClassName('closeOverlay')[i].onclick = function(e){
document.getElementById(e.target.getAttribute('overlay')).style.visibility = 'hidden'
}
}