Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 43 additions & 39 deletions addons/supabase/Auth/auth.gd
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ func sign_out() -> AuthTask:
var auth_task : AuthTask = AuthTask.new(
AuthTask.Task.LOGOUT,
_config.supabaseUrl + _logout_endpoint,
_header)
_header + _bearer)
_process_task(auth_task)
return auth_task

Expand Down Expand Up @@ -273,45 +273,49 @@ func _process_task(task : AuthTask, _fake : bool = false) -> void:

func _on_task_completed(task : AuthTask) -> void:
if task._handler!=null: task._handler.queue_free()
if task.user != null:
client = task.user
_auth = client.access_token
_bearer[0] = _bearer[0] % _auth
_expires_in = client.expires_in
match task._code:
AuthTask.Task.SIGNUP:
emit_signal("signed_up", client)
AuthTask.Task.SIGNUPPHONEPASSWORD:
emit_signal("signed_up_phone", client)
AuthTask.Task.SIGNIN:
emit_signal("signed_in", client)
AuthTask.Task.SIGNINOTP:
emit_signal("signed_in_otp", client)
AuthTask.Task.UPDATE:
emit_signal("user_updated", client)
AuthTask.Task.REFRESH:
emit_signal("token_refreshed", client)
AuthTask.Task.VERIFYOTP:
emit_signal("otp_verified")
AuthTask.Task.SIGNINANONYM:
emit_signal("signed_in_anonyous")
refresh_token()
elif task.data == null:
match task._code:
AuthTask.Task.MAGICLINK:
emit_signal("magic_link_sent")
AuthTask.Task.RECOVER:
emit_signal("reset_email_sent")
AuthTask.Task.INVITE:
emit_signal("user_invited")
AuthTask.Task.LOGOUT:
emit_signal("signed_out")
client = null
_auth = ""
_bearer = ["Authorization: Bearer %s"]
_expires_in = 0
elif task.error != null:

if task.error != null:
emit_signal("error", task.error)
else:
if task.user != null:
client = task.user
_auth = client.access_token
_bearer[0] = _bearer[0] % _auth
_expires_in = client.expires_in
match task._code:
AuthTask.Task.SIGNUP:
emit_signal("signed_up", client)
AuthTask.Task.SIGNUPPHONEPASSWORD:
emit_signal("signed_up_phone", client)
AuthTask.Task.SIGNIN:
emit_signal("signed_in", client)
AuthTask.Task.SIGNINOTP:
emit_signal("signed_in_otp", client)
AuthTask.Task.UPDATE:
emit_signal("user_updated", client)
AuthTask.Task.REFRESH:
emit_signal("token_refreshed", client)
AuthTask.Task.VERIFYOTP:
emit_signal("otp_verified")
AuthTask.Task.SIGNINANONYM:
emit_signal("signed_in_anonyous")
refresh_token()
else:
if task.data.empty() or task.data == null:
match task._code:
AuthTask.Task.MAGICLINK:
emit_signal("magic_link_sent")
AuthTask.Task.RECOVER:
emit_signal("reset_email_sent")
AuthTask.Task.INVITE:
emit_signal("user_invited")
AuthTask.Task.LOGOUT:
emit_signal("signed_out")
client = null
_auth = ""
_bearer = ["Authorization: Bearer %s"]
_expires_in = 0


# A timer used to listen through TCP on the redirect uri of the request
func _tcp_stream_timer() -> void:
Expand Down
2 changes: 2 additions & 0 deletions addons/supabase/Auth/auth_task.gd
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ func push_request(httprequest : HTTPRequest) -> void:
_handler = httprequest
_handler.connect("request_completed", self, "_on_task_completed")
_handler.request(_endpoint, _headers, true, _method, to_json(_payload))
yield(_handler, "request_completed")


func _on_task_completed(result : int, response_code : int, headers : PoolStringArray, body : PoolByteArray) -> void:
var result_body : Dictionary = JSON.parse(body.get_string_from_utf8()).result if body.get_string_from_utf8() else {}
Expand Down
4 changes: 2 additions & 2 deletions addons/supabase/Database/database.gd
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func _init(conf : Dictionary, head : PoolStringArray) -> void:

# Issue a query on your database
func query(supabase_query : SupabaseQuery) -> DatabaseTask:
_bearer = Supabase.auth._bearer
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + supabase_query.build_query()
var task : DatabaseTask = DatabaseTask.new()
task._setup(
Expand All @@ -38,7 +38,7 @@ func query(supabase_query : SupabaseQuery) -> DatabaseTask:

# Issue an rpc() call to a function
func rpc(function_name : String, arguments : Dictionary = {}, supabase_query : SupabaseQuery = null) -> DatabaseTask:
_bearer = Supabase.auth._bearer
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "rpc/{function}".format({function = function_name}) + (supabase_query.build_query() if supabase_query!=null else "")
var task : DatabaseTask = DatabaseTask.new()
task._setup(
Expand Down
14 changes: 7 additions & 7 deletions addons/supabase/Storage/storage.gd
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func _init(config : Dictionary) -> void:
name = "Storage"

func list_buckets() -> StorageTask:
_bearer = Supabase.auth._bearer
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "bucket"
var task : StorageTask = StorageTask.new()
task._setup(
Expand All @@ -35,7 +35,7 @@ func list_buckets() -> StorageTask:


func get_bucket(id : String) -> StorageTask:
_bearer = Supabase.auth._bearer
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "bucket/" + id
var task : StorageTask = StorageTask.new()
task._setup(
Expand All @@ -47,7 +47,7 @@ func get_bucket(id : String) -> StorageTask:


func create_bucket(_name : String, id : String, public : bool = false) -> StorageTask:
_bearer = Supabase.auth._bearer
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "bucket"
var task : StorageTask = StorageTask.new()
task._setup(
Expand All @@ -60,7 +60,7 @@ func create_bucket(_name : String, id : String, public : bool = false) -> Storag


func update_bucket(id : String, public : bool) -> StorageTask:
_bearer = Supabase.auth._bearer
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "bucket/" + id
var task : StorageTask = StorageTask.new()
task._setup(
Expand All @@ -73,7 +73,7 @@ func update_bucket(id : String, public : bool) -> StorageTask:


func empty_bucket(id : String) -> StorageTask:
_bearer = Supabase.auth._bearer
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "bucket/" + id + "/empty"
var task : StorageTask = StorageTask.new()
task._setup(
Expand All @@ -85,7 +85,7 @@ func empty_bucket(id : String) -> StorageTask:


func delete_bucket(id : String) -> StorageTask:
_bearer = Supabase.auth._bearer
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "bucket/" + id
var task : StorageTask = StorageTask.new()
task._setup(
Expand All @@ -100,7 +100,7 @@ func from(id : String) -> StorageBucket:
for bucket in get_children():
if bucket.id == id:
return bucket
var storage_bucket : StorageBucket = StorageBucket.new(id, _config)
var storage_bucket : StorageBucket = StorageBucket.new(id, _config, get_parent().auth._bearer)
add_child(storage_bucket)
return storage_bucket

Expand Down
12 changes: 2 additions & 10 deletions addons/supabase/Storage/storage_bucket.gd
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,15 @@ var _response_code : int
var id : String


func _init(id : String , config : Dictionary) -> void:
func _init(id : String , config : Dictionary, bearer : PoolStringArray) -> void:
_config = config
self.id = id
_http_client
_bearer = bearer
name = "Bucket_"+id
set_process_internal(false)


func list(prefix : String = "", limit : int = 100, offset : int = 0, sort_by : Dictionary = {column = "name", order = "asc"} ) -> StorageTask:
_bearer = Supabase.auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "list/" + id
var task : StorageTask = StorageTask.new()
var header : PoolStringArray = [_header[0] % "application/json"]
Expand All @@ -86,7 +85,6 @@ func list(prefix : String = "", limit : int = 100, offset : int = 0, sort_by : D

func upload(object : String, file_path : String, upsert : bool = false) -> StorageTask:
requesting_raw = true
_bearer = Supabase.auth._bearer
var task : StorageTask = StorageTask.new()
var endpoint : String = _config.supabaseUrl + _rest_endpoint + id + "/" + object
var file : File = File.new()
Expand Down Expand Up @@ -114,7 +112,6 @@ func upload(object : String, file_path : String, upsert : bool = false) -> Stora

func update(bucket_path : String, file_path : String) -> StorageTask:
requesting_raw = true
_bearer = Supabase.auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + id + "/" + bucket_path
var file : File = File.new()
file.open(file_path, File.READ)
Expand All @@ -136,7 +133,6 @@ func update(bucket_path : String, file_path : String) -> StorageTask:


func move(source_path : String, destination_path : String) -> StorageTask:
_bearer = Supabase.auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "move"
var task : StorageTask = StorageTask.new()
var header : PoolStringArray = [_header[0] % "application/json"]
Expand All @@ -150,7 +146,6 @@ func move(source_path : String, destination_path : String) -> StorageTask:


func create_signed_url(object : String, expires_in : int = 60000) -> StorageTask:
_bearer = Supabase.auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "sign/" + id + "/" + object
var task : StorageTask = StorageTask.new()
var header : PoolStringArray = [_header[0] % "application/json"]
Expand All @@ -166,7 +161,6 @@ func create_signed_url(object : String, expires_in : int = 60000) -> StorageTask

func download(object : String, to_path : String = "", private : bool = false) -> StorageTask:
if not private:
_bearer = Supabase.auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "public/" + id + "/" + object
var task : StorageTask = StorageTask.new()
var header : PoolStringArray = [_header[0] % "application/json"]
Expand All @@ -178,7 +172,6 @@ func download(object : String, to_path : String = "", private : bool = false) ->
_process_task(task, {download_file = to_path})
return task
else:
_bearer = Supabase.auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "authenticated/" + id + "/" + object
var task : StorageTask = StorageTask.new()
var header : PoolStringArray = [_header[0] % "application/json"]
Expand All @@ -196,7 +189,6 @@ func get_public_url(object : String) -> String:


func remove(objects : PoolStringArray) -> StorageTask:
_bearer = Supabase.auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + id + ("/" + objects[0] if objects.size() == 1 else "")
var task : StorageTask = StorageTask.new()
var header : PoolStringArray = [_header[0] % "application/json"]
Expand Down
42 changes: 42 additions & 0 deletions addons/supabase/User/user.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
extends Reference
class_name SupabaseUser

var email : String
var id : String
var access_token : String
var token_type : String
var refresh_token : String
var expires_in : float
var created_at : String
var updated_at : String
var last_sign_in_at : String
var user : Dictionary
var user_metadata : Dictionary
var app_metadata : Dictionary
var role : String
var confirmation_sent_at : String

func _init(user_dictionary : Dictionary) -> void:
if user_dictionary.has("user"):
access_token = user_dictionary.access_token
token_type = user_dictionary.token_type
refresh_token = user_dictionary.refresh_token
expires_in = user_dictionary.expires_in
user = user_dictionary.user
last_sign_in_at = user.last_sign_in_at
else:
user = user_dictionary
confirmation_sent_at = user.confirmation_sent_at

email = user.email
id = user.id
created_at = user.created_at
updated_at = user.updated_at
user_metadata = user.user_metadata if user.user_metadata != null else {}
role = user.role

func _to_string():
var to_string : String = "%-10s %s\n" % ["USER ID:", id]
to_string += "%-10s %s\n" % ["EMAIL:", email]
to_string += "%-10s %s\n" % ["ROLE:", role]
return to_string