mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	fixes and polish
This commit is contained in:
		
							
								
								
									
										13
									
								
								src/app.js
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/app.js
									
									
									
									
									
								
							| @@ -28,17 +28,6 @@ app.use((req, res, next) => { | ||||
|     next(); | ||||
| }); | ||||
|  | ||||
| app.use((req, res, next) => { | ||||
|     cls.namespace.bindEmitter(req); | ||||
|     cls.namespace.bindEmitter(res); | ||||
|  | ||||
|     cls.init(() => { | ||||
|         cls.namespace.set("Hi"); | ||||
|  | ||||
|         next(); | ||||
|     }); | ||||
| }); | ||||
|  | ||||
| app.use(bodyParser.json({limit: '500mb'})); | ||||
| app.use(bodyParser.urlencoded({extended: false})); | ||||
| app.use(cookieParser()); | ||||
| @@ -120,4 +109,4 @@ require('./services/scheduler'); | ||||
| module.exports = { | ||||
|     app, | ||||
|     sessionParser | ||||
| }; | ||||
| }; | ||||
|   | ||||
| @@ -68,7 +68,7 @@ async function loginToProtectedSession(req) { | ||||
|     const protectedSessionId = protectedSessionService.setDataKey(decryptedDataKey); | ||||
|  | ||||
|     // this is set here so that event handlers have access to the protected session | ||||
|     cls.namespace.set('protectedSessionId', protectedSessionId); | ||||
|     cls.set('protectedSessionId', protectedSessionId); | ||||
|  | ||||
|     await eventService.emit(eventService.ENTER_PROTECTED_SESSION); | ||||
|  | ||||
|   | ||||
| @@ -81,9 +81,12 @@ function apiRoute(method, path, routeHandler) { | ||||
| function route(method, path, middleware, routeHandler, resultHandler, transactional = true) { | ||||
|     router[method](path, ...middleware, async (req, res, next) => { | ||||
|         try { | ||||
|             cls.namespace.bindEmitter(req); | ||||
|             cls.namespace.bindEmitter(res); | ||||
|  | ||||
|             const result = await cls.init(async () => { | ||||
|                 cls.namespace.set('sourceId', req.headers['trilium-source-id']); | ||||
|                 cls.namespace.set('localNowDateTime', req.headers['`trilium-local-now-datetime`']); | ||||
|                 cls.set('sourceId', req.headers['trilium-source-id']); | ||||
|                 cls.set('localNowDateTime', req.headers['`trilium-local-now-datetime`']); | ||||
|                 protectedSessionService.setProtectedSessionId(req); | ||||
|  | ||||
|                 if (transactional) { | ||||
|   | ||||
| @@ -9,6 +9,14 @@ function wrap(callback) { | ||||
|     return async () => await init(callback); | ||||
| } | ||||
|  | ||||
| function get(key) { | ||||
|     return namespace.get(key); | ||||
| } | ||||
|  | ||||
| function set(key, value) { | ||||
|     namespace.set(key, value); | ||||
| } | ||||
|  | ||||
| function getSourceId() { | ||||
|     return namespace.get('sourceId'); | ||||
| } | ||||
| @@ -52,6 +60,8 @@ function setEntityToCache(entityName, entityId, entity) { | ||||
| module.exports = { | ||||
|     init, | ||||
|     wrap, | ||||
|     get, | ||||
|     set, | ||||
|     namespace, | ||||
|     getSourceId, | ||||
|     getLocalNowDateTime, | ||||
| @@ -62,4 +72,4 @@ module.exports = { | ||||
|     addSyncRow, | ||||
|     getEntityFromCache, | ||||
|     setEntityToCache | ||||
| }; | ||||
| }; | ||||
|   | ||||
| @@ -15,11 +15,11 @@ function setDataKey(decryptedDataKey) { | ||||
| } | ||||
|  | ||||
| function setProtectedSessionId(req) { | ||||
|     cls.namespace.set('protectedSessionId', req.cookies.protectedSessionId); | ||||
|     cls.set('protectedSessionId', req.cookies.protectedSessionId); | ||||
| } | ||||
|  | ||||
| function getProtectedSessionId() { | ||||
|     return cls.namespace.get('protectedSessionId'); | ||||
|     return cls.get('protectedSessionId'); | ||||
| } | ||||
|  | ||||
| function getDataKey() { | ||||
| @@ -63,4 +63,4 @@ module.exports = { | ||||
|     decryptString, | ||||
|     decryptNotes, | ||||
|     setProtectedSessionId | ||||
| }; | ||||
| }; | ||||
|   | ||||
| @@ -31,7 +31,7 @@ async function executeBundle(bundle, apiParams = {}) { | ||||
|         apiParams.startNote = bundle.note; | ||||
|     } | ||||
|  | ||||
|     cls.namespace.set('sourceId', 'script'); | ||||
|     cls.set('sourceId', 'script'); | ||||
|  | ||||
|     // last \r\n is necessary if script contains line comment on its last line | ||||
|     const script = "async function() {\r\n" + bundle.script + "\r\n}"; | ||||
| @@ -187,4 +187,4 @@ module.exports = { | ||||
|     executeNoteNoException, | ||||
|     executeScript, | ||||
|     getScriptBundleForFrontend | ||||
| }; | ||||
| }; | ||||
|   | ||||
| @@ -9,7 +9,7 @@ function setDbConnection(connection) { | ||||
|     dbConnection = connection; | ||||
| } | ||||
|  | ||||
| [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`].forEach(eventType => { | ||||
| [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `SIGTERM`].forEach(eventType => { | ||||
|     process.on(eventType, () => { | ||||
|         if (dbConnection) { | ||||
|             // closing connection is especially important to fold -wal file into the main DB file | ||||
| @@ -213,8 +213,8 @@ let transactionPromise = null; | ||||
| let transactionPromiseResolve = null; | ||||
|  | ||||
| async function startTransactionIfNecessary() { | ||||
|     if (!cls.namespace.get('isTransactional') | ||||
|         || cls.namespace.get('isInTransaction')) { | ||||
|     if (!cls.get('isTransactional') | ||||
|         || cls.get('isInTransaction')) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -225,23 +225,23 @@ async function startTransactionIfNecessary() { | ||||
|     // first set semaphore (atomic operation and only then start transaction | ||||
|     transactionActive = true; | ||||
|     transactionPromise = new Promise(res => transactionPromiseResolve = res); | ||||
|     cls.namespace.set('isInTransaction', true); | ||||
|     cls.set('isInTransaction', true); | ||||
|  | ||||
|     await beginTransaction(); | ||||
| } | ||||
|  | ||||
| async function transactional(func) { | ||||
|     // if the CLS is already transactional then the whole transaction is handled by higher level transactional() call | ||||
|     if (cls.namespace.get('isTransactional')) { | ||||
|     if (cls.get('isTransactional')) { | ||||
|         return await func(); | ||||
|     } | ||||
|  | ||||
|     cls.namespace.set('isTransactional', true); // this signals that transaction will be needed if there's a write operation | ||||
|     cls.set('isTransactional', true); // this signals that transaction will be needed if there's a write operation | ||||
|  | ||||
|     try { | ||||
|         const ret = await func(); | ||||
|  | ||||
|         if (cls.namespace.get('isInTransaction')) { | ||||
|         if (cls.get('isInTransaction')) { | ||||
|             await commit(); | ||||
|  | ||||
|             // note that sync rows sent from this action will be sent again by scheduled periodic ping | ||||
| @@ -251,7 +251,7 @@ async function transactional(func) { | ||||
|         return ret; | ||||
|     } | ||||
|     catch (e) { | ||||
|         if (cls.namespace.get('isInTransaction')) { | ||||
|         if (cls.get('isInTransaction')) { | ||||
|             await rollback(); | ||||
|         } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user