Program Listing for File Credentials.cpp

Return to documentation for file (components/NVS/src/Credentials.cpp)

#include "Credentials.h"
#include <esp_log.h>
#include "Storage.h"

#include <cstring>
#include <iostream>

static const char* TAG = "Credentials";
namespace credentials {

esp_err_t setInitialCredentials()
{
    esp_err_t err;
    storage::NVS app_nvs;

    err = app_nvs.open(NVS_APP_NAMESPACE, NVS_READWRITE);
    if (err != ESP_OK) {
        const char* err_str = esp_err_to_name(err);
        ESP_LOGE(TAG,
            "Couldn't open namespace \"%s\" (%s)",
            NVS_APP_NAMESPACE,
            err_str);
        return err;
    }

    char user_name[MAX_USER_NAME_LENGTH];
    char user_password[MAX_USER_PASSWORD_LENGTH];
    size_t ul = MAX_USER_NAME_LENGTH;
    size_t pl = MAX_USER_PASSWORD_LENGTH;
    err = app_nvs.getString(USER_NAME_KEY, user_name, &ul);
    if (err != ESP_OK) {
        ESP_LOGI(TAG, "There is no username in nvs, going to set it");
        err = app_nvs.setString(USER_NAME_KEY, DEFAUL_USERNAME);
        if (err != ESP_OK) {
            ESP_LOGE(TAG, "There are errors , was not possible to save in NVS the username");
            return ESP_FAIL;
        }
        err = app_nvs.setString(USER_PASSWORD_KEY, DEFAULT_USER_PASSWORD);
        if (err != ESP_OK) {
            ESP_LOGI(TAG, "Error trying to save default password");
            return ESP_FAIL;
        }
    } else {
        err = app_nvs.getString(USER_PASSWORD_KEY, user_password, &pl);
        if (err != ESP_OK) {
            err = app_nvs.setString(USER_PASSWORD_KEY, DEFAULT_USER_PASSWORD);
            if (err != ESP_OK) {
                return ESP_FAIL;
            }
        }
        ESP_LOGI(TAG, "\nUsername: %s, Password: %s --> inside eeprom", &user_name[0], &user_password[0]);
    }

    return ESP_OK;
}

esp_err_t getCredentials(store_credentials_t* user_credentials)
{
    esp_err_t err;
    storage::NVS app_nvs;

    err = app_nvs.open(NVS_APP_NAMESPACE, NVS_READWRITE);
    if (err != ESP_OK) {
        const char* err_str = esp_err_to_name(err);
        ESP_LOGE(TAG,
            "Couldn't open namespace \"%s\" (%s)",
            NVS_APP_NAMESPACE,
            err_str);
        return err;
    }

    size_t username_size = MAX_USER_NAME_LENGTH;
    err = app_nvs.getString(USER_NAME_KEY, user_credentials->nvs_username, &username_size);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "error getting username");
        return ESP_FAIL;
    }

    size_t password_size = MAX_USER_PASSWORD_LENGTH;
    err = app_nvs.getString(USER_PASSWORD_KEY, user_credentials->nvs_password, &password_size);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "error getting password");
        return ESP_FAIL;
    }
    return ESP_OK;
}

bool credentialCompare(const char* a, const char* b)
{
    return strcmp(a, b) == 0;
}


esp_err_t saveNewCredentials(store_credentials_t credentials)
{
    esp_err_t err;
    storage::NVS app_nvs;
    err = app_nvs.open(NVS_APP_NAMESPACE, NVS_READWRITE);
    if (err != ESP_OK) {
        const char* err_str = esp_err_to_name(err);
        ESP_LOGE(TAG,
            "Couldn't open namespace \"%s\" (%s)",
            NVS_APP_NAMESPACE,
            err_str);
        return err;
    }

    err = app_nvs.setString(USER_NAME_KEY, credentials.nvs_username);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "Error the save new username");
        return ESP_FAIL;
    }

    err = app_nvs.setString(USER_PASSWORD_KEY, credentials.nvs_password);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "Error the save new password");
        return ESP_FAIL;
    }

    return err;
}
} // namespace credentials