diff --git a/docs/docs/reference/coreconfiguration.md b/docs/docs/reference/coreconfiguration.md
index a1d6351..b5de5b7 100644
--- a/docs/docs/reference/coreconfiguration.md
+++ b/docs/docs/reference/coreconfiguration.md
@@ -46,3 +46,7 @@ Determines if [`LogUI`](/terminology#logui) should be visible or not.
The color the `LogUI` background will have. Set to `Color.TRANSPARENT` for a transparent background.
### *int* logui_font_size = *14*
What size the graphical log should have.
+
+## Easy Request Maker
+### *CoreTypes.BlockadeLevel* erm_unsecure_requests = *CoreTypes.BlockadeLevel.BLOCK*
+Determines how unsecure requests should be handled.
diff --git a/docs/docs/reference/coretypes.md b/docs/docs/reference/coretypes.md
index 2d99def..154b785 100644
--- a/docs/docs/reference/coretypes.md
+++ b/docs/docs/reference/coretypes.md
@@ -13,3 +13,5 @@ Available version types, following the StarOpenSource Versioning Specification (
Available log levels, followingthe StarOpenSource Logging Specification (SOSLS) version 1.
### SceneType{ NONE, DEBUG, CUTSCENE, MENU, MAIN, BACKGROUND }
Available scene types.
+### BlockadeLevel{ IGNORE, WARN, BLOCK }
+To what degree *something* should be blocked.
diff --git a/src/classes/config.gd b/src/classes/config.gd
index 9d16a6d..36590b4 100644
--- a/src/classes/config.gd
+++ b/src/classes/config.gd
@@ -43,6 +43,9 @@ class_name CoreConfiguration
@export var logui_background_color: Color
## What size the graphical log should have.
@export var logui_font_size: int
+@export_category("Easy Request Maker")
+## Determines how unsecure requests should be handled.
+@export var erm_unsecure_requests: CoreTypes.BlockadeLevel
# Populates configuration with default values
func _init() -> void:
@@ -61,3 +64,5 @@ func _init() -> void:
logui_enabled = true
logui_background_color = Color.BLACK # To disable the background, use Color.TRANSPARENT
logui_font_size = 14
+ # Easy Request Maker
+ erm_unsecure_requests = CoreTypes.BlockadeLevel.BLOCK
diff --git a/src/classes/types.gd b/src/classes/types.gd
index a4e8698..cf420b8 100644
--- a/src/classes/types.gd
+++ b/src/classes/types.gd
@@ -25,3 +25,5 @@ enum VersionType { RELEASE, RELEASECANDIDATE, BETA, ALPHA }
enum LoggerLevel { NONE, ERROR, WARN, INFO, VERB, DIAG }
## Available scene types.
enum SceneType { NONE, DEBUG, CUTSCENE, MENU, MAIN, BACKGROUND }
+## To what degree [i]something[/i] should be blocked.
+enum BlockadeLevel { IGNORE, WARN, BLOCK }
diff --git a/src/erm.gd b/src/erm.gd
index 10cb627..d06fef7 100644
--- a/src/erm.gd
+++ b/src/erm.gd
@@ -22,6 +22,7 @@ var list_queue: Dictionary = {}
var list_active: Dictionary = {}
var list_complete: Dictionary = {}
+var config_unsecure_requests: CoreTypes.BlockadeLevel
func _cleanup() -> void:
clean_queue()
clean_completed()
@@ -39,16 +40,18 @@ func generate_id() -> int:
func awaited_request(url: String, parse_utf8: bool, method: HTTPClient.Method = HTTPClient.Method.METHOD_GET, headers: PackedStringArray = PackedStringArray([]), data: String = "") -> Dictionary:
logger.verbf("erm", "Creating awaited request")
- var id: int = create_download(url, method, headers, data)
- start_download(id, parse_utf8)
+ if !await is_url_allowed(url): return {}
+ var id: int = create_request(url, method, headers, data)
+ start_request(id, parse_utf8)
logger.diagf("erm", "Waiting for request " + str(id) + " to finish")
- while !is_download_complete(id): await get_tree().create_timer(0.1, true).timeout
+ while !is_request_completed(id): await get_tree().create_timer(0.1, true).timeout
var dldata: Dictionary = list_complete[id]
list_complete.erase(id)
return dldata
func oneline_awaited_request(url: String, return_utf8: bool = true, ignore_http_code: bool = false, method: HTTPClient.Method = HTTPClient.Method.METHOD_GET, headers: PackedStringArray = PackedStringArray([]), data: String = "") -> Variant:
var dldata: Dictionary = await awaited_request(url, return_utf8, method, headers, data)
+ if dldata == {}: return null
if dldata["result"] != Error.OK: return null
elif !ignore_http_code and dldata["http_code"] != 200: return null
else:
@@ -57,23 +60,28 @@ func oneline_awaited_request(url: String, return_utf8: bool = true, ignore_http_
func batch_awaited_request(urls: PackedStringArray, parse_utf8: bool, method: HTTPClient.Method = HTTPClient.Method.METHOD_GET, headers: PackedStringArray = PackedStringArray([]), data: String = "") -> Array[Dictionary]:
logger.verbf("erm", "Creating " + str(urls.size()) + " awaited request(s)")
- var dldata: Array[Dictionary]= []
+ var dldata: Array[Dictionary] = []
for url in urls:
- var id: int = create_download(url, method, headers, data)
- start_download(id, parse_utf8)
- logger.diagf("erm", "Waiting for request " + str(id) + " to finish")
- while !is_download_complete(id): await get_tree().create_timer(0.1, true).timeout
+ if !await is_url_allowed(url): continue
+ var thread: Thread = Thread.new()
+ thread.start(Callable(self, "_batch_awaited_request").bind(url, parse_utf8, method, headers, data))
+ var id: int = thread.wait_to_finish()
dldata.append(list_complete[id])
list_complete.erase(id)
return dldata
-func create_download(url: String, method: HTTPClient.Method = HTTPClient.Method.METHOD_GET, headers: PackedStringArray = PackedStringArray([]), body: String = "") -> int:
+func _batch_awaited_request(url: String, parse_utf8: bool, method: HTTPClient.Method = HTTPClient.Method.METHOD_GET, headers: PackedStringArray = PackedStringArray([]), data: String = "") -> int:
+ var id: int = create_request(url, method, headers, data)
+ start_request(id, parse_utf8)
+ logger.diagf("erm", "Waiting for request " + str(id) + " to finish")
+ while !is_request_completed(id): await get_tree().create_timer(0.1, true).timeout
+ return id
logger.verbf("erm", "Creating new request\n-> URL: " + url + "\n-> Method: " + str(method) + "\nHeaders: " + str(headers.size()) + "\nBody size: " + str(body.length()) + " Characters")
var id = generate_id()
list_queue.merge({ id: { "url": url, "method": method, "headers": headers, "body": body } })
return id
-func start_download(id: int, parse_utf8: bool) -> void:
+func start_request(id: int, parse_utf8: bool) -> void:
logger.verbf("erm", "Starting request " + str(id))
list_active.merge({ id: list_queue[id] })
list_queue.erase(id)
@@ -92,7 +100,7 @@ func start_download(id: int, parse_utf8: bool) -> void:
add_child(download)
download.request(list_active[id]["url"], list_active[id]["headers"], list_active[id]["method"], list_active[id]["body"])
-func is_download_complete(id: int) -> bool: return list_complete.has(id)
+func is_request_completed(id: int) -> bool: return list_complete.has(id)
func clean_queue() -> void:
logger.verbf("erm", "Cleaning request queue")