/** * 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); } if (!context['FIXED_PIN_' + door.toUpperCase()]) { response.setStatusCode(404); return callback(null, response); } let correctPin = context['FIXED_PIN_' + door.toUpperCase()]; if (correctPin !== pin) { response.setStatusCode(401); return callback(null, response); } const ddbPath = Runtime.getFunctions()['common/ddb'].path; const ddb = require(ddbPath); const client = ddb.createDDBClient(context); const fingerprint = { method: "PIN", userAgent: event.request.headers['user-agent'], }; const timeout = context['OPEN_TIMEOUT_' + door.toUpperCase()] || 60; 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); };