Skip to content

Commit

Permalink
Bugfix: Fingerprint and NFC user is moved to cloud users
Browse files Browse the repository at this point in the history
  • Loading branch information
steffjenl committed Nov 11, 2024
1 parent ba8bc9b commit aeb71f3
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 46 deletions.
122 changes: 78 additions & 44 deletions drivers/protectdoorbell/device.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,57 +289,91 @@ class Doorbell extends Homey.Device {
onFingerprintIdentified(payload, actionType = null, eventId = null) {
this.homey.app.debug('[Object] onFingerprintIdentified ' + JSON.stringify(payload));

if (typeof payload === 'undefined'
|| typeof payload.metadata === 'undefined'
|| typeof payload.metadata.fingerprint === 'undefined'
|| typeof payload.metadata.fingerprint.userId === 'undefined'
|| payload.metadata.fingerprint.userId === null) {
this.homey.app.debug('Fingerprint is not valid!');
return;
}

this.homey.app.api.getUsernameById(payload.metadata.fingerprint.userId).then((localUsername) => {
// Generic trigger
this.homey.app._fingerPrintIdentifiedTrigger.trigger({
ufp_fingerprint_identified_camera: this.getName(),
ufp_fingerprint_identified_person: localUsername
if (typeof payload !== 'undefined'
|| typeof payload.metadata !== 'undefined'
|| typeof payload.metadata.fingerprint !== 'undefined'
|| typeof payload.metadata.fingerprint.userId !== 'undefined'
|| payload.metadata.fingerprint.userId !== null) {
this.homey.app.api.getUsernameById(payload.metadata.fingerprint.userId).then((localUsername) => {
// Generic trigger
this.homey.app._fingerPrintIdentifiedTrigger.trigger({
ufp_fingerprint_identified_camera: this.getName(),
ufp_fingerprint_identified_person: localUsername
}).catch(this.error);

// Device trigger
this.driver._deviceFingerprintIdentifiedTrigger.trigger(this, {
ufp_device_fingerprint_identified_person: localUsername,
}).catch(this.error);
}).catch(this.error);

// Device trigger
this.driver._deviceFingerprintIdentifiedTrigger.trigger(this, {
ufp_device_fingerprint_identified_person: localUsername,
return true;
} else if (typeof payload !== 'undefined'
|| typeof payload.metadata !== 'undefined'
|| typeof payload.metadata.fingerprint !== 'undefined'
|| typeof payload.metadata.fingerprint.ulpId !== 'undefined'
|| payload.metadata.fingerprint.ulpId !== null) {
this.homey.app.api.getCloudUsernameById(payload.metadata.fingerprint.ulpId).then((username) => {
// Generic trigger
this.homey.app._fingerPrintIdentifiedTrigger.trigger({
ufp_fingerprint_identified_camera: this.getName(),
ufp_fingerprint_identified_person: username
}).catch(this.error);

// Device trigger
this.driver._deviceFingerprintIdentifiedTrigger.trigger(this, {
ufp_device_fingerprint_identified_person: username,
}).catch(this.error);
}).catch(this.error);
}).catch(this.error);
return true;
}
// Fingerprint is not valid
this.homey.app.debug('Fingerprint is not valid!');
return false;
}

onNFCCardScanned(payload, actionType = null, eventId = null) {
this.homey.app.debug('A [Object] onNFCCardScanned ' + JSON.stringify(payload));

if (typeof payload === 'undefined'
|| typeof payload.metadata === 'undefined'
|| typeof payload.metadata.nfc === 'undefined'
|| typeof payload.metadata.nfc.userId === 'undefined'
|| payload.metadata.nfc.userId === null) {
this.homey.app.debug('NFC Card Event is not valid!');
return;
}

this.homey.app.debug('B [Object] onNFCCardScanned ' + JSON.stringify(payload));

this.homey.app.api.getUsernameById(payload.metadata.nfc.userId).then((localUsername) => {

this.homey.app.debug('C [Object] onNFCCardScanned ' + JSON.stringify(localUsername));
// Generic trigger
this.homey.app._nfcCardScannedTrigger.trigger({
ufp_nfc_card_scanned_camera: this.getName(),
ufp_nfc_card_scanned_person: localUsername
this.homey.app.debug('[Object] onNFCCardScanned ' + JSON.stringify(payload));

if (typeof payload !== 'undefined'
|| typeof payload.metadata !== 'undefined'
|| typeof payload.metadata.nfc !== 'undefined'
|| typeof payload.metadata.nfc.userId !== 'undefined'
|| payload.metadata.nfc.userId !== null) {
this.homey.app.api.getUsernameById(payload.metadata.nfc.userId).then((localUsername) => {
// Generic trigger
this.homey.app._nfcCardScannedTrigger.trigger({
ufp_nfc_card_scanned_camera: this.getName(),
ufp_nfc_card_scanned_person: localUsername
}).catch(this.error);

// Device trigger
this.driver._deviceNFCCardScannedTrigger.trigger(this, {
ufp_device_nfc_card_scanned_person: localUsername,
}).catch(this.error);
}).catch(this.error);

// Device trigger
this.driver._deviceNFCCardScannedTrigger.trigger(this, {
ufp_device_nfc_card_scanned_person: localUsername,
return true;
} else if (typeof payload !== 'undefined'
|| typeof payload.metadata !== 'undefined'
|| typeof payload.metadata.nfc !== 'undefined'
|| typeof payload.metadata.nfc.ulpId !== 'undefined'
|| payload.metadata.nfc.ulpId !== null) {
this.homey.app.api.getCloudUsernameById(payload.metadata.nfc.ulpId).then((username) => {
// Generic trigger
this.homey.app._nfcCardScannedTrigger.trigger({
ufp_nfc_card_scanned_camera: this.getName(),
ufp_nfc_card_scanned_person: username
}).catch(this.error);

// Device trigger
this.driver._deviceNFCCardScannedTrigger.trigger(this, {
ufp_device_nfc_card_scanned_person: username,
}).catch(this.error);
}).catch(this.error);
}).catch(this.error);
return true;
}

this.homey.app.debug('NFC Card Event is not valid!');
return false;
}

onDoorAccess(payload, actionType = null, eventId = null) {
Expand Down
26 changes: 26 additions & 0 deletions library/protectapi.js
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,21 @@ class ProtectAPI extends BaseClass {
});
}

getCloudUsers() {
return new Promise((resolve, reject) => {
const params = {
page_num: 1,
page_size: 200
}
this.webclient.get('users/api/v2/users/search', params, false, true)
.then(response => {
const result = JSON.parse(response);
return resolve(result.data);
})
.catch(error => reject(error));
});
}

getUsernameById(id) {
return new Promise((resolve, reject) => {
this.getUsers()
Expand All @@ -705,6 +720,17 @@ class ProtectAPI extends BaseClass {
});
}

getCloudUsernameById(id) {
return new Promise((resolve, reject) => {
this.getCloudUsers()
.then(users => {
const user = users.find(user => user.unique_id === id);
return resolve(user.email !== "" ? user.email : user.username);
})
.catch(error => reject(error));
});
}

setStatusLed(camera, enabled) {
return new Promise((resolve, reject) => {
const params = {
Expand Down
9 changes: 7 additions & 2 deletions library/webclient.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,12 @@ class ProtectWebClient extends BaseClass {
this._csrfToken = csrfToken;
}

get(resource, params = {}, isBinary = false) {
get(resource, params = {}, isBinary = false, isCloudCall = false) {
let pathPrefix = `${UFV_API_ENDPOINT}`;
if (isCloudCall) {
pathPrefix = `/proxy`;
}

return new Promise((resolve, reject) => {
if (!this._serverHost) reject(new Error('Invalid host.'));
if (!this._cookieToken) reject(new Error('Not logged in.'));
Expand All @@ -72,7 +77,7 @@ class ProtectWebClient extends BaseClass {
method: 'GET',
hostname: this._serverHost,
port: this._serverPort,
path: `${UFV_API_ENDPOINT}/${resource}${this.toQueryString(params)}`,
path: `${pathPrefix}/${resource}${this.toQueryString(params)}`,
headers: {
'Content-Type': 'application/json; charset=utf-8',
Accept: isBinary ? '*/*' : 'application/json',
Expand Down

0 comments on commit aeb71f3

Please sign in to comment.