Manage to perfom secure request
This commit is contained in:
		
							
								
								
									
										62
									
								
								esp32_device/main/secure_api.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								esp32_device/main/secure_api.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include "secure_api.h"
 | 
			
		||||
#include "storage.h"
 | 
			
		||||
#include "http_client.h"
 | 
			
		||||
#include "constants.h"
 | 
			
		||||
 | 
			
		||||
#include "esp_log.h"
 | 
			
		||||
 | 
			
		||||
static const char *TAG = "secure_api";
 | 
			
		||||
 | 
			
		||||
static char *process_secure_request(const char *uri)
 | 
			
		||||
{
 | 
			
		||||
    char *url = calloc(1, 255);
 | 
			
		||||
    assert(url);
 | 
			
		||||
    size_t orig_len = storage_get_secure_origin(url);
 | 
			
		||||
    assert(orig_len > 0);
 | 
			
		||||
    strcat(url + strlen(url), uri);
 | 
			
		||||
    ESP_LOGI(TAG, "HTTP request on %s", url);
 | 
			
		||||
 | 
			
		||||
    char *root_cat = calloc(1, ROOT_CA_MAX_BYTES);
 | 
			
		||||
    assert(root_cat);
 | 
			
		||||
    assert(storage_get_root_ca(root_cat) > 0);
 | 
			
		||||
 | 
			
		||||
    http_request_opts opts = {
 | 
			
		||||
        .url = url,
 | 
			
		||||
        .root_ca = root_cat};
 | 
			
		||||
    char *res = http_client_exec(&opts);
 | 
			
		||||
 | 
			
		||||
    free(url);
 | 
			
		||||
    free(root_cat);
 | 
			
		||||
 | 
			
		||||
    return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum DevEnrollmentStatus secure_api_get_device_enrollment_status()
 | 
			
		||||
{
 | 
			
		||||
    ESP_LOGI(TAG, "Will check device enrollment status");
 | 
			
		||||
 | 
			
		||||
    // Prepare URI
 | 
			
		||||
    char *uri = calloc(1, 255);
 | 
			
		||||
    assert(uri);
 | 
			
		||||
    sprintf(uri, "/devices_api/mgmt/enrollment_status?id=");
 | 
			
		||||
    assert(storage_get_dev_name(uri + strlen(uri)) > 0);
 | 
			
		||||
 | 
			
		||||
    char *res = process_secure_request(uri);
 | 
			
		||||
    free(uri);
 | 
			
		||||
 | 
			
		||||
    if (res == NULL)
 | 
			
		||||
    {
 | 
			
		||||
        ESP_LOGE(TAG, "Failed to query device enrollment status!");
 | 
			
		||||
        return DevEnrollError;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO : parse reponse
 | 
			
		||||
    printf("response = %s\n", res);
 | 
			
		||||
    free(res);
 | 
			
		||||
 | 
			
		||||
    return DevEnrollError;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user