11## @meta-authors Nicolò 'fenix' Santilio,
2- ## @meta-version 2.4
2+ ## @meta-version 2.5
33##
44## Referenced by [code]Firebase.Firestore[/code]. Represents the Firestore module.
55## Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.
@@ -144,25 +144,19 @@ func collection(path : String) -> FirestoreCollection:
144144## @arg-types FirestoreQuery
145145## @return FirestoreTask
146146func query (query : FirestoreQuery ) -> FirestoreTask :
147- if auth :
148- var firestore_task : FirestoreTask = FirestoreTask .new ()
149- firestore_task .connect ("result_query" , self , "_on_result_query" )
150- firestore_task .connect ("task_error" , self , "_on_task_error" )
151- firestore_task .connect ("task_list_error" , self , "_on_task_list_error" )
152- firestore_task .connect ("task_query_error" , self , "_on_task_query_error" )
153- firestore_task .action = FirestoreTask .Task .TASK_QUERY
154- var body : Dictionary = { structuredQuery = query .query }
155- var url : String = _base_url + _extended_url + _query_suffix
156-
157- firestore_task .data = query
158- firestore_task ._fields = JSON .print (body )
159- firestore_task ._url = url
160- firestore_task ._headers = PoolStringArray ([_AUTHORIZATION_HEADER + auth .idtoken ])
161- _pooled_request (firestore_task )
162- return firestore_task
163- else :
164- printerr ("Unauthorized" )
165- return null
147+ var firestore_task : FirestoreTask = FirestoreTask .new ()
148+ firestore_task .connect ("result_query" , self , "_on_result_query" )
149+ firestore_task .connect ("task_error" , self , "_on_task_error" )
150+ firestore_task .connect ("task_query_error" , self , "_on_task_query_error" )
151+ firestore_task .action = FirestoreTask .Task .TASK_QUERY
152+ var body : Dictionary = { structuredQuery = query .query }
153+ var url : String = _base_url + _extended_url + _query_suffix
154+
155+ firestore_task .data = query
156+ firestore_task ._fields = JSON .print (body )
157+ firestore_task ._url = url
158+ _pooled_request (firestore_task )
159+ return firestore_task
166160
167161
168162## Request a list of contents (documents and/or collections) inside a collection, specified by its [i]id[/i]. This method will return a [code]FirestoreTask[/code] object, representing a reference to the request issued. If saved into a variable, the [code]FirestoreTask[/code] object can be used to yield on the [code]result_query(result)[/code] signal, or the more generic [code]task_finished(result)[/code] signal.
@@ -180,31 +174,27 @@ func query(query : FirestoreQuery) -> FirestoreTask:
180174## @arg-defaults , 0, "", ""
181175## @return FirestoreTask
182176func list (path : String , page_size : int = 0 , page_token : String = "" , order_by : String = "" ) -> FirestoreTask :
183- if auth :
184- var firestore_task : FirestoreTask = FirestoreTask .new ()
185- firestore_task .connect ("listed_documents" , self , "_on_listed_documents" )
186- firestore_task .connect ("error" , self , "_on_error" )
187- firestore_task .action = FirestoreTask .Task .TASK_LIST
188- var url : String
189- if not path in ["" ," " ]:
190- url = _base_url + _extended_url + path + "/"
191- else :
192- url = _base_url + _extended_url
193- if page_size != 0 :
194- url += "?pageSize=" + str (page_size )
195- if page_token != "" :
196- url += "&pageToken=" + page_token
197- if order_by != "" :
198- url += "&orderBy=" + order_by
199-
200- firestore_task .data = [path , page_size , page_token , order_by ]
201- firestore_task ._url = url
202- firestore_task ._headers = PoolStringArray ([_AUTHORIZATION_HEADER + auth .idtoken ])
203- _pooled_request (firestore_task )
204- return firestore_task
177+ var firestore_task : FirestoreTask = FirestoreTask .new ()
178+ firestore_task .connect ("listed_documents" , self , "_on_listed_documents" )
179+ firestore_task .connect ("task_error" , self , "_on_task_error" )
180+ firestore_task .connect ("task_list_error" , self , "_on_task_list_error" )
181+ firestore_task .action = FirestoreTask .Task .TASK_LIST
182+ var url : String
183+ if not path in ["" ," " ]:
184+ url = _base_url + _extended_url + path + "/"
205185 else :
206- printerr ("Unauthorized" )
207- return null
186+ url = _base_url + _extended_url
187+ if page_size != 0 :
188+ url += "?pageSize=" + str (page_size )
189+ if page_token != "" :
190+ url += "&pageToken=" + page_token
191+ if order_by != "" :
192+ url += "&orderBy=" + order_by
193+
194+ firestore_task .data = [path , page_size , page_token , order_by ]
195+ firestore_task ._url = url
196+ _pooled_request (firestore_task )
197+ return firestore_task
208198
209199
210200func set_networking (value : bool ) -> void :
@@ -310,6 +300,16 @@ func _pooled_request(task : FirestoreTask) -> void:
310300 task ._on_request_completed (HTTPRequest .RESULT_CANT_CONNECT , 404 , PoolStringArray (), PoolByteArray ())
311301 return
312302
303+ if not auth :
304+ printerr ("Unauthenticated request issued..." )
305+ Firebase .Auth .login_anonymous ()
306+ var result : Array = yield (Firebase .Auth , "auth_request" )
307+ if result [0 ] != 1 :
308+ _check_auth_error (result [0 ], result [1 ])
309+ printerr ("Client connected as Anonymous" )
310+
311+ task ._headers = PoolStringArray ([_AUTHORIZATION_HEADER + auth .idtoken ])
312+
313313 var http_request : HTTPRequest
314314 for request in _http_request_pool :
315315 if not request .get_meta ("requesting" ):
@@ -380,3 +380,9 @@ func _on_connect_check_request_completed(result : int, _response_code, _headers,
380380
381381func _on_FirebaseAuth_logout () -> void :
382382 auth = {}
383+
384+ func _check_auth_error (code : int , message : String ) -> void :
385+ var err : String
386+ match code :
387+ 400 : err = "Please, enable Anonymous Sign-in method or Authenticate the Client before issuing a request (best option)"
388+ printerr (err )
0 commit comments