From 7d19df3f699911b9f7f338f904bd614f6f8c95d7 Mon Sep 17 00:00:00 2001 From: Gregg Date: Tue, 22 Sep 2020 08:14:02 -0500 Subject: [PATCH] Added 'S' command to change setup code Verified all functionality works as expected. Next Up: Add this code to both serial and AP network configurations. To Do: alter 'H' command so it removes controllers (unpairs) but retains HAP ID and other data. - perhaps make this 'U' command? --- src/HomeSpan.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index b34dcef..1152bf5 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -428,6 +428,59 @@ void Span::processSerialCommand(char *c){ } break; + case 'S': { + Serial.print("\n** Change Setup Code (no entry=cancel change)**\n\n"); + + Network network; // initialization of WiFi credentials and Setup Code + + struct { // temporary structure to hold SRP verification code and salt stored in NVS + uint8_t salt[16]; + uint8_t verifyCode[384]; + } verifyData; + + char c[128]; + char setupCode[9]; + + while(1){ + Serial.print("Setup Code: "); + sprintf(setupCode,""); + readSerial(setupCode,8); + + if(strlen(setupCode)==0){ + Serial.print("(canceled)\n\n"); + Serial.print("** End Change Setup Code **\n\n"); + return; + } + + Serial.print(setupCode); + + int n=0; + while(setupCode[n]!='\0' && setupCode[n]>='0' && setupCode[n]<='9') + n++; + + if(n<8){ + Serial.print("\n** Invalid format!\n\n"); + continue; + } + + if(!network.allowedCode(setupCode)){ + Serial.print("\n** Disallowed code!\n\n"); + continue; + } + + sprintf(c,"\n\nGenerating SRP verification data for new Setup Code: %.3s-%.2s-%.3s\n\n",setupCode,setupCode+3,setupCode+5); + Serial.print(c); + HAPClient::srp.createVerifyCode(setupCode,verifyData.verifyCode,verifyData.salt); // create verification code from default Setup Code and random salt + nvs_set_blob(HAPClient::srpNVS,"VERIFYDATA",&verifyData,sizeof(verifyData)); // update data + nvs_commit(HAPClient::srpNVS); // commit to NVS + Serial.print("** End Change Setup Code **\n\n"); + return; + + } // while loop + + } + break; + case 'W': { nvs_erase_all(HAPClient::wifiNVS); nvs_commit(HAPClient::wifiNVS); @@ -477,6 +530,7 @@ void Span::processSerialCommand(char *c){ Serial.print(" s - print connection status\n"); Serial.print(" d - print attributes database\n"); Serial.print(" i - print detailed info about configuration\n"); + Serial.print(" S - change Setup Code\n"); Serial.print(" W - delete stored WiFi data and restart\n"); Serial.print(" H - delete stored HomeKit Pairing data and restart\n"); Serial.print(" F - delete all stored WiFi Network and HomeKit Pairing data and restart\n");