basic conflict detection based on the audit log

This commit is contained in:
azivner 2017-09-29 00:17:28 -04:00
parent a9698d362f
commit ff58456332
4 changed files with 33 additions and 0 deletions

View file

@ -13,6 +13,7 @@ from notes_move_api import notes_move_api
from password_api import password_api
from settings_api import settings_api
from notes_history_api import notes_history_api
from audit_api import audit_api
import config_provider
import my_scrypt
@ -35,6 +36,7 @@ app.register_blueprint(notes_move_api)
app.register_blueprint(password_api)
app.register_blueprint(settings_api)
app.register_blueprint(notes_history_api)
app.register_blueprint(audit_api)
class User(UserMixin):
pass

18
src/audit_api.py Normal file
View file

@ -0,0 +1,18 @@
from flask import Blueprint, jsonify
from flask import request
from flask_login import login_required
from sql import getSingleResult
audit_api = Blueprint('audit_api', __name__)
@audit_api.route('/audit/<int:full_load_time>', methods = ['GET'])
@login_required
def getNote(full_load_time):
browser_id = request.headers['x-browser-id']
count = getSingleResult("SELECT COUNT(*) AS 'count' FROM audit_log WHERE browser_id != ? AND date_modified >= ?", [browser_id, full_load_time])['count']
return jsonify({
'changed': count > 0
})

View file

@ -1,5 +1,7 @@
import base64
import os
import math
import time
from flask import Blueprint, jsonify
from flask_login import login_required
@ -48,5 +50,6 @@ def getTree():
retObject['encrypted_data_key'] = getOption('encrypted_data_key')
retObject['encryption_session_timeout'] = getOption('encryption_session_timeout')
retObject['browser_id'] = base64.b64encode(os.urandom(8))
retObject['full_load_time'] = math.floor(time.time())
return jsonify(retObject)

View file

@ -86,6 +86,15 @@ function setExpandedToServer(note_id, is_expanded) {
let globalEncryptionSalt;
let globalEncryptionSessionTimeout;
let globalEncryptedDataKey;
let globalFullLoadTime;
setInterval(() => {
$.get(baseUrl + 'audit/' + globalFullLoadTime).then(resp => {
if (resp.changed) {
window.location.reload(true);
}
});
}, 60 * 1000);
$(function(){
$.get(baseUrl + 'tree').then(resp => {
@ -94,6 +103,7 @@ $(function(){
globalEncryptionSalt = resp.password_derived_key_salt;
globalEncryptionSessionTimeout = resp.encryption_session_timeout;
globalEncryptedDataKey = resp.encrypted_data_key;
globalFullLoadTime = resp.full_load_time;
// add browser ID header to all AJAX requests
$.ajaxSetup({