@@ -1196,6 +1196,86 @@ def api_check_cookiejar_access_acl(cookiejar_uuid, user_org, user_id, user_role,
11961196
11971197#### API ####
11981198
1199+ def api_export_cookiejar_json (user_org , user_id , user_role , cookiejar_uuid ):
1200+ resp = api_check_cookiejar_access_acl (cookiejar_uuid , user_org , user_id , user_role , 'view' )
1201+ if resp :
1202+ return resp
1203+ cookiejar = Cookiejar (cookiejar_uuid )
1204+ storage = cookiejar .get_local_storage ()
1205+ if not isinstance (storage , dict ):
1206+ storage = {}
1207+ storage ['cookies' ] = cookiejar .get_cookies ()
1208+
1209+ return {
1210+ 'uuid' : cookiejar_uuid ,
1211+ 'description' : cookiejar .get_description (),
1212+ 'level' : cookiejar .get_level (),
1213+ 'storage' : storage ,
1214+ }, 200
1215+
1216+
1217+ def _import_storage_in_cookiejar (cookiejar , storage ):
1218+ cookies = storage .get ('cookies' , [])
1219+ origins = storage .get ('origins' )
1220+
1221+ if not cookies and not origins :
1222+ return {'error' : 'No cookies or local storage to import' }, 400
1223+
1224+ cookiejar .delete_cookies ()
1225+ cookiejar .delete_local_storage ()
1226+ cookiejar .set_cookies (cookies )
1227+ cookiejar .set_local_storage (storage )
1228+
1229+
1230+ def _get_storage_from_cookiejar_json (data ):
1231+ storage = data .get ('storage' )
1232+ if storage is None :
1233+ storage = data .get ('local_storage' , data )
1234+ if isinstance (storage , dict ) and 'cookies' not in storage and 'cookies' in data :
1235+ storage ['cookies' ] = data .get ('cookies' , [])
1236+ if not isinstance (storage , dict ):
1237+ return None
1238+ return storage
1239+
1240+
1241+ def api_import_cookiejar_json (user_org , user_id , user_role , cookiejar_uuid , data ):
1242+ resp = api_check_cookiejar_access_acl (cookiejar_uuid , user_org , user_id , user_role , 'edit' )
1243+ if resp :
1244+ return resp
1245+ storage = _get_storage_from_cookiejar_json (data )
1246+ if storage is None :
1247+ return {'error' : 'invalid cookiejar JSON storage' }, 400
1248+ res = _import_storage_in_cookiejar (Cookiejar (cookiejar_uuid ), storage )
1249+ if res :
1250+ return res
1251+ return {'cookiejar_uuid' : cookiejar_uuid }, 200
1252+
1253+
1254+ def api_create_cookiejar_from_json (user_org , user_id , data ):
1255+ storage = _get_storage_from_cookiejar_json (data )
1256+ if storage is None :
1257+ return {'error' : 'invalid cookiejar JSON storage' }, 400
1258+
1259+ level = data .get ('level' , 1 )
1260+ try :
1261+ level = int (level )
1262+ except (TypeError , ValueError ):
1263+ level = 1
1264+ if level not in range (0 , 3 ):
1265+ level = 1
1266+
1267+ description = data .get ('description' )
1268+ if not description :
1269+ description = 'imported from cookiejar JSON'
1270+
1271+ cookiejar_uuid = create_cookiejar (user_org , user_id , description , level , None )
1272+ res = _import_storage_in_cookiejar (Cookiejar (cookiejar_uuid ), storage )
1273+ if res :
1274+ Cookiejar (cookiejar_uuid ).delete ()
1275+ return res
1276+ return {'cookiejar_uuid' : cookiejar_uuid }, 200
1277+
1278+
11991279def api_import_lacus_cookiejar (user_org , user_id , data , cookiejar_uuid = None ):
12001280 url = data .get ('url' )
12011281 storage = data .get ('storage' )
@@ -1207,11 +1287,6 @@ def api_import_lacus_cookiejar(user_org, user_id, data, cookiejar_uuid=None):
12071287 cookiejar_uuid = data .get ('uuid' )
12081288 level = data .get ('level' , 1 )
12091289 description = data .get ('description' )
1210- cookies = storage .get ('cookies' , [])
1211- origins = storage .get ('origins' )
1212-
1213- if not cookies and not origins :
1214- return {'error' : 'No cookies or local storage to import' }, 400
12151290
12161291 # Create new cookiejar
12171292 if not cookiejar_uuid :
@@ -1223,19 +1298,9 @@ def api_import_lacus_cookiejar(user_org, user_id, data, cookiejar_uuid=None):
12231298 cookiejar = Cookiejar (cookiejar_uuid )
12241299 if not cookiejar .exists ():
12251300 return {'error' : 'unknown cookiejar uuid' }, 404
1226- cookiejar .delete_local_storage ()
1227- for cookie in cookies :
1228- name = cookie .get ('name' )
1229- value = cookie .get ('value' )
1230- domain = cookie .get ('domain' )
1231- path = cookie .get ('path' )
1232- expires = cookie .get ('expires' )
1233- httponly = cookie .get ('httpOnly' )
1234- secure = cookie .get ('secure' )
1235- samesite = cookie .get ('sameSite' )
1236- if name and value :
1237- cookiejar .add_cookie (name , value , domain = domain , httponly = httponly , path = path , secure = secure , expires = expires , samesite = samesite )
1238- cookiejar .set_local_storage (storage )
1301+ res = _import_storage_in_cookiejar (cookiejar , storage )
1302+ if res :
1303+ return res
12391304
12401305 return {'cookiejar_uuid' : cookiejar_uuid }, 200
12411306
0 commit comments