Fully Encrypted notes Beta

* Encrypts all notes going to the database
* Creates encrypted snippets for loading note title cards
* Creates an encrypted search index when note is changed
* Migrates users to encrypted notes on login
* Creates new encrypted master keys for newly logged in users
This commit is contained in:
Max G
2020-05-06 07:10:27 +00:00
parent a545ced98f
commit df073b0e4d
14 changed files with 553 additions and 269 deletions

View File

@@ -5,15 +5,13 @@ let Notes = require('@models/Note');
let ShareNote = require('@models/ShareNote');
let userId = null
let socket = null
let masterKey = null
// middleware that is specific to this router
router.use(function setUserId (req, res, next) {
if(req.headers.userId){
userId = req.headers.userId
}
if(req.headers.socket){
// socket = req.
masterKey = req.headers.masterKey
}
next()
@@ -23,11 +21,8 @@ router.use(function setUserId (req, res, next) {
// Note actions
//
router.post('/get', function (req, res) {
// req.io.emit('welcome_homie', 'Welcome, dont poop from excitement')
Notes.get(userId, req.body.noteId, req.body.password)
Notes.get(userId, req.body.noteId, req.body.password, masterKey)
.then( data => {
//Join room when user opens note
// req.io.join('note_room')
res.send(data)
})
})
@@ -38,17 +33,17 @@ router.post('/delete', function (req, res) {
})
router.post('/create', function (req, res) {
Notes.create(userId, req.body.title, req.body.text)
Notes.create(userId, req.body.title, req.body.text, masterKey)
.then( id => res.send({id}) )
})
router.post('/update', function (req, res) {
Notes.update(req.io, userId, req.body.noteId, req.body.text, req.body.title, req.body.color, req.body.pinned, req.body.archived, req.body.password, req.body.hint)
Notes.update(req.io, userId, req.body.noteId, req.body.text, req.body.title, req.body.color, req.body.pinned, req.body.archived, req.body.password, req.body.hint, masterKey)
.then( id => res.send({id}) )
})
router.post('/search', function (req, res) {
Notes.search(userId, req.body.searchQuery, req.body.searchTags, req.body.fastFilters)
Notes.search(userId, req.body.searchQuery, req.body.searchTags, req.body.fastFilters, masterKey)
.then( notesAndTags => {
res.send(notesAndTags)
})
@@ -62,6 +57,14 @@ router.post('/difftext', function (req, res) {
})
})
router.post('/reindex', function (req, res) {
Notes.reindex(userId, masterKey)
.then( data => {
res.send(data)
})
})
//
// Update single note attributes
//
@@ -116,5 +119,4 @@ router.get('/reindex5yu43prchuj903mrc', function (req, res) {
})
module.exports = router

View File

@@ -2,6 +2,7 @@ var express = require('express')
var router = express.Router()
let User = require('@models/User');
const cs = require('@helpers/CryptoString')
// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
@@ -31,19 +32,19 @@ router.post('/login', function (req, res) {
}
User.login(username, password)
.then(function(loginToken){
.then( ({token, userId}) => {
//Return json web token to user
returnData['success'] = true
returnData['token'] = loginToken
returnData['username'] = username
returnData['username'] = username
returnData['token'] = token
returnData['success'] = true
res.send(returnData)
})
.catch(e => {
console.log(e)
res.send(returnData)
})
res.send(returnData)
return
})
.catch(e => {
console.log(e)
res.send(returnData)
})
})
// fetch counts of users notes