diff options
author | grant-kun <[email protected]> | 2022-10-11 11:01:44 -0500 |
---|---|---|
committer | grant-kun <[email protected]> | 2022-10-11 11:01:44 -0500 |
commit | d2782bae0a4e70cbdf9a84afd92ed7c28237b82a (patch) | |
tree | 01778b4366b0d13fcaf5fcbdddf71d23b3e3dc6f | |
parent | 75ced388a61f0f1e4b88765d09c3251748734fea (diff) |
added email storage
-rw-r--r-- | html/404.html | 19 | ||||
-rw-r--r-- | html/mail.html | 21 | ||||
-rw-r--r-- | index.ts | 40 | ||||
-rw-r--r-- | json/user.example.json | 2 | ||||
-rw-r--r-- | readme.md | 6 |
5 files changed, 74 insertions, 14 deletions
diff --git a/html/404.html b/html/404.html index 0e18290..8b54f1e 100644 --- a/html/404.html +++ b/html/404.html @@ -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>' diff --git a/html/mail.html b/html/mail.html index db26593..f363dfe 100644 --- a/html/mail.html +++ b/html/mail.html @@ -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> @@ -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}; diff --git a/json/user.example.json b/json/user.example.json index be82a4d..8da7e3b 100644 --- a/json/user.example.json +++ b/json/user.example.json @@ -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) |