説明なし

cases.py 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. # IRIS Source Code
  2. # Copyright (C) 2024 - DFIR-IRIS
  3. # contact@dfir-iris.org
  4. #
  5. # This program is free software; you can redistribute it and/or
  6. # modify it under the terms of the GNU Lesser General Public
  7. # License as published by the Free Software Foundation; either
  8. # version 3 of the License, or (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. # Lesser General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU Lesser General Public License
  16. # along with this program; if not, write to the Free Software Foundation,
  17. # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18. from graphene_sqlalchemy import SQLAlchemyObjectType
  19. from graphene_sqlalchemy import SQLAlchemyConnectionField
  20. from graphene.relay import Node
  21. from graphene.relay import Connection
  22. from graphene import Field
  23. from graphene import Mutation
  24. from graphene import NonNull
  25. from graphene import Int
  26. from graphene import Float
  27. from graphene import String
  28. from app.models.cases import Cases
  29. from app.models.authorization import Permissions
  30. from app.models.authorization import CaseAccessLevel
  31. from app.business.iocs import iocs_build_filter_query
  32. from app.business.cases import cases_create
  33. from app.business.cases import cases_delete
  34. from app.business.cases import cases_update
  35. from app.blueprints.graphql.permissions import permissions_check_current_user_has_some_permission
  36. from app.blueprints.graphql.permissions import permissions_check_current_user_has_some_case_access
  37. from app.blueprints.graphql.iocs import IOCConnection
  38. class CaseObject(SQLAlchemyObjectType):
  39. class Meta:
  40. model = Cases
  41. interfaces = [Node]
  42. iocs = SQLAlchemyConnectionField(IOCConnection, ioc_id=Int(), ioc_uuid=String(), ioc_value=String(), ioc_type_id=Int(),
  43. ioc_description=String(), ioc_tlp_id=Int(), ioc_tags=String(), ioc_misp=String(),
  44. user_id=Float())
  45. # TODO why is kwargs necessary? Should investigate and try to remove
  46. @staticmethod
  47. def resolve_iocs(root, info, ioc_id=None, ioc_uuid=None, ioc_value=None, ioc_type_id=None, ioc_description=None, ioc_tlp_id=None, ioc_tags=None,
  48. ioc_misp=None, user_id=None, **kwargs):
  49. permissions_check_current_user_has_some_case_access(root.case_id, [CaseAccessLevel.full_access])
  50. return iocs_build_filter_query(ioc_id=ioc_id, ioc_uuid=ioc_uuid, ioc_value=ioc_value,
  51. ioc_type_id=ioc_type_id, ioc_description=ioc_description,
  52. ioc_tlp_id=ioc_tlp_id, ioc_tags=ioc_tags, ioc_misp=ioc_misp,
  53. user_id=user_id)
  54. @staticmethod
  55. def resolve_case(root, info, case_id):
  56. permissions_check_current_user_has_some_case_access(case_id, [CaseAccessLevel.full_access])
  57. return Cases.query.get(case_id)
  58. class CaseConnection(Connection):
  59. class Meta:
  60. node = CaseObject
  61. total_count = Int()
  62. # TODO why is kwargs necessary? Should investigate and try to remove
  63. @staticmethod
  64. def resolve_total_count(root, info, **kwargs):
  65. return root.length
  66. class CaseCreate(Mutation):
  67. class Arguments:
  68. name = NonNull(String)
  69. description = NonNull(String)
  70. client_id = NonNull(Int)
  71. soc_id = String()
  72. classification_id = Int()
  73. case = Field(CaseObject)
  74. @staticmethod
  75. def mutate(root, info, name, description, client_id, soc_id=None, classification_id=None):
  76. request = {
  77. 'case_name': name,
  78. 'case_description': description,
  79. 'case_customer': client_id,
  80. 'case_soc_id': ''
  81. }
  82. if soc_id:
  83. request['case_soc_id'] = soc_id
  84. if classification_id:
  85. request['classification_id'] = classification_id
  86. case = cases_create(request)
  87. return CaseCreate(case=case)
  88. class CaseDelete(Mutation):
  89. class Arguments:
  90. case_id = NonNull(Float)
  91. case = Field(CaseObject)
  92. @staticmethod
  93. def mutate(root, info, case_id):
  94. permissions_check_current_user_has_some_permission([Permissions.standard_user])
  95. permissions_check_current_user_has_some_case_access(case_id, [CaseAccessLevel.full_access])
  96. cases_delete(case_id)
  97. class CaseUpdate(Mutation):
  98. class Arguments:
  99. case_id = NonNull(Float)
  100. name = String()
  101. description = String()
  102. soc_id = String()
  103. classification_id = Int()
  104. severity_id = Int()
  105. client_id = Int()
  106. owner_id = Int()
  107. state_id = Int()
  108. review_status_id = Int()
  109. reviewer_id = Int()
  110. tags = String()
  111. case = Field(CaseObject)
  112. @staticmethod
  113. def mutate(root, info, case_id, name=None, soc_id=None, classification_id=None, client_id=None, description=None,
  114. severity_id=None, owner_id=None, state_id=None, reviewer_id=None, tags=None, review_status_id=None):
  115. request = {}
  116. if name:
  117. request['case_name'] = name
  118. if soc_id:
  119. request['case_soc_id'] = soc_id
  120. if classification_id:
  121. request['classification_id'] = classification_id
  122. if client_id:
  123. request['case_customer'] = client_id
  124. if description:
  125. request['case_description'] = description
  126. if severity_id:
  127. request['severity_id'] = severity_id
  128. if owner_id:
  129. request['owner_id'] = owner_id
  130. if state_id:
  131. request['state_id'] = state_id
  132. if reviewer_id:
  133. request['reviewer_id'] = reviewer_id
  134. if tags:
  135. request['case_tags'] = tags
  136. if review_status_id:
  137. request['review_status_id'] = review_status_id
  138. permissions_check_current_user_has_some_permission([Permissions.standard_user])
  139. permissions_check_current_user_has_some_case_access(case_id, [CaseAccessLevel.full_access])
  140. case, _ = cases_update(case_id, request)
  141. return CaseUpdate(case=case)