Aucune description

manage_assets_db.py 2.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from flask_login import current_user
  2. from sqlalchemy import and_
  3. from functools import reduce
  4. import app
  5. from app.datamgmt.manage.manage_cases_db import user_list_cases_view
  6. from app.datamgmt.conversions import convert_sort_direction
  7. from app.models.cases import Cases
  8. from app.models.models import CaseAssets
  9. from app.models.models import Client
  10. def get_filtered_assets(case_id=None,
  11. client_id=None,
  12. asset_type_id=None,
  13. asset_id=None,
  14. asset_name=None,
  15. asset_description=None,
  16. asset_ip=None,
  17. page=1,
  18. per_page=10,
  19. sort_by='name',
  20. sort_dir='asc'):
  21. """ Returns a list of assets, filtered by the given parameters.
  22. """
  23. conditions = []
  24. if case_id:
  25. conditions.append(CaseAssets.case_id == case_id)
  26. if client_id:
  27. conditions.append(Client.client_id == client_id)
  28. if asset_type_id:
  29. conditions.append(CaseAssets.asset_type_id == asset_type_id)
  30. if asset_id:
  31. conditions.append(CaseAssets.asset_id == asset_id)
  32. if asset_name:
  33. conditions.append(CaseAssets.asset_name.ilike(f'%{asset_name}%'))
  34. if asset_description:
  35. conditions.append(CaseAssets.asset_description.ilike(f'%{asset_description}%'))
  36. if asset_ip:
  37. conditions.append(CaseAssets.asset_ip.ilike(f'%{asset_ip}%'))
  38. if len(conditions) > 1:
  39. conditions = [reduce(and_, conditions)]
  40. conditions.append(CaseAssets.case_id.in_(user_list_cases_view(current_user.id)))
  41. data = CaseAssets.query.filter(*conditions)
  42. # If client ID then we need to join the client table
  43. if client_id:
  44. data = data.join(CaseAssets.case).join(Cases.client)
  45. if sort_by is not None:
  46. order_func = convert_sort_direction(sort_dir)
  47. if sort_by == 'name':
  48. data = data.order_by(order_func(CaseAssets.asset_name))
  49. elif sort_by == 'description':
  50. data = data.order_by(order_func(CaseAssets.asset_description))
  51. elif sort_by == 'ip':
  52. data = data.order_by(order_func(CaseAssets.asset_ip))
  53. elif sort_by == 'type':
  54. data = data.order_by(order_func(CaseAssets.asset_type_id))
  55. elif sort_by == 'id':
  56. data = data.order_by(order_func(CaseAssets.asset_id))
  57. elif sort_by == 'client':
  58. data = data.order_by(order_func(Client.name))
  59. elif sort_by == 'case':
  60. data = data.order_by(order_func(CaseAssets.case_id))
  61. else:
  62. data = data.order_by(order_func(CaseAssets.asset_name))
  63. try:
  64. filtered_assets = data.paginate(page=page, per_page=per_page)
  65. except Exception as e:
  66. app.logger.exception(f"Failed to get filtered assets: {e}")
  67. raise e
  68. return filtered_assets