/** * Try to unlock the door with auth mode */ exports.handler = async function(context, event, callback) { const response = new Twilio.Response(); let door = event.door; let pin = event.key; if (!door || !pin) { response.setStatusCode(400); return callback(null, response); } const ddbPath = Runtime.getFunctions()['common/ddb'].path; const ddb = require(ddbPath); const client = ddb.createDDBClient(context); const config = await client.send(ddb.getDoorConfigCommand(door)); if (!config.Item) { response.setStatusCode(404); return callback(null, response); } let correctPin = config.Item.pin.S; if (correctPin !== pin) { response.setStatusCode(401); return callback(null, response); } const fingerprint = { method: "PIN", userAgent: event.request.headers['user-agent'], }; const timeout = config.Item.timeout.N; await client.send(ddb.setLockStatusCommand(door, timeout, fingerprint)) .then(async (item) => { response .setStatusCode(200) .appendHeader('Content-Type', 'application/json') .setBody({ msg: `Opened the door "${door}" for ${timeout}s` }); }).catch((e) => { console.log(e); response .setStatusCode(500) .appendHeader('Content-Type', 'application/json') .setBody({ err: e }); }); await client.destroy(); return callback(null, response); };