mirror of
https://github.com/zadam/trilium.git
synced 2025-03-03 18:49:27 +08:00
basic conflict detection based on the audit log
This commit is contained in:
parent
a9698d362f
commit
ff58456332
4 changed files with 33 additions and 0 deletions
|
@ -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
18
src/audit_api.py
Normal 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
|
||||
})
|
|
@ -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)
|
|
@ -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({
|
||||
|
|
Loading…
Reference in a new issue