Files
pebble/src/fw/services/normal/notifications/ancs/nexmo.c
2025-01-27 11:38:16 -08:00

66 lines
2.4 KiB
C

/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "nexmo.h"
#include "ancs_notifications_util.h"
#include "comm/ble/kernel_le_client/ancs/ancs.h"
#include "comm/ble/kernel_le_client/ancs/ancs_types.h"
#include "system/logging.h"
T_STATIC char* NEXMO_REAUTH_STRING = "Pebble check-in code:";
bool nexmo_is_reauth_sms(const ANCSAttribute *app_id, const ANCSAttribute *message) {
if (ancs_notifications_util_is_sms(app_id)) {
if (strstr((const char *)message->value, NEXMO_REAUTH_STRING)) {
PBL_LOG(LOG_LEVEL_INFO, "Got Nexmo Reauth SMS");
return true;
}
}
return false;
}
void nexmo_handle_reauth_sms(uint32_t uid,
const ANCSAttribute *app_id,
const ANCSAttribute *message,
iOSNotifPrefs *existing_notif_prefs) {
const int num_existing_attributes = existing_notif_prefs ?
existing_notif_prefs->attr_list.num_attributes : 0;
AttributeList new_attr_list;
attribute_list_init_list(num_existing_attributes, &new_attr_list);
// Copy over all the existing attributes to our new list
if (existing_notif_prefs) {
for (int i = 0; i < num_existing_attributes; i++) {
new_attr_list.attributes[i] = existing_notif_prefs->attr_list.attributes[i];
}
}
char msg_buffer[message->length + 1];
memcpy(msg_buffer, message->value, message->length);
msg_buffer[message->length] = '\0';
attribute_list_add_cstring(&new_attr_list, AttributeIdAuthCode, msg_buffer);
// This will trigger a sync sending the auth code to the phone
ios_notif_pref_db_store_prefs(app_id->value, app_id->length,
&new_attr_list, &existing_notif_prefs->action_group);
// Dismiss the notification so the user is oblivious to this process
ancs_perform_action(uid, ActionIDNegative);
}