added email storage
This commit is contained in:
parent
75ced388a6
commit
d2782bae0a
5 changed files with 74 additions and 14 deletions
|
@ -24,10 +24,12 @@
|
|||
.wrapper {
|
||||
display: flex;
|
||||
align-self: center;
|
||||
|
||||
}
|
||||
|
||||
.a {
|
||||
margin-left: 30px;
|
||||
margin: 30px;
|
||||
|
||||
}
|
||||
|
||||
a:link {
|
||||
|
@ -63,6 +65,7 @@
|
|||
border-spacing: 20px;
|
||||
border-width: 2px;
|
||||
padding: 5px;
|
||||
|
||||
}
|
||||
|
||||
.bl1 {
|
||||
|
@ -117,7 +120,7 @@
|
|||
|
||||
<body onload="load()">
|
||||
<h5>
|
||||
404<sub style="font-size:30px">418 <sub style="font-size:10px"></br>i am infact a teapot</sub></sub>
|
||||
404<sub style="font-size:30px">418 </sub>
|
||||
</h5></br>
|
||||
<!--
|
||||
either i dont know this page, or i cant give it to you! <sub><i>no hard feelings
|
||||
|
@ -159,6 +162,18 @@
|
|||
document.getElementsByClassName('bl2')[0].style.top = (document.getElementsByClassName('coollines')[0].getBoundingClientRect().bottom + 15) + 'px'
|
||||
document.getElementsByClassName('bl3')[0].style.left = (document.getElementsByClassName('coollines')[0].getBoundingClientRect().left - 20) + 'px'
|
||||
document.getElementsByClassName('bl4')[0].style.left = (document.getElementsByClassName('coollines')[0].getBoundingClientRect().right) + 'px'
|
||||
if (document.body.clientWidth <= 600) {
|
||||
|
||||
document.getElementsByClassName('wrapper')[0].style = 'position:absolute;bottom:30%;bottom:20%'
|
||||
document.getElementById('sowwy').style.display = 'none'
|
||||
|
||||
} else {
|
||||
|
||||
document.getElementsByClassName('wrapper')[0].style = 'display: flex;\
|
||||
align-self: center;'
|
||||
document.getElementById('sowwy').style.display = 'block'
|
||||
|
||||
}
|
||||
}, 30)
|
||||
setTimeout(async () => {
|
||||
document.getElementById('sowwy').innerHTML += 'here! ill ask if them i can tell you the code:)</br>'
|
||||
|
|
|
@ -96,7 +96,15 @@
|
|||
let emails = []
|
||||
function update() {
|
||||
//console.log('hi')
|
||||
sendenc('/get', { 'user': 'root', 'pass': 'password', 'requested': 0, 'login_key': getCookie('login_key') }).then(res => {
|
||||
sendenc('/get/update', { 'user': 'root', 'requested': 0, 'login_key': getCookie('login_key') }).then(res => {
|
||||
res = JSON.parse(res)
|
||||
console.log('parsed')
|
||||
emails = res.reverse()
|
||||
})
|
||||
}
|
||||
function init() {
|
||||
//console.log('hi')
|
||||
sendenc('/get/storage', { 'user': 'root', 'pass': 'password', 'requested': 0, 'login_key': getCookie('login_key') }).then(res => {
|
||||
res = JSON.parse(res)
|
||||
console.log('parsed')
|
||||
emails = res.reverse()
|
||||
|
@ -114,7 +122,11 @@
|
|||
mypriv = await kekw.exportKey('pkcs1-private')
|
||||
mypub = await kekw.exportKey('pkcs8-public')
|
||||
pub = await sendnoenc('/pub.key', { sid: sid, pub: mypub })
|
||||
update()
|
||||
if (getCookie('login_key') == null) {
|
||||
window.location.href = '/'
|
||||
} else {
|
||||
init()
|
||||
}
|
||||
setInterval(() => {
|
||||
let ret = ''
|
||||
let evo = false
|
||||
|
@ -125,7 +137,7 @@
|
|||
c = '#395B64'
|
||||
}
|
||||
evo = !evo
|
||||
ret += '<div onclick="lm(' + emails.indexOf(email) + ')" style="color:#A5C9CA;border-radius:10px;max-width:40%;min-width:400px;padding:20px;background-color:' + c + ';">'
|
||||
ret += '<div onclick="lm(' + emails.indexOf(email) + ')" style="white-space: pre-wrap;color:#A5C9CA;border-radius:10px;max-width:40%;min-width:400px;padding:20px;background-color:' + c + ';">'
|
||||
ret += '<tt><b><font size="4">sub:' + email.envelope.subject + '</font></b></br>frm:' + email.envelope.from[0].address + '</br><sub style="color:#E7F6F2;">' + email.envelope.date + '</sub></tt></br></div><div style="height:2px;"></div>'
|
||||
}
|
||||
|
||||
|
@ -135,9 +147,8 @@
|
|||
//<button onclick="update()">update mail</button>
|
||||
</script>
|
||||
<div id="emails"></div>
|
||||
<div id="box" class="split" style="background-color:red;right:0;margin:40px;">
|
||||
<div id="box" class="split" style="white-space: pre-wrap;background-color:red;right:0;margin:40px;">
|
||||
<div id="view">
|
||||
fneoutvbnoruitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>uitnvorntvo</br>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
|
40
index.ts
40
index.ts
|
@ -51,9 +51,8 @@ interface keyring{
|
|||
let keyring = {} as keyring
|
||||
let key:any;
|
||||
var ImapClient = require('emailjs-imap-client').default
|
||||
//let pass = JSON.parse(readFileSync('pass.json').toString()).pass
|
||||
|
||||
app.post('/mail/get',(req:any,res:any)=>{
|
||||
app.post('/mail/get/update',(req:any,res:any)=>{
|
||||
const key = new NodeRSA({b: 1024})
|
||||
|
||||
key.importKey(keyring[req.body.sid].mypriv,'pkcs1-private')
|
||||
|
@ -61,7 +60,7 @@ app.post('/mail/get',(req:any,res:any)=>{
|
|||
//console.log(key)
|
||||
//console.log(dec.data.login_key)
|
||||
let users = JSON.parse(readFileSync('json/user.json').toString())
|
||||
let logkey,mail
|
||||
let logkey:any,mail:any
|
||||
for(let user of users){
|
||||
//console.log(user,dec)
|
||||
if(user.name==dec.data.user){
|
||||
|
@ -83,18 +82,48 @@ app.post('/mail/get',(req:any,res:any)=>{
|
|||
client.listMessages('INBOX', '1:*', ['uid', 'flags','envelope','bodystructure','body[1]' ]).then((messages:any) => {
|
||||
const skey = new NodeRSA()
|
||||
skey.importKey(keyring[req.body.sid].theirpub,'pkcs8-public')
|
||||
for(let user of users){
|
||||
if(user.name==dec.data.user){
|
||||
users[users.indexOf(user)].mail = JSON.parse(decrypt(users[users.indexOf(user)].mail,logkey))
|
||||
users[users.indexOf(user)].mail.emails[parseInt(dec.data.requested)].storage = messages
|
||||
delete users[users.indexOf(user)].mail.storage
|
||||
users[users.indexOf(user)].mail = encrypt(JSON.stringify(users[users.indexOf(user)].mail),logkey)
|
||||
fs.writeFileSync('./json/user.json',JSON.stringify(users))
|
||||
break
|
||||
}
|
||||
}
|
||||
//console.log(users,(JSON.stringify(messages)))
|
||||
|
||||
res.send(JSON.stringify({data:skey.encrypt(JSON.stringify(messages),'base64'),enc:true,html:true}))
|
||||
client.close()
|
||||
});
|
||||
})
|
||||
})
|
||||
app.post('/mail/get/storage',(req:any,res:any)=>{
|
||||
const key = new NodeRSA({b: 1024})
|
||||
const skey = new NodeRSA()
|
||||
skey.importKey(keyring[req.body.sid].theirpub,'pkcs8-public')
|
||||
key.importKey(keyring[req.body.sid].mypriv,'pkcs1-private')
|
||||
let dec:any = JSON.parse((atob(key.decrypt(req.body.data,'base64','base64'))))
|
||||
|
||||
let users = JSON.parse(readFileSync('./json/user.json').toString())
|
||||
let logkey:any,mail:any
|
||||
for(let user of users){
|
||||
//console.log(user,dec)
|
||||
if(user.name==dec.data.user){
|
||||
logkey = (decrypt(user.login_key,dec.data.login_key))
|
||||
mail =JSON.parse(decrypt(user.mail,logkey))
|
||||
}
|
||||
}
|
||||
|
||||
res.send(JSON.stringify({data:skey.encrypt((mail.emails[parseInt(dec.data.requested)].storage),'base64'),enc:true,html:true}))
|
||||
})
|
||||
app.get('/mail', (req:any, res:any) => {
|
||||
res.sendFile(__dirname+'/html/mail.html')
|
||||
|
||||
})
|
||||
|
||||
app.get('/', (req:any, res:any) => {
|
||||
console.log('test')
|
||||
res.sendFile(__dirname+"/html/index.html")
|
||||
})
|
||||
app.get('/kanna.txt', (req:any, res:any) => {
|
||||
|
@ -139,7 +168,7 @@ app.post('/login/submit', async (req:{body:{json:boolean,enc:boolean,data:string
|
|||
let logkey = crypt.createHash('md5').update(crypt.randomBytes(64).toString('hex')).digest('hex')
|
||||
res.send(JSON.stringify({data:skey.encrypt(JSON.stringify({login_key:logkey}),'base64'),enc:true,html:false,json:true,type:'key'}))
|
||||
users[users.indexOf(user)].login_key = encrypt(hash,logkey)
|
||||
console.log(users[users.indexOf(user)].login_key,logkey,hash)
|
||||
//console.log(users[users.indexOf(user)].login_key,logkey,hash)
|
||||
//console.log(users)
|
||||
writeFileSync('./json/user.json',JSON.stringify(users))
|
||||
}
|
||||
|
@ -148,6 +177,7 @@ app.post('/login/submit', async (req:{body:{json:boolean,enc:boolean,data:string
|
|||
app.use((req:any, res:any, next:any) => {
|
||||
res.status(418).sendFile(__dirname+'/html/404.html')
|
||||
})
|
||||
|
||||
//http
|
||||
var httpServer = http.createServer(app);
|
||||
var credentials = {key: privateKey, cert: certificate};
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
"last_login": "",
|
||||
"alias": "root",
|
||||
"login_key": "",
|
||||
"mail": ""
|
||||
"mail": "json stringified encrypted(with user hash in b64)|needs:address,host,port,auth/password"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -29,8 +29,10 @@ visit the [main git](https://git.disroot.org/grantsquires/kanna-site) or the [gi
|
|||
## currently
|
||||
|
||||
- [x] learning how mail works
|
||||
- [ ] sexify
|
||||
- [ ] make mail prettier
|
||||
- [ ] add functionality
|
||||
- [x] storage for quicker (initial)loading
|
||||
- [ ] send
|
||||
- [ ] reply
|
||||
- [ ] draft
|
||||
|
@ -38,6 +40,8 @@ visit the [main git](https://git.disroot.org/grantsquires/kanna-site) or the [gi
|
|||
- [ ] sender info
|
||||
- [ ] allow for email account adding (soon)
|
||||
- [ ] docs
|
||||
- [ ] how everthing works (pseudocode)
|
||||
- [ ] extra pages
|
||||
- [x] 404 page
|
||||
- [ ] sub domains
|
||||
|
||||
FeMail (iron mail)
|
||||
|
|
Loading…
Reference in a new issue