65 lines
1.5 KiB
JavaScript
65 lines
1.5 KiB
JavaScript
/**
|
|
* Try to update door status
|
|
*/
|
|
|
|
exports.handler = async function(context, event, callback) {
|
|
const response = new Twilio.Response();
|
|
|
|
const blockPath = Runtime.getFunctions()['common/blockUserAgent'].path;
|
|
const block = require(blockPath);
|
|
|
|
if (block.shouldBlockRequest(event)) {
|
|
response.setStatusCode(200);
|
|
return callback(null, response);
|
|
}
|
|
|
|
const door = event.door;
|
|
|
|
if (!door) {
|
|
response.setStatusCode(400);
|
|
return callback(null, response);
|
|
}
|
|
|
|
const ddbPath = Runtime.getFunctions()['common/ddb'].path;
|
|
const ddb = require(ddbPath);
|
|
|
|
const client = ddb.createDDBClient(context);
|
|
|
|
await client.send(ddb.getLockStatusCommand(door))
|
|
.then(async (lock) => {
|
|
const isOpen = ddb.isLockOpen(lock);
|
|
|
|
if (isOpen) {
|
|
const fingerprint = JSON.parse(lock.Item.fingerprint.S);
|
|
|
|
response
|
|
.setStatusCode(200)
|
|
.appendHeader('Content-Type', 'application/json')
|
|
.setBody({
|
|
status: "OPEN",
|
|
fingerprint,
|
|
});
|
|
|
|
await client.send(ddb.clearLockStatusCommand(lock));
|
|
return;
|
|
}
|
|
|
|
response
|
|
.setStatusCode(200)
|
|
.appendHeader('Content-Type', 'application/json')
|
|
.setBody({
|
|
status: "CLOSED",
|
|
});
|
|
|
|
}).catch((e) => {
|
|
console.log(e);
|
|
response
|
|
.setStatusCode(500)
|
|
.appendHeader('Content-Type', 'application/json')
|
|
.setBody({ err: e });
|
|
});
|
|
|
|
await client.destroy();
|
|
return callback(null, response);
|
|
};
|