Update erm module
Added blocking functionality for unsecure requests and modified some function names.
This commit is contained in:
parent
0ac55d4f1b
commit
330bb98dd9
5 changed files with 32 additions and 11 deletions
|
@ -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* <u>logui_font_size</u> = *14*
|
||||
What size the graphical log should have.
|
||||
|
||||
## Easy Request Maker
|
||||
### *CoreTypes.BlockadeLevel* <u>erm_unsecure_requests</u> = *CoreTypes.BlockadeLevel.BLOCK*
|
||||
Determines how unsecure requests should be handled.
|
||||
|
|
|
@ -13,3 +13,5 @@ Available version types, following the StarOpenSource Versioning Specification (
|
|||
Available log levels, followingthe StarOpenSource Logging Specification (SOSLS) version 1.
|
||||
### <u>SceneType</u>{ NONE, DEBUG, CUTSCENE, MENU, MAIN, BACKGROUND }
|
||||
Available scene types.
|
||||
### <u>BlockadeLevel</u>{ IGNORE, WARN, BLOCK }
|
||||
To what degree *something* should be blocked.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }
|
||||
|
|
30
src/erm.gd
30
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")
|
||||
|
|
Loading…
Reference in a new issue