Initial Commit
Initial commit of Code Base.
This commit is contained in:
parent
293b1213e1
commit
c11a4ebbc2
653 changed files with 36893 additions and 1 deletions
135
addons/twitcher/auth/twitch_auth.gd
Normal file
135
addons/twitcher/auth/twitch_auth.gd
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
@icon("res://addons/twitcher/assets/auth-icon.svg")
|
||||
@tool
|
||||
extends Twitcher
|
||||
|
||||
## Delegate class for the oOuch Library.
|
||||
class_name TwitchAuth
|
||||
|
||||
const HttpUtil = preload("res://addons/twitcher/lib/http/http_util.gd")
|
||||
|
||||
static var _log: TwitchLogger = TwitchLogger.new("TwitchAuth")
|
||||
|
||||
## The requested devicecode to show to the user for authorization
|
||||
signal device_code_requested(device_code: OAuth.OAuthDeviceCodeResponse);
|
||||
|
||||
## Where and how to authorize.
|
||||
@export var oauth_setting: OAuthSetting:
|
||||
set(val):
|
||||
oauth_setting = val
|
||||
if auth != null: auth.oauth_setting = oauth_setting
|
||||
if token_handler != null: token_handler.oauth_setting = oauth_setting
|
||||
update_configuration_warnings()
|
||||
## Shows the what to authorize page of twitch again. (for example you need to relogin with a different account aka bot account)
|
||||
@export var force_verify: bool
|
||||
## Where should the tokens be saved into
|
||||
@export var token: OAuthToken:
|
||||
set(val):
|
||||
token = val
|
||||
if token_handler != null: token_handler.token = token
|
||||
update_configuration_warnings()
|
||||
## Scopes for the token that should be requested
|
||||
@export var scopes: OAuthScopes:
|
||||
set(val):
|
||||
scopes = val
|
||||
if auth != null: auth.scopes = scopes
|
||||
update_configuration_warnings()
|
||||
|
||||
## Takes care to authorize the user
|
||||
@onready var auth: OAuth
|
||||
## Takes care to fetch and refresh oauth tokens
|
||||
@onready var token_handler: TwitchTokenHandler
|
||||
|
||||
|
||||
var is_authenticated: bool:
|
||||
get(): return auth.is_authenticated()
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
child_entered_tree.connect(_on_enter_child)
|
||||
# There could be better locations but this ensures that its there when an
|
||||
# auth is needed.
|
||||
var http_logger = TwitchLogger.new("Http")
|
||||
HttpUtil.set_logger(http_logger.e, http_logger.i, http_logger.d)
|
||||
|
||||
|
||||
func _on_enter_child(node: Node) -> void:
|
||||
if node is OAuth: auth = node
|
||||
if node is TwitchTokenHandler: token_handler = node
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
OAuth.set_logger(_log.e, _log.i, _log.d);
|
||||
if oauth_setting == null: oauth_setting = create_default_oauth_setting()
|
||||
_ensure_children()
|
||||
|
||||
|
||||
func _ensure_children() -> void:
|
||||
if token_handler == null:
|
||||
token_handler = TwitchTokenHandler.new()
|
||||
token_handler.name = "TokenHandler"
|
||||
|
||||
if auth == null:
|
||||
auth = OAuth.new()
|
||||
auth.name = "OAuth"
|
||||
|
||||
_sync_childs()
|
||||
|
||||
if not auth.is_inside_tree():
|
||||
add_child(auth)
|
||||
auth.owner = owner
|
||||
if not token_handler.is_inside_tree():
|
||||
add_child(token_handler)
|
||||
token_handler.owner = owner
|
||||
|
||||
|
||||
func _sync_childs() -> void:
|
||||
token_handler.oauth_setting = oauth_setting
|
||||
token_handler.token = token
|
||||
auth.token_handler = token_handler
|
||||
auth.oauth_setting = oauth_setting
|
||||
auth.scopes = scopes
|
||||
auth.force_verify = &"true" if force_verify else &"false"
|
||||
|
||||
|
||||
func authorize() -> bool:
|
||||
_sync_childs()
|
||||
if await auth.login():
|
||||
token_handler.process_mode = Node.PROCESS_MODE_INHERIT
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func refresh_token() -> void:
|
||||
auth.refresh_token()
|
||||
|
||||
|
||||
static func create_default_oauth_setting() -> OAuthSetting:
|
||||
var oauth_setting = OAuthSetting.new()
|
||||
oauth_setting.authorization_flow = OAuth.AuthorizationFlow.AUTHORIZATION_CODE_FLOW
|
||||
oauth_setting.device_authorization_url = "https://id.twitch.tv/oauth2/device"
|
||||
oauth_setting.token_url = "https://id.twitch.tv/oauth2/token"
|
||||
oauth_setting.authorization_url = "https://id.twitch.tv/oauth2/authorize"
|
||||
oauth_setting.cache_file = "user://auth.conf"
|
||||
oauth_setting.redirect_url = "http://localhost:7170"
|
||||
return oauth_setting
|
||||
|
||||
|
||||
## Checks if the correctly setup
|
||||
func is_configured() -> bool:
|
||||
return _get_configuration_warnings().is_empty()
|
||||
|
||||
|
||||
func _get_configuration_warnings() -> PackedStringArray:
|
||||
var result: PackedStringArray = []
|
||||
if oauth_setting == null:
|
||||
result.append("OAuthSetting missing")
|
||||
else:
|
||||
var oauth_setting_problems : PackedStringArray = oauth_setting.get_valididation_problems()
|
||||
if not oauth_setting_problems.is_empty():
|
||||
result.append("OAuthSetting is invalid")
|
||||
result.append_array(oauth_setting_problems)
|
||||
if scopes == null:
|
||||
result.append("OAuthScopes is missing")
|
||||
if token == null:
|
||||
result.append("OAuthToken is missing")
|
||||
return result
|
||||
Loading…
Add table
Add a link
Reference in a new issue