Fix presigned URL generation race conditions
This commit is contained in:
		| @@ -10,6 +10,7 @@ const mongoUri = process.env.MONGO_URI || 'mongodb://127.0.0.1:27017/default?rep | ||||
| // Minio set-up variables | ||||
| const minioURI = new URL(process.env.MINIO_URI || 'http://kspace-mugshot:2mSI6HdbJ8@127.0.0.1:9000/kspace-mugshot'); | ||||
| const minioBucket = minioURI.pathname.substring(1); | ||||
| console.info("Using bucket:", minioBucket); | ||||
| const historyNumber = parseInt(process.env.HISTORY_AMOUNT) || 1000; | ||||
|  | ||||
| // Stream set-up variables | ||||
| @@ -44,14 +45,12 @@ async function run() { | ||||
|       secretKey: minioURI.password | ||||
|     }); | ||||
|  | ||||
|     function wrapEvent(doc) { | ||||
|     async function wrapEvent(doc) { | ||||
|       if (doc && doc.screenshot_count) { | ||||
|         doc.screenshots = []; | ||||
|         for (let i = 1; i <= doc.screenshot_count ; i++) { | ||||
|           minioClient.presignedUrl('GET', minioBucket, `${doc.camera}/${doc._id}/${i}.jpg`, 60 * 60, (err, presignedUrl) => { | ||||
|             if (err) { return console.log(err) }; | ||||
|             doc.screenshots.push({ url: presignedUrl }); | ||||
|           }) | ||||
|           let presignedUrl = await minioClient.presignedUrl('GET', minioBucket, `${doc.camera}/${doc._id}/${i}.jpg`, 60 * 60); | ||||
|           doc.screenshots.push({ url: presignedUrl }); | ||||
|         } | ||||
|       }; | ||||
|       let blob = JSON.stringify(doc); | ||||
| @@ -62,14 +61,14 @@ async function run() { | ||||
|     const header = { 'Content-Type': 'text/event-stream', 'Connection': 'keep-alive' }; | ||||
|     response.writeHead(200, "OK", header); | ||||
|  | ||||
|     const historyCursor = collection.find({}).sort({$natural : -1}).limit(historyNumber); | ||||
|     const historyCursor = collection.find().sort({$natural:-1}).limit(historyNumber); | ||||
|  | ||||
|     historyCursor.forEach((document) => { | ||||
|       response.write(wrapEvent(document)); | ||||
|     historyCursor.forEach(async (document) => { | ||||
|       response.write(await wrapEvent(document)); | ||||
|     }) | ||||
|  | ||||
|     changeStream.on("change", data => { | ||||
|       response.write(wrapEvent(data.fullDocument)); | ||||
|     changeStream.on("change", async(data) => { | ||||
|       response.write(await wrapEvent(data.fullDocument)); | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   | ||||
| @@ -9,17 +9,11 @@ x-common: &common | ||||
|   ME_CONFIG_MONGODB_ENABLE_ADMIN: 'true' | ||||
|   ME_CONFIG_MONGODB_SERVER: '127.0.0.1' | ||||
|   ME_CONFIG_MONGODB_AUTH_DATABASE: admin | ||||
|   MONGO_URI: mongodb://127.0.0.1:27017/default?replicaSet=rs0 | ||||
|   MONGO_COLLECTION: eventlog | ||||
|   HISTORY_AMOUNT: 10 | ||||
|   MINIO_ACCESS_KEY: kspace-mugshot | ||||
|   MINIO_SECRET_KEY: 2mSI6HdbJ8 | ||||
|   MINIO_DEFAULT_BUCKETS: kspace-mugshot:download | ||||
|   MINIO_CONSOLE_PORT_NUMBER: 9001 | ||||
|   MINIO_URI: 'https://kspace-mugshot:2mSI6HdbJ8@127.0.0.1:9000/kspace-mugshot' | ||||
|  | ||||
|  | ||||
|  | ||||
| services: | ||||
|  | ||||
|   mongoexpress: | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| from datetime import datetime | ||||
| from pymongo import MongoClient | ||||
| from bson.objectid import ObjectId | ||||
| from time import sleep | ||||
| @@ -7,6 +8,14 @@ MONGO_URI="mongodb://127.0.0.1:27017/default" | ||||
| db = MongoClient(MONGO_URI).get_default_database()  | ||||
|  | ||||
| while True: | ||||
|     db.eventlog.insert_one({ "timestamp": "...", "event": "motion-detected", "started": "...", "finished": "...", "component": "motion-detect", "camera": "Server room", "action": "event", | ||||
|                     }) | ||||
|     db.eventlog.insert_one({ | ||||
|         "timestamp": datetime.utcnow(), | ||||
|         "event": "motion-detected", | ||||
|         "started": "...", | ||||
|         "finished": "...", | ||||
|         "component": "motion-detect", | ||||
|         "camera": "Server room", | ||||
|         "action": "event", | ||||
|         "screenshot_count": 1 | ||||
|     }) | ||||
|     sleep(1) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user