Generalize SSL cert reading from file

This commit is contained in:
Fabio Alessandrelli 2018-03-28 16:26:25 +02:00
parent d97c45ad2e
commit 490dd9f946
4 changed files with 35 additions and 23 deletions

View file

@ -29,6 +29,8 @@
/*************************************************************************/
#include "stream_peer_ssl.h"
#include "os/file_access.h"
#include "project_settings.h"
StreamPeerSSL *(*StreamPeerSSL::_create)() = NULL;
@ -50,6 +52,35 @@ bool StreamPeerSSL::is_available() {
return available;
}
PoolByteArray StreamPeerSSL::get_project_cert_array() {
PoolByteArray out;
String certs_path = GLOBAL_DEF("network/ssl/certificates", "");
ProjectSettings::get_singleton()->set_custom_property_info("network/ssl/certificates", PropertyInfo(Variant::STRING, "network/ssl/certificates", PROPERTY_HINT_FILE, "*.crt"));
if (certs_path != "") {
FileAccess *f = FileAccess::open(certs_path, FileAccess::READ);
if (f) {
int flen = f->get_len();
out.resize(flen + 1);
{
PoolByteArray::Write w = out.write();
f->get_buffer(w.ptr(), flen);
w[flen] = 0; //end f string
}
memdelete(f);
#ifdef DEBUG_ENABLED
print_line("Loaded certs from '" + certs_path);
#endif
}
}
return out;
}
void StreamPeerSSL::_bind_methods() {
ClassDB::bind_method(D_METHOD("poll"), &StreamPeerSSL::poll);

View file

@ -66,6 +66,7 @@ public:
static StreamPeerSSL *create();
static PoolByteArray get_project_cert_array();
static void load_certs_from_memory(const PoolByteArray &p_memory);
static bool is_available();

View file

@ -293,28 +293,10 @@ void StreamPeerMbedTLS::initialize_ssl() {
mbedtls_debug_set_threshold(1);
#endif
String certs_path = GLOBAL_DEF("network/ssl/certificates", "");
ProjectSettings::get_singleton()->set_custom_property_info("network/ssl/certificates", PropertyInfo(Variant::STRING, "network/ssl/certificates", PROPERTY_HINT_FILE, "*.crt"));
PoolByteArray cert_array = StreamPeerSSL::get_project_cert_array();
if (certs_path != "") {
FileAccess *f = FileAccess::open(certs_path, FileAccess::READ);
if (f) {
PoolByteArray arr;
int flen = f->get_len();
arr.resize(flen + 1);
{
PoolByteArray::Write w = arr.write();
f->get_buffer(w.ptr(), flen);
w[flen] = 0; //end f string
}
memdelete(f);
_load_certs(arr);
print_line("Loaded certs from '" + certs_path);
}
}
if (cert_array.size() > 0)
_load_certs(cert_array);
available = true;
}

View file

@ -32,8 +32,6 @@
#define STREAM_PEER_OPEN_SSL_H
#include "io/stream_peer_ssl.h"
#include "os/file_access.h"
#include "project_settings.h"
#include "mbedtls/config.h"
#include "mbedtls/ctr_drbg.h"