Skip to content

Commit 40137f1

Browse files
committed
feat: enhance init_params handling with encryption and decryption for tools and shared tools
1 parent 64e26dd commit 40137f1

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

apps/tools/serializers/tool.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from common.field.common import UploadedImageField
2121
from common.result import result
2222
from common.utils.common import get_file_content
23+
from common.utils.rsa_util import rsa_long_decrypt, rsa_long_encrypt
2324
from common.utils.tool_code import ToolExecutor
2425
from knowledge.models import File, FileSourceType
2526
from maxkb.const import CONFIG, PROJECT_DIR
@@ -289,17 +290,45 @@ def edit(self, instance, with_valid=True):
289290
edit_dict = {field: instance.get(field) for field in edit_field_list if (
290291
field in instance and instance.get(field) is not None)}
291292

293+
tool = QuerySet(Tool).filter(id=self.data.get('id')).first()
294+
if 'init_params' in edit_dict:
295+
if edit_dict['init_field_list'] is not None:
296+
rm_key = []
297+
for key in edit_dict['init_params']:
298+
if key not in [field['field'] for field in edit_dict['init_field_list']]:
299+
rm_key.append(key)
300+
for key in rm_key:
301+
edit_dict['init_params'].pop(key)
302+
if tool.init_params:
303+
old_init_params = json.loads(rsa_long_decrypt(tool.init_params))
304+
for key in edit_dict['init_params']:
305+
if key in old_init_params and edit_dict['init_params'][key] == encryption(old_init_params[key]):
306+
edit_dict['init_params'][key] = old_init_params[key]
307+
edit_dict['init_params'] = rsa_long_encrypt(json.dumps(edit_dict['init_params']))
308+
292309
QuerySet(Tool).filter(id=self.data.get('id')).update(**edit_dict)
293310

294311
return self.one()
295312

296313
def delete(self):
297314
self.is_valid(raise_exception=True)
315+
tool = QuerySet(Tool).filter(id=self.data.get('id')).first()
316+
if tool.template_id is None and tool.icon != '/ui/favicon.ico':
317+
QuerySet(File).filter(id=tool.icon.split('/')[-1]).delete()
298318
QuerySet(Tool).filter(id=self.data.get('id')).delete()
299319

300320
def one(self):
301321
self.is_valid(raise_exception=True)
302322
tool = QuerySet(Tool).filter(id=self.data.get('id')).first()
323+
if tool.init_params:
324+
tool.init_params = json.loads(rsa_long_decrypt(tool.init_params))
325+
if tool.init_field_list:
326+
password_fields = [i["field"] for i in tool.init_field_list if
327+
i.get("input_type") == "PasswordInput"]
328+
if tool.init_params:
329+
for k in tool.init_params:
330+
if k in password_fields and tool.init_params[k]:
331+
tool.init_params[k] = encryption(tool.init_params[k])
303332
return ToolModelSerializer(tool).data
304333

305334
def export(self):

0 commit comments

Comments
 (0)