UNPKG

nubli

Version:
117 lines (116 loc) 5.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const SmartLockCommand_1 = require("./SmartLockCommand"); const states_1 = require("../states"); const smartLock_1 = require("../smartLock"); class RequestAuthorizationsCommand extends SmartLockCommand_1.SmartLockCommand { constructor(pin, offset = 0, count = 10) { super(); this.requiresChallenge = true; this.pin = pin; this.offset = offset; this.count = count; this._response.data = { count: null, authorizations: [] }; } requestData() { let payload = new Buffer(4); payload.writeUInt16LE(this.offset, 0); payload.writeUInt16LE(this.count, 2); let pinBuf = new Buffer(2); pinBuf.writeUInt16LE(this.pin, 0); payload = Buffer.concat([payload, this.challenge, pinBuf]); return smartLock_1.SmartLock.prepareCommand(states_1.Command.REQUEST_AUTHORIZATION_ENTRIES, payload); } handleData(command, payload) { if (command == states_1.Command.AUTHORIZATION_ENTRY_COUNT) { this._response.data.count = payload.readUInt16LE(0); if (this._response.data.count == 0) { this._complete = true; } } else if (command == states_1.Command.AUTHORIZATION_ENTRY) { let entry = {}; entry.authorizationId = payload.readUInt32LE(0); entry.idType = payload.readUInt8(4); entry.name = payload.slice(5, 37).toString('utf8').replace(/\0/g, ''); entry.enabled = payload.readUInt8(37) == 1; entry.remoteAllowed = payload.readUInt8(38) == 1; let year = payload.readUInt16LE(39); let month = payload.readUInt8(41) - 1; let day = payload.readUInt8(42); let hour = payload.readUInt8(43); let minute = payload.readUInt8(44); let second = payload.readUInt8(45); entry.dateCreated = new Date(year, month, day, hour, minute, second); year = payload.readUInt16LE(46); month = payload.readUInt8(48) - 1; day = payload.readUInt8(49); hour = payload.readUInt8(50); minute = payload.readUInt8(51); second = payload.readUInt8(52); entry.dateLastActive = new Date(year, month, day, hour, minute, second); entry.lockCount = payload.readUInt16LE(53); entry.timeLimited = payload.readUInt8(55) == 1; entry.allowedFromDate = null; entry.allowedUntilDate = null; entry.allowedWeekdays = null; entry.allowedFromTime = null; entry.allowedUntilTime = null; if (entry.timeLimited) { year = payload.readUInt16LE(56); month = payload.readUInt8(58) - 1; day = payload.readUInt8(59); hour = payload.readUInt8(60); minute = payload.readUInt8(61); second = payload.readUInt8(62); entry.allowedFromDate = new Date(year, month, day, hour, minute, second); year = payload.readUInt16LE(63); month = payload.readUInt8(65) - 1; day = payload.readUInt8(66); hour = payload.readUInt8(67); minute = payload.readUInt8(68); second = payload.readUInt8(69); entry.allowedUntilDate = new Date(year, month, day, hour, minute, second); let allowedWeekdays = payload.readUInt8(70); if (allowedWeekdays > 0) { entry.allowedWeekdays = []; if (allowedWeekdays & 0x40) entry.allowedWeekdays.push("Monday"); if (allowedWeekdays & 0x20) entry.allowedWeekdays.push("Tuesday"); if (allowedWeekdays & 0x10) entry.allowedWeekdays.push("Wednesday"); if (allowedWeekdays & 0x08) entry.allowedWeekdays.push("Thursday"); if (allowedWeekdays & 0x04) entry.allowedWeekdays.push("Friday"); if (allowedWeekdays & 0x02) entry.allowedWeekdays.push("Saturday"); if (allowedWeekdays & 0x01) entry.allowedWeekdays.push("Sunday"); } hour = payload.readUInt8(71); minute = payload.readUInt8(72); entry.allowedFromTime = hour + ":" + minute; hour = payload.readUInt8(73); minute = payload.readUInt8(74); entry.allowedUntilTime = hour + ":" + minute; } this._response.data.authorizations.push(entry); } else if (command == states_1.Command.STATUS) { let status = payload.readUInt8(0); if (status == 0 && this._response.data.authorizations.length == this._response.data.count) { this._complete = true; } else { this._complete = true; this._response.success = false; } } } } exports.RequestAuthorizationsCommand = RequestAuthorizationsCommand;