1
1
# Copyright INRIM (https://www.inrim.eu)
2
2
# See LICENSE file for full licensing details.
3
3
import copy
4
- import sys
5
- from typing import Optional
6
- from fastapi import FastAPI , Request , Header , HTTPException , Depends , Form
7
- from fastapi .responses import RedirectResponse , JSONResponse , HTMLResponse
8
- from .ContentService import ContentService
9
- from .main .base .base_class import BaseClass , PluginBase
10
- from .main .base .utils_for_service import requote_uri
11
- from starlette .status import HTTP_302_FOUND , HTTP_303_SEE_OTHER
12
- from fastapi .concurrency import run_in_threadpool
13
- from starlette .datastructures import QueryParams
14
- import httpx
15
4
import logging
16
- import ujson
17
5
import re
6
+
7
+ import httpx
8
+ import ujson
18
9
from core .cache .cache import get_cache
10
+ from fastapi import Request
11
+ from fastapi .responses import RedirectResponse , JSONResponse , HTMLResponse
12
+ from starlette .datastructures import QueryParams
13
+ from starlette .status import HTTP_303_SEE_OTHER
14
+
15
+ from .ContentService import ContentService
16
+ from .main .base .base_class import PluginBase
17
+ from .main .base .utils_for_service import requote_uri
19
18
20
19
logger = logging .getLogger (__name__ )
21
20
@@ -54,7 +53,6 @@ def query_params(cls, url) -> QueryParams:
54
53
qstring = url .split ("?" )[1 ] if "?" in url else ""
55
54
return QueryParams (qstring )
56
55
57
-
58
56
def clean_form (self , form_data ):
59
57
# logger.info(f"{form_data}")
60
58
dat = {}
@@ -106,6 +104,12 @@ def init_headers_and_token(self):
106
104
elif self .request .headers .get ("apitoken" ):
107
105
self .token = self .request .headers .get ("apitoken" )
108
106
self .is_api = True
107
+ else :
108
+ self .headers .update (
109
+ {
110
+ "authtoken" : self .token ,
111
+ }
112
+ )
109
113
110
114
# TODO move in shibboleth Gateway
111
115
if "x-remote-user" not in self .request .headers :
@@ -152,7 +156,7 @@ async def compute_datagrid_rows(self, key, model_name, rec_name=""):
152
156
return res
153
157
154
158
async def compute_datagrid_add_row (
155
- self , key , num_rows , model_name , rec_name = "" , data = {}
159
+ self , key , num_rows , model_name , rec_name = "" , data = {}
156
160
):
157
161
logger .info ("compute_datagrid_add_row" )
158
162
await self .get_session ()
@@ -177,7 +181,7 @@ async def before_submit(self, data, is_create=False):
177
181
return data .copy ()
178
182
179
183
async def middleware_server_post_action (
180
- self , content_service , submitted_data
184
+ self , content_service , submitted_data
181
185
) -> dict :
182
186
"""
183
187
This middleware method is triggered form Gateway.server_post_action method
@@ -206,17 +210,17 @@ async def middleware_server_post_action(
206
210
207
211
if "rec_name" in submitted_data :
208
212
allowed = (
209
- self .name_allowed .match (submitted_data .get ("rec_name" ))
210
- or False
213
+ self .name_allowed .match (submitted_data .get ("rec_name" ))
214
+ or False
211
215
)
212
216
if not allowed :
213
217
logger .error (f"name { submitted_data .get ('rec_name' )} " )
214
218
215
219
err = {
216
220
"status" : "error" ,
217
221
"message" : f"Errore nel campo name "
218
- f"{ submitted_data .get ('rec_name' )} "
219
- f"caratteri non consentiti" ,
222
+ f"{ submitted_data .get ('rec_name' )} "
223
+ f"caratteri non consentiti" ,
220
224
"model" : submitted_data .get ("data_model" ),
221
225
"data" : {},
222
226
}
@@ -332,9 +336,9 @@ async def server_get_action(self, url_action="", modal=False):
332
336
url = url_action
333
337
server_response = {}
334
338
if server_response and (
335
- server_response .get ("action" )
336
- or server_response .get ("content" , {}).get ("action" )
337
- or server_response .get ("content" , {}).get ("reload" )
339
+ server_response .get ("action" )
340
+ or server_response .get ("content" , {}).get ("action" )
341
+ or server_response .get ("content" , {}).get ("reload" )
338
342
):
339
343
content = server_response
340
344
if "content" in server_response :
@@ -425,7 +429,7 @@ async def get_list_models(self, domain={}, compute_label="title"):
425
429
return data
426
430
427
431
async def get_remote_data_select (
428
- self , url , path_value , header_key , header_value_key
432
+ self , url , path_value , header_key , header_value_key
429
433
):
430
434
"""
431
435
name is a model name
@@ -466,7 +470,7 @@ async def get_resource_schema_select(self, type, select):
466
470
return data
467
471
468
472
async def complete_json_response (
469
- self , res , orig_resp = None
473
+ self , res , orig_resp = None
470
474
) -> JSONResponse :
471
475
response = JSONResponse (res )
472
476
return self .complete_response (response )
@@ -514,12 +518,14 @@ async def get_remote_object(self, url, headers={}, params={}, cookies={}):
514
518
515
519
if "token" in params :
516
520
cookies = {"authtoken" : params .get ("token" )}
521
+ if "cookie" in self .headers :
522
+ self .headers .pop ("cookie" )
517
523
518
524
if not cookies :
519
525
cookies = self .request .cookies .copy ()
520
526
521
527
# logger.info(f" request headers {self.headers}")
522
- logger .debug (f"get_remote_object --> { url } " )
528
+ logger .debug (f"get_remote_object --> { url } cookies { cookies } self.headers { self . headers } " )
523
529
524
530
async with httpx .AsyncClient (timeout = None ) as client :
525
531
res = await client .get (
@@ -550,11 +556,14 @@ async def get_remote_object(self, url, headers={}, params={}, cookies={}):
550
556
return {}
551
557
552
558
async def get_remote_request (
553
- self , url , headers = {}, params = {}, cookies = {}, use_app = True
559
+ self , url , headers = {}, params = {}, cookies = {}, use_app = True , service_url = False
554
560
):
555
561
if use_app :
556
562
headers = self .headers
557
563
564
+ if service_url :
565
+ url = f"{ self .local_settings .service_url } { url } "
566
+
558
567
logger .info (f"get_remote_request --> { url } " )
559
568
logger .info (f" request updated headers before { headers } " )
560
569
async with httpx .AsyncClient (timeout = None ) as client :
@@ -575,7 +584,7 @@ async def get_remote_request(
575
584
return {"status" : "error" , "msg" : res .status_code }
576
585
577
586
async def post_remote_object (
578
- self , url , data = {}, headers = {}, params = {}, cookies = {}
587
+ self , url , data = {}, headers = {}, params = {}, cookies = {}
579
588
):
580
589
logger .debug (url )
581
590
if self .local_settings .service_url not in url :
@@ -613,7 +622,7 @@ async def post_remote_object(
613
622
return {"status" : "error" , "msg" : f"{ url } ERROR { res .status_code } " }
614
623
615
624
async def post_remote_request (
616
- self , url , data = {}, headers = {}, params = {}, cookies = {}, use_app = True
625
+ self , url , data = {}, headers = {}, params = {}, cookies = {}, use_app = True
617
626
):
618
627
if use_app :
619
628
headers = self .headers .copy ()
@@ -638,7 +647,7 @@ async def post_remote_request(
638
647
return {}
639
648
640
649
async def delete_remote_object (
641
- self , url , data = {}, headers = {}, params = {}, cookies = {}
650
+ self , url , data = {}, headers = {}, params = {}, cookies = {}
642
651
):
643
652
logger .debug (f"delete_remote_object --> { url } " )
644
653
0 commit comments