mmisp-lib 0.1.3__tar.gz → 0.1.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. mmisp_lib-0.1.5/LICENSE +21 -0
  2. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/PKG-INFO +2 -1
  3. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/pyproject.toml +1 -1
  4. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/add_attribute_body.py +5 -6
  5. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/add_attribute_response.py +4 -4
  6. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/objects/create_object_body.py +0 -3
  7. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/objects/get_object_response.py +5 -8
  8. mmisp_lib-0.1.5/src/mmisp/db/mixins.py +17 -0
  9. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/attribute.py +14 -15
  10. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/organisation.py +2 -1
  11. mmisp_lib-0.1.5/src/mmisp/db/models/role.py +34 -0
  12. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/sharing_group.py +4 -3
  13. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/lib/attributes.py +4 -3
  14. mmisp_lib-0.1.5/src/mmisp/lib/permissions.py +54 -0
  15. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp_lib.egg-info/PKG-INFO +2 -1
  16. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp_lib.egg-info/SOURCES.txt +3 -0
  17. mmisp_lib-0.1.3/src/mmisp/db/models/role.py +0 -42
  18. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/README.md +0 -0
  19. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/setup.cfg +0 -0
  20. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/__init__.py +0 -0
  21. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/__init__.py +0 -0
  22. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/add_remove_tag_attribute_response.py +0 -0
  23. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/delete_attribute_response.py +0 -0
  24. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/delete_selected_attribute_body.py +0 -0
  25. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/delete_selected_attribute_response.py +0 -0
  26. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/edit_attribute_body.py +0 -0
  27. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/edit_attributes_response.py +0 -0
  28. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/get_all_attributes_response.py +0 -0
  29. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/get_attribute_response.py +0 -0
  30. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/get_attribute_statistics_response.py +0 -0
  31. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/get_describe_types_response.py +0 -0
  32. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/restore_attribute_reponse.py +0 -0
  33. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/search_attributes_body.py +0 -0
  34. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/attributes/search_attributes_response.py +0 -0
  35. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/auth_keys/__init__.py +0 -0
  36. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/auth_keys/add_auth_key_body.py +0 -0
  37. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/auth_keys/add_auth_key_response.py +0 -0
  38. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/auth_keys/edit_auth_key_body.py +0 -0
  39. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/auth_keys/edit_auth_key_response.py +0 -0
  40. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/auth_keys/search_auth_keys_body.py +0 -0
  41. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/auth_keys/search_get_all_auth_keys_users_response.py +0 -0
  42. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/auth_keys/view_auth_key_response.py +0 -0
  43. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/authentication/__init__.py +0 -0
  44. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/authentication/exchange_token_login_body.py +0 -0
  45. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/authentication/password_login_body.py +0 -0
  46. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/authentication/start_login_body.py +0 -0
  47. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/authentication/start_login_response.py +0 -0
  48. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/authentication/token_response.py +0 -0
  49. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/FreeTextImportWorkerBody.py +0 -0
  50. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/__init__.py +0 -0
  51. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/add_attribute_via_free_text_import_event_body.py +0 -0
  52. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/add_attribute_via_free_text_import_event_response.py +0 -0
  53. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/add_edit_get_event_response.py +0 -0
  54. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/add_event_body.py +0 -0
  55. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/add_remove_tag_events_response.py +0 -0
  56. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/delete_event_response.py +0 -0
  57. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/edit_event_body.py +0 -0
  58. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/get_all_events_response.py +0 -0
  59. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/get_event_response.py +0 -0
  60. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/index_events_body.py +0 -0
  61. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/index_events_response.py +0 -0
  62. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/publish_event_response.py +0 -0
  63. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/search_events_body.py +0 -0
  64. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/search_events_response.py +0 -0
  65. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/events/unpublish_event_response.py +0 -0
  66. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/feeds/__init__.py +0 -0
  67. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/feeds/cache_feed_response.py +0 -0
  68. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/feeds/create_feed_body.py +0 -0
  69. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/feeds/enable_disable_feed_response.py +0 -0
  70. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/feeds/fetch_feeds_response.py +0 -0
  71. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/feeds/get_feed_response.py +0 -0
  72. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/feeds/toggle_feed_body.py +0 -0
  73. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/feeds/update_feed_body.py +0 -0
  74. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/__init__.py +0 -0
  75. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/attach_galaxy_cluster_body.py +0 -0
  76. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/attach_galaxy_cluster_response.py +0 -0
  77. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/delete_force_update_import_galaxy_response.py +0 -0
  78. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/export_galaxies_body.py +0 -0
  79. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/export_galaxies_response.py +0 -0
  80. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/galaxy_schema.py +0 -0
  81. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/get_all_search_galaxies_response.py +0 -0
  82. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/get_galaxy_response.py +0 -0
  83. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/import_galaxies_body.py +0 -0
  84. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/galaxies/search_galaxies_body.py +0 -0
  85. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/noticelists/__init__.py +0 -0
  86. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/noticelists/get_all_noticelist_response.py +0 -0
  87. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/noticelists/get_noticelist_response.py +0 -0
  88. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/objects/__init__.py +0 -0
  89. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/objects/search_objects_body.py +0 -0
  90. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/organisations/__init__.py +0 -0
  91. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/organisations/organisation.py +0 -0
  92. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/roles/__init__.py +0 -0
  93. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/roles/role.py +0 -0
  94. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/__init__.py +0 -0
  95. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/add_org_to_sharing_group_body.py +0 -0
  96. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/add_org_to_sharing_group_legacy_body.py +0 -0
  97. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/add_server_to_sharing_group_body.py +0 -0
  98. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/add_server_to_sharing_group_legacy_body.py +0 -0
  99. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/create_sharing_group_body.py +0 -0
  100. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/create_sharing_group_legacy_body.py +0 -0
  101. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/create_sharing_group_legacy_response.py +0 -0
  102. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/delete_sharing_group_legacy_response.py +0 -0
  103. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/get_all_sharing_groups_response.py +0 -0
  104. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/get_sharing_group_info_response.py +0 -0
  105. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/sharing_group.py +0 -0
  106. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/sharing_group_org.py +0 -0
  107. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/sharing_group_server.py +0 -0
  108. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/update_sharing_group_body.py +0 -0
  109. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/update_sharing_group_legacy_body.py +0 -0
  110. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sharing_groups/view_update_sharing_group_legacy_response.py +0 -0
  111. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sightings/__init__.py +0 -0
  112. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sightings/create_sighting_body.py +0 -0
  113. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/sightings/get_sighting_response.py +0 -0
  114. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/standard_status_response.py +0 -0
  115. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/tags/__init__.py +0 -0
  116. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/tags/create_tag_body.py +0 -0
  117. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/tags/delete_tag_response.py +0 -0
  118. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/tags/get_tag_response.py +0 -0
  119. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/tags/search_tags_response.py +0 -0
  120. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/tags/update_tag_body.py +0 -0
  121. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/taxonomies/__init__.py +0 -0
  122. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/taxonomies/export_taxonomies_response.py +0 -0
  123. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/taxonomies/get_taxonomy_by_id_response.py +0 -0
  124. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/taxonomies/get_taxonomy_response.py +0 -0
  125. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/taxonomies/get_taxonomy_tags_response.py +0 -0
  126. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/user_settings/__init__.py +0 -0
  127. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/user_settings/get_uid_user_setting_response.py +0 -0
  128. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/user_settings/get_user_settings_response.py +0 -0
  129. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/user_settings/search_user_setting_body.py +0 -0
  130. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/user_settings/search_user_setting_response.py +0 -0
  131. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/user_settings/set_user_setting_body.py +0 -0
  132. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/user_settings/set_user_setting_response.py +0 -0
  133. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/user_settings/view_user_setting_response.py +0 -0
  134. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/users/__init__.py +0 -0
  135. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/users/user.py +0 -0
  136. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/users/users_view_me_response.py +0 -0
  137. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/__init__.py +0 -0
  138. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/check_value_warninglists_body.py +0 -0
  139. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/check_value_warninglists_response.py +0 -0
  140. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/create_warninglist_body.py +0 -0
  141. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/delete_warninglist_response.py +0 -0
  142. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/get_selected_all_warninglists_response.py +0 -0
  143. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/get_selected_warninglists_body.py +0 -0
  144. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/toggle_enable_warninglists_body.py +0 -0
  145. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/toggle_enable_warninglists_response.py +0 -0
  146. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/api_schemas/warninglists/warninglist_response.py +0 -0
  147. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/__init__.py +0 -0
  148. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/config.py +0 -0
  149. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/database.py +0 -0
  150. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/__init__.py +0 -0
  151. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/auth_key.py +0 -0
  152. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/event.py +0 -0
  153. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/feed.py +0 -0
  154. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/galaxy.py +0 -0
  155. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/galaxy_cluster.py +0 -0
  156. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/identity_provider.py +0 -0
  157. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/noticelist.py +0 -0
  158. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/object.py +0 -0
  159. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/server.py +0 -0
  160. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/sighting.py +0 -0
  161. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/tag.py +0 -0
  162. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/taxonomy.py +0 -0
  163. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/user.py +0 -0
  164. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/user_setting.py +0 -0
  165. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/models/warninglist.py +0 -0
  166. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/db/print_changes.py +0 -0
  167. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp/lib/__init__.py +0 -0
  168. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp_lib.egg-info/dependency_links.txt +0 -0
  169. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp_lib.egg-info/requires.txt +0 -0
  170. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/src/mmisp_lib.egg-info/top_level.txt +0 -0
  171. {mmisp_lib-0.1.3 → mmisp_lib-0.1.5}/tests/test_dummy.py +0 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Konstantin Zangerle
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mmisp-lib
3
- Version: 0.1.3
3
+ Version: 0.1.5
4
4
  Requires-Python: >=3.11.0
5
5
  Description-Content-Type: text/markdown
6
+ License-File: LICENSE
6
7
  Requires-Dist: fastapi==0.104.1
7
8
  Requires-Dist: SQLAlchemy[asyncio]==1.4.46
8
9
  Requires-Dist: pydantic==1.10.13
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mmisp-lib"
3
- version = "0.1.3"
3
+ version = "0.1.5"
4
4
  description = ""
5
5
  authors = []
6
6
  readme = "README.md"
@@ -2,11 +2,13 @@ from typing import Any, Optional
2
2
 
3
3
  from pydantic import BaseModel, root_validator
4
4
 
5
+ from mmisp.lib.attributes import literal_valid_attribute_types
6
+
5
7
 
6
8
  class AddAttributeBody(BaseModel):
7
- type: str
8
- value: Optional[str]
9
- value1: Optional[str]
9
+ type: literal_valid_attribute_types
10
+ value: str | None = None
11
+ value1: str | None = None
10
12
  value2: str | None = None
11
13
  event_id: str | None = None
12
14
  object_id: str | None = None
@@ -29,6 +31,3 @@ class AddAttributeBody(BaseModel):
29
31
  if all(item is None for item in required_values):
30
32
  raise ValueError("value or value1 has to be set")
31
33
  return data
32
-
33
- class Config:
34
- orm_mode = True
@@ -18,12 +18,12 @@ class AddAttributeAttributes(BaseModel):
18
18
  timestamp: str
19
19
  distribution: str
20
20
  sharing_group_id: str
21
- comment: str
21
+ comment: str | None = None
22
22
  deleted: bool
23
23
  disable_correlation: bool
24
- first_seen: Optional[str] = Field(..., nullable=True)
25
- last_seen: Optional[str] = Field(..., nullable=True)
26
- attribute_tag: list[str] = Field([], alias="AttributeTag")
24
+ first_seen: str | None = None
25
+ last_seen: str | None = None
26
+ attribute_tag: list[str] | None = Field(default_factory=list, alias="AttributeTag")
27
27
 
28
28
 
29
29
  class AddAttributeResponse(BaseModel):
@@ -14,6 +14,3 @@ class ObjectCreateBody(BaseModel):
14
14
  first_seen: str | None = None
15
15
  last_seen: str | None = None
16
16
  Attribute: list[AddAttributeBody] | None = None
17
-
18
- class Config:
19
- orm_mode = True
@@ -1,6 +1,6 @@
1
1
  from typing import Any, Dict, Optional
2
2
 
3
- from pydantic import BaseModel, validator
3
+ from pydantic import BaseModel, Field, validator
4
4
 
5
5
  from mmisp.api_schemas.attributes.get_all_attributes_response import GetAllAttributesResponse
6
6
  from mmisp.api_schemas.events.get_event_response import ObjectEventResponse
@@ -22,7 +22,7 @@ class ObjectWithAttributesResponse(BaseModel):
22
22
  deleted: bool | None = None
23
23
  first_seen: str | None = None
24
24
  last_seen: str | None = None
25
- Attribute: list[GetAllAttributesResponse] | None = None
25
+ attributes: list[GetAllAttributesResponse] | None = Field(alias="Attribute", default=None)
26
26
  Event: ObjectEventResponse | None = None
27
27
 
28
28
  @validator("sharing_group_id", always=True)
@@ -35,16 +35,13 @@ class ObjectWithAttributesResponse(BaseModel):
35
35
  return value
36
36
  return None
37
37
 
38
+ class Config:
39
+ allow_population_by_field_name = True
40
+
38
41
 
39
42
  class ObjectResponse(BaseModel):
40
43
  Object: ObjectWithAttributesResponse
41
44
 
42
- class Config:
43
- orm_mode = True
44
-
45
45
 
46
46
  class ObjectSearchResponse(BaseModel):
47
47
  response: list[ObjectResponse]
48
-
49
- class Config:
50
- orm_mode = True
@@ -0,0 +1,17 @@
1
+ from typing import Self
2
+
3
+ from sqlalchemy import inspect
4
+ from sqlalchemy.ext.hybrid import hybrid_property
5
+
6
+
7
+ class DictMixin:
8
+ def asdict(self: Self) -> dict:
9
+ d = {}
10
+ for key in self.__mapper__.c.keys():
11
+ if not key.startswith("_"):
12
+ d[key] = getattr(self, key)
13
+
14
+ for key, prop in inspect(self.__class__).all_orm_descriptors.items():
15
+ if isinstance(prop, hybrid_property):
16
+ d[key] = getattr(self, key)
17
+ return d
@@ -1,10 +1,11 @@
1
1
  from typing import Self, Type
2
2
 
3
- from sqlalchemy import BigInteger, Boolean, Column, ForeignKey, Integer, String, Text, inspect
3
+ from sqlalchemy import BigInteger, Boolean, Column, ForeignKey, Integer, String, Text
4
4
  from sqlalchemy.ext.hybrid import hybrid_property
5
5
  from sqlalchemy.orm import relationship
6
6
  from sqlalchemy.orm.decl_api import DeclarativeMeta
7
7
 
8
+ from mmisp.db.mixins import DictMixin
8
9
  from mmisp.lib.attributes import categories, default_category, mapper_safe_clsname_val, to_ids
9
10
  from mmisp.util.uuid import uuid
10
11
 
@@ -13,19 +14,6 @@ from .event import Event
13
14
  from .tag import Tag
14
15
 
15
16
 
16
- class DictMixin:
17
- def asdict(self: Self) -> dict:
18
- d = {}
19
- for key in self.__mapper__.c.keys():
20
- if not key.startswith("_"):
21
- d[key] = getattr(self, key)
22
-
23
- for key, prop in inspect(self.__class__).all_orm_descriptors.items():
24
- if isinstance(prop, hybrid_property):
25
- d[key] = getattr(self, key)
26
- return d
27
-
28
-
29
17
  class Attribute(Base, DictMixin):
30
18
  __tablename__ = "attributes"
31
19
 
@@ -50,6 +38,17 @@ class Attribute(Base, DictMixin):
50
38
 
51
39
  event = relationship("Event", back_populates="attributes", lazy="joined")
52
40
 
41
+ __mapper_args__ = {"polymorphic_on": "type"}
42
+
43
+ def __init__(self: Self, *arg, **kwargs) -> None:
44
+ if kwargs["value1"] is None:
45
+ split_val = kwargs["value"].split("|", 1)
46
+ kwargs["value1"] = split_val[0]
47
+ if len(split_val) == 2:
48
+ kwargs["value2"] = split_val[1]
49
+
50
+ super().__init__(*arg, **kwargs)
51
+
53
52
  @property
54
53
  def event_uuid(self: "Attribute") -> str:
55
54
  return self.event.uuid
@@ -83,7 +82,7 @@ class AttributeMeta(DeclarativeMeta):
83
82
  key = clsname[len("Attribute") :]
84
83
  dct["default_category"] = default_category[mapper_safe_clsname_val[key]]
85
84
  dct["categories"] = categories[mapper_safe_clsname_val[key]]
86
- dct["to_ids"] = to_ids[mapper_safe_clsname_val[key]]
85
+ dct["default_to_ids"] = to_ids[mapper_safe_clsname_val[key]]
87
86
  dct["__mapper_args__"] = {"polymorphic_identity": mapper_safe_clsname_val[key]}
88
87
  return super().__new__(cls, clsname, bases, dct)
89
88
 
@@ -2,12 +2,13 @@ from datetime import datetime
2
2
 
3
3
  from sqlalchemy import Boolean, Column, DateTime, Integer, String, Text
4
4
 
5
+ from mmisp.db.mixins import DictMixin
5
6
  from mmisp.util.uuid import uuid
6
7
 
7
8
  from ..database import Base
8
9
 
9
10
 
10
- class Organisation(Base):
11
+ class Organisation(Base, DictMixin):
11
12
  __tablename__ = "organisations"
12
13
 
13
14
  id = Column(Integer, primary_key=True, nullable=False)
@@ -0,0 +1,34 @@
1
+ from typing import Self
2
+
3
+ from sqlalchemy import Boolean, Column, DateTime, Integer, String
4
+
5
+ from mmisp.lib.permissions import Permission
6
+
7
+ from ..database import Base
8
+
9
+ RoleAttrs = {
10
+ "__tablename__": "roles",
11
+ "id": Column(Integer, primary_key=True, nullable=False),
12
+ "name": Column(String(255), nullable=False),
13
+ "created": Column(DateTime, default=None),
14
+ "modified": Column(DateTime, default=None),
15
+ "default_role": Column(Boolean, nullable=False, default=False),
16
+ "memory_limit": Column(String(255), default=""),
17
+ "max_execution_time": Column(String(255), default=""),
18
+ "restricted_to_site_admin": Column(Boolean, nullable=False, default=False),
19
+ "enforce_rate_limit": Column(Boolean, nullable=False, default=False),
20
+ "rate_limit_count": Column(Integer, nullable=False, default=0),
21
+ } | {f"perm_{x.value}": Column(Boolean, default=False) for x in Permission}
22
+
23
+ RoleModel = type("RoleModel", (Base,), RoleAttrs)
24
+
25
+
26
+ class Role(RoleModel):
27
+ def get_permissions(self: Self) -> set[Permission]:
28
+ d: list[Permission] = []
29
+
30
+ for key in self.__mapper__.c.keys():
31
+ if key.startswith("perm_") and getattr(self, key):
32
+ d.append(Permission(key[len("perm_") :]))
33
+
34
+ return set(d)
@@ -2,12 +2,13 @@ from datetime import datetime
2
2
 
3
3
  from sqlalchemy import Boolean, Column, DateTime, Integer, String, Text
4
4
 
5
+ from mmisp.db.mixins import DictMixin
5
6
  from mmisp.util.uuid import uuid
6
7
 
7
8
  from ..database import Base
8
9
 
9
10
 
10
- class SharingGroup(Base):
11
+ class SharingGroup(Base, DictMixin):
11
12
  __tablename__ = "sharing_groups"
12
13
 
13
14
  id = Column(Integer, primary_key=True, nullable=False)
@@ -25,7 +26,7 @@ class SharingGroup(Base):
25
26
  roaming = Column(Boolean, default=False, nullable=False)
26
27
 
27
28
 
28
- class SharingGroupOrg(Base):
29
+ class SharingGroupOrg(Base, DictMixin):
29
30
  __tablename__ = "sharing_group_orgs"
30
31
 
31
32
  id = Column(Integer, primary_key=True, nullable=False)
@@ -34,7 +35,7 @@ class SharingGroupOrg(Base):
34
35
  extend = Column(Boolean, default=False, nullable=False)
35
36
 
36
37
 
37
- class SharingGroupServer(Base):
38
+ class SharingGroupServer(Base, DictMixin):
38
39
  __tablename__ = "sharing_group_servers"
39
40
 
40
41
  id = Column(Integer, primary_key=True, nullable=False)
@@ -1,8 +1,9 @@
1
1
  from collections import defaultdict
2
- from enum import Enum
2
+ from enum import StrEnum
3
+ from typing import Literal, Union
3
4
 
4
5
 
5
- class AttributeCategories(Enum):
6
+ class AttributeCategories(StrEnum):
6
7
  PAYLOAD_DELIVERY = "Payload delivery"
7
8
  ARTIFACTS_DROPPED = "Artifacts dropped"
8
9
  PAYLOAD_INSTALLATION = "Payload installation"
@@ -213,7 +214,7 @@ mapper_val_safe_clsname = {
213
214
  }
214
215
 
215
216
  mapper_safe_clsname_val = dict((v, k) for k, v in mapper_val_safe_clsname.items())
216
-
217
+ literal_valid_attribute_types = Union[*[Literal[k] for k in mapper_val_safe_clsname.keys()]]
217
218
 
218
219
  default_category = {
219
220
  "md5": AttributeCategories.PAYLOAD_DELIVERY,
@@ -0,0 +1,54 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class Permission(StrEnum):
5
+ ADD = "add"
6
+ MODIFY = "modify"
7
+ """Manage Own Events."""
8
+ MODIFY_ORG = "modify_org"
9
+ """Manage Organisation Events."""
10
+ PUBLISH = "publish"
11
+ """Publish Organisation Events."""
12
+ DELEGATE = "delegate"
13
+ """Allow users to create delegation requests for their own org only events to trusted third parties."""
14
+ SYNC = "sync"
15
+ """Synchronisation permission, can be used to connect two MISP instances create data on behalf of other users.
16
+ Make sure that the role with this permission has also access to tagging and tag editing rights."""
17
+ ADMIN = "admin"
18
+ """Limited organisation admin - create, manage users of their own organisation."""
19
+ AUDIT = "audit"
20
+ """Access to the audit logs of the user\'s organisation."""
21
+ AUTH = "auth"
22
+ """Users with this permission have access to authenticating via their Auth keys,
23
+ granting them access to the API."""
24
+ SITE_ADMIN = "site_admin"
25
+ """Unrestricted access to any data and functionality on this instance."""
26
+ REGEXP_ACCESS = "regexp_access"
27
+ """Users with this role can modify the regex rules affecting how data is fed into MISP.
28
+ Make sure that caution is advised with handing out roles that include this permission,
29
+ user controlled executed regexes are dangerous."""
30
+ TAGGER = "tagger"
31
+ """Users with roles that include this permission can attach
32
+ or detach existing tags to and from events/attributes."""
33
+ TEMPLATE = "template"
34
+ """Create or modify templates, to be used when populating events."""
35
+ SHARING_GROUP = "sharing_group"
36
+ """Permission to create or modify sharing groups."""
37
+ TAG_EDITOR = "tag_editor"
38
+ """This permission gives users the ability to create tags."""
39
+ SIGHTING = "sighting"
40
+ """Permits the user to push feedback on attributes into MISP by providing sightings."""
41
+ OBJECT_TEMPLATE = "object_template"
42
+ """Create or modify MISP Object templates."""
43
+ PUBLISH_ZMQ = "publish_zmq"
44
+ """Allow users to publish data to the ZMQ pubsub channel via the publish event to ZMQ button."""
45
+ PUBLISH_KAFKA = "publish_kafka"
46
+ """Allow users to publish data to Kafka via the publish event to Kafka button."""
47
+ DECAYING = "decaying"
48
+ """Create or modify MISP Decaying Models."""
49
+ GALAXY_EDITOR = "galaxy_editor"
50
+ """Create or modify MISP Galaxies and MISP Galaxies Clusters."""
51
+ WARNINGLIST = "warninglist"
52
+ """Allow to manage warninglists."""
53
+ VIEW_FEED_CORRELATIONS = "view_feed_correlations"
54
+ """Allow the viewing of feed correlations. Enabling this can come at a performance cost."""
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mmisp-lib
3
- Version: 0.1.3
3
+ Version: 0.1.5
4
4
  Requires-Python: >=3.11.0
5
5
  Description-Content-Type: text/markdown
6
+ License-File: LICENSE
6
7
  Requires-Dist: fastapi==0.104.1
7
8
  Requires-Dist: SQLAlchemy[asyncio]==1.4.46
8
9
  Requires-Dist: pydantic==1.10.13
@@ -1,3 +1,4 @@
1
+ LICENSE
1
2
  README.md
2
3
  pyproject.toml
3
4
  src/mmisp/api_schemas/__init__.py
@@ -134,6 +135,7 @@ src/mmisp/api_schemas/warninglists/warninglist_response.py
134
135
  src/mmisp/db/__init__.py
135
136
  src/mmisp/db/config.py
136
137
  src/mmisp/db/database.py
138
+ src/mmisp/db/mixins.py
137
139
  src/mmisp/db/print_changes.py
138
140
  src/mmisp/db/models/__init__.py
139
141
  src/mmisp/db/models/attribute.py
@@ -157,6 +159,7 @@ src/mmisp/db/models/user_setting.py
157
159
  src/mmisp/db/models/warninglist.py
158
160
  src/mmisp/lib/__init__.py
159
161
  src/mmisp/lib/attributes.py
162
+ src/mmisp/lib/permissions.py
160
163
  src/mmisp_lib.egg-info/PKG-INFO
161
164
  src/mmisp_lib.egg-info/SOURCES.txt
162
165
  src/mmisp_lib.egg-info/dependency_links.txt
@@ -1,42 +0,0 @@
1
- from sqlalchemy import Boolean, Column, DateTime, Integer, String
2
-
3
- from ..database import Base
4
-
5
-
6
- class Role(Base):
7
- __tablename__ = "roles"
8
-
9
- id = Column(Integer, primary_key=True, nullable=False)
10
- name = Column(String(255), nullable=False)
11
- created = Column(DateTime, default=None)
12
- modified = Column(DateTime, default=None)
13
- perm_add = Column(Boolean, default=False)
14
- perm_modify = Column(Boolean, default=False)
15
- perm_modify_org = Column(Boolean, default=False)
16
- perm_publish = Column(Boolean, default=False)
17
- perm_delegate = Column(Boolean, nullable=False, default=False)
18
- perm_sync = Column(Boolean, default=False)
19
- perm_admin = Column(Boolean, default=False)
20
- perm_audit = Column(Boolean, default=False)
21
- perm_full = Column(Boolean, default=False)
22
- perm_auth = Column(Boolean, nullable=False, default=False)
23
- perm_site_admin = Column(Boolean, nullable=False, default=False)
24
- perm_regexp_access = Column(Boolean, nullable=False, default=False)
25
- perm_tagger = Column(Boolean, nullable=False, default=False)
26
- perm_template = Column(Boolean, nullable=False, default=False)
27
- perm_sharing_group = Column(Boolean, nullable=False, default=False)
28
- perm_tag_editor = Column(Boolean, nullable=False, default=False)
29
- perm_sighting = Column(Boolean, nullable=False, default=False)
30
- perm_object_template = Column(Boolean, nullable=False, default=False)
31
- default_role = Column(Boolean, nullable=False, default=False)
32
- memory_limit = Column(String(255), default="")
33
- max_execution_time = Column(String(255), default="")
34
- restricted_to_site_admin = Column(Boolean, nullable=False, default=False)
35
- perm_publish_zmq = Column(Boolean, nullable=False, default=False)
36
- perm_publish_kafka = Column(Boolean, nullable=False, default=False)
37
- perm_decaying = Column(Boolean, nullable=False, default=False)
38
- enforce_rate_limit = Column(Boolean, nullable=False, default=False)
39
- rate_limit_count = Column(Integer, nullable=False, default=0)
40
- perm_galaxy_editor = Column(Boolean, default=False)
41
- perm_warninglist = Column(Boolean, default=False)
42
- perm_view_feed_correlations = Column(Boolean, default=False)
File without changes
File without changes
File without changes