50 lines
1.7 KiB
GDScript
50 lines
1.7 KiB
GDScript
@icon("res://addons/twitcher/assets/auth-icon.svg")
|
|
@tool
|
|
extends OAuthTokenHandler
|
|
|
|
class_name TwitchTokenHandler
|
|
|
|
## Time between checking the validation of the tokens
|
|
var _last_validation_check: int = 0
|
|
|
|
|
|
func _ready() -> void:
|
|
super._ready()
|
|
# We don't need to check right after the start
|
|
_last_validation_check = Time.get_ticks_msec() + 60 * 60 * 1000;
|
|
|
|
|
|
func _check_token_refresh() -> void:
|
|
super._check_token_refresh()
|
|
|
|
if _last_validation_check < Time.get_ticks_msec():
|
|
_validate_token()
|
|
|
|
|
|
## Calles the validation endpoint of Twtich to make sure
|
|
func _validate_token() -> void:
|
|
_last_validation_check = Time.get_ticks_msec() + 60 * 60 * 1000;
|
|
var validation_request = _http_client.request("https://id.twitch.tv/oauth2/validate", HTTPClient.METHOD_GET, {
|
|
"Authorization": "OAuth %s" % await token.get_access_token()
|
|
}, "")
|
|
var response = await _http_client.wait_for_request(validation_request)
|
|
if response.response_code != 200:
|
|
refresh_tokens()
|
|
return
|
|
|
|
var response_string: String = response.response_data.get_string_from_utf8();
|
|
var response_data = JSON.parse_string(response_string);
|
|
if response_data["expires_in"] <= 0:
|
|
refresh_tokens()
|
|
return
|
|
|
|
|
|
func revoke_token() -> void:
|
|
var request = _http_client.request("https://id.twitch.tv/oauth2/revoke", HTTPClient.METHOD_POST,
|
|
{ "Content-Type": "application/x-www-form-urlencoded" },
|
|
"client_id=%s&token=%s" % [oauth_setting.client_id, await token.get_access_token()])
|
|
var response: BufferedHTTPClient.ResponseData = await _http_client.wait_for_request(request)
|
|
if response.error:
|
|
var response_message = response.response_data.get_string_from_utf8()
|
|
logError("Couldn't revoke Token cause of: %s" % response_message)
|
|
token.remove_tokens()
|