synapse 2.178.0__py311-none-any.whl → 2.179.0__py311-none-any.whl
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.
Potentially problematic release.
This version of synapse might be problematic. Click here for more details.
- synapse/cortex.py +162 -27
- synapse/datamodel.py +47 -1
- synapse/exc.py +1 -0
- synapse/lib/aha.py +2 -1
- synapse/lib/ast.py +26 -22
- synapse/lib/base.py +12 -3
- synapse/lib/cell.py +150 -11
- synapse/lib/coro.py +14 -0
- synapse/lib/drive.py +551 -0
- synapse/lib/schemas.py +39 -0
- synapse/lib/snap.py +17 -7
- synapse/lib/storm.py +3 -1
- synapse/lib/stormhttp.py +1 -0
- synapse/lib/stormlib/modelext.py +29 -3
- synapse/lib/stormlib/stix.py +40 -17
- synapse/lib/stormlib/vault.py +2 -2
- synapse/lib/stormtypes.py +1 -1
- synapse/lib/types.py +9 -0
- synapse/lib/version.py +2 -2
- synapse/lookup/pe.py +303 -38
- synapse/models/dns.py +24 -1
- synapse/models/geospace.py +4 -1
- synapse/models/infotech.py +26 -1
- synapse/tests/test_cortex.py +45 -1
- synapse/tests/test_lib_aha.py +17 -0
- synapse/tests/test_lib_cell.py +224 -0
- synapse/tests/test_lib_coro.py +12 -0
- synapse/tests/test_lib_stormhttp.py +40 -0
- synapse/tests/test_lib_stormlib_modelext.py +55 -3
- synapse/tests/test_lib_stormlib_stix.py +15 -0
- synapse/tests/test_lib_stormlib_vault.py +11 -1
- synapse/tests/test_lib_stormtypes.py +5 -0
- synapse/tests/test_lib_types.py +9 -0
- synapse/tests/test_model_dns.py +8 -0
- synapse/tests/test_model_geospace.py +3 -1
- synapse/tests/test_model_infotech.py +47 -0
- synapse/tests/test_model_syn.py +11 -0
- synapse/tests/test_utils_stormcov.py +1 -1
- synapse/tools/changelog.py +28 -0
- {synapse-2.178.0.dist-info → synapse-2.179.0.dist-info}/METADATA +1 -1
- {synapse-2.178.0.dist-info → synapse-2.179.0.dist-info}/RECORD +44 -43
- {synapse-2.178.0.dist-info → synapse-2.179.0.dist-info}/WHEEL +1 -1
- {synapse-2.178.0.dist-info → synapse-2.179.0.dist-info}/LICENSE +0 -0
- {synapse-2.178.0.dist-info → synapse-2.179.0.dist-info}/top_level.txt +0 -0
synapse/lib/stormlib/modelext.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import synapse.exc as s_exc
|
|
2
|
+
import synapse.common as s_common
|
|
2
3
|
import synapse.lib.grammar as s_grammar
|
|
3
4
|
|
|
4
5
|
import synapse.lib.stormtypes as s_stormtypes
|
|
@@ -54,6 +55,8 @@ class LibModelExt(s_stormtypes.Lib):
|
|
|
54
55
|
'args': (
|
|
55
56
|
{'name': 'formname', 'type': 'str', 'desc': 'The form with the extended property.', },
|
|
56
57
|
{'name': 'propname', 'type': 'str', 'desc': 'The extended property to remove.', },
|
|
58
|
+
{'name': 'force', 'type': 'boolean', 'default': False,
|
|
59
|
+
'desc': 'Delete the property from all nodes before removing the definition.', },
|
|
57
60
|
),
|
|
58
61
|
'returns': {'type': 'null', }}},
|
|
59
62
|
{'name': 'delUnivProp',
|
|
@@ -61,12 +64,16 @@ class LibModelExt(s_stormtypes.Lib):
|
|
|
61
64
|
'type': {'type': 'function', '_funcname': 'delUnivProp',
|
|
62
65
|
'args': (
|
|
63
66
|
{'name': 'propname', 'type': 'str', 'desc': 'Name of the universal property to remove.', },
|
|
67
|
+
{'name': 'force', 'type': 'boolean', 'default': False,
|
|
68
|
+
'desc': 'Delete the property from all nodes before removing the definition.', },
|
|
64
69
|
),
|
|
65
70
|
'returns': {'type': 'null', }}},
|
|
66
71
|
{'name': 'delTagProp', 'desc': 'Remove an extended tag property definition from the model.',
|
|
67
72
|
'type': {'type': 'function', '_funcname': 'delTagProp',
|
|
68
73
|
'args': (
|
|
69
74
|
{'name': 'propname', 'type': 'str', 'desc': 'Name of the tag property to remove.', },
|
|
75
|
+
{'name': 'force', 'type': 'boolean', 'default': False,
|
|
76
|
+
'desc': 'Delete the tag property from all nodes before removing the definition.', },
|
|
70
77
|
),
|
|
71
78
|
'returns': {'type': 'null', }}},
|
|
72
79
|
{'name': 'getExtModel', 'desc': 'Get all extended model elements.',
|
|
@@ -163,20 +170,39 @@ class LibModelExt(s_stormtypes.Lib):
|
|
|
163
170
|
s_stormtypes.confirm(('model', 'form', 'del', formname))
|
|
164
171
|
await self.runt.snap.core.delForm(formname)
|
|
165
172
|
|
|
166
|
-
async def delFormProp(self, formname, propname):
|
|
173
|
+
async def delFormProp(self, formname, propname, force=False):
|
|
167
174
|
formname = await s_stormtypes.tostr(formname)
|
|
168
175
|
propname = await s_stormtypes.tostr(propname)
|
|
176
|
+
force = await s_stormtypes.tobool(force)
|
|
169
177
|
s_stormtypes.confirm(('model', 'prop', 'del', formname))
|
|
178
|
+
|
|
179
|
+
if force is True:
|
|
180
|
+
meta = {'user': self.runt.snap.user.iden, 'time': s_common.now()}
|
|
181
|
+
await self.runt.snap.core._delAllFormProp(formname, propname, meta)
|
|
182
|
+
|
|
170
183
|
await self.runt.snap.core.delFormProp(formname, propname)
|
|
171
184
|
|
|
172
|
-
async def delUnivProp(self, propname):
|
|
185
|
+
async def delUnivProp(self, propname, force=False):
|
|
173
186
|
propname = await s_stormtypes.tostr(propname)
|
|
187
|
+
force = await s_stormtypes.tobool(force)
|
|
174
188
|
s_stormtypes.confirm(('model', 'univ', 'del'))
|
|
189
|
+
|
|
190
|
+
if force:
|
|
191
|
+
meta = {'user': self.runt.snap.user.iden, 'time': s_common.now()}
|
|
192
|
+
await self.runt.snap.core._delAllUnivProp(propname, meta)
|
|
193
|
+
|
|
175
194
|
await self.runt.snap.core.delUnivProp(propname)
|
|
176
195
|
|
|
177
|
-
async def delTagProp(self, propname):
|
|
196
|
+
async def delTagProp(self, propname, force=False):
|
|
178
197
|
propname = await s_stormtypes.tostr(propname)
|
|
198
|
+
force = await s_stormtypes.tobool(force)
|
|
199
|
+
|
|
179
200
|
s_stormtypes.confirm(('model', 'tagprop', 'del'))
|
|
201
|
+
|
|
202
|
+
if force:
|
|
203
|
+
meta = {'user': self.runt.snap.user.iden, 'time': s_common.now()}
|
|
204
|
+
await self.runt.snap.core._delAllTagProp(propname, meta)
|
|
205
|
+
|
|
180
206
|
await self.runt.snap.core.delTagProp(propname)
|
|
181
207
|
|
|
182
208
|
@s_stormtypes.stormfunc(readonly=True)
|
synapse/lib/stormlib/stix.py
CHANGED
|
@@ -875,14 +875,19 @@ class LibStixImport(s_stormtypes.Lib):
|
|
|
875
875
|
bundle = await s_stormtypes.toprim(bundle)
|
|
876
876
|
config = await s_stormtypes.toprim(config)
|
|
877
877
|
|
|
878
|
+
if not isinstance(config, dict):
|
|
879
|
+
mesg = 'STIX ingest config must be a dictionary.'
|
|
880
|
+
raise s_exc.BadArg(mesg=mesg)
|
|
881
|
+
|
|
878
882
|
config.setdefault('bundle', {})
|
|
879
883
|
config.setdefault('objects', {})
|
|
880
884
|
config.setdefault('relationships', [])
|
|
881
885
|
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
+
try:
|
|
887
|
+
rellook = {r['type']: r for r in config.get('relationships', ())}
|
|
888
|
+
except Exception as e:
|
|
889
|
+
mesg = f'Error processing relationships in STIX bundle ingest config: {e}.'
|
|
890
|
+
raise s_exc.BadArg(mesg=mesg)
|
|
886
891
|
|
|
887
892
|
bundlenode = None
|
|
888
893
|
|
|
@@ -890,13 +895,41 @@ class LibStixImport(s_stormtypes.Lib):
|
|
|
890
895
|
if bundleconf is None:
|
|
891
896
|
bundleconf = {}
|
|
892
897
|
|
|
898
|
+
if not isinstance(bundleconf, dict):
|
|
899
|
+
mesg = 'STIX ingest config bundle value must be a dictionary.'
|
|
900
|
+
raise s_exc.BadArg(mesg=mesg)
|
|
901
|
+
|
|
893
902
|
bundlestorm = bundleconf.get('storm')
|
|
894
903
|
if bundlestorm:
|
|
904
|
+
if not isinstance(bundlestorm, str):
|
|
905
|
+
mesg = 'STIX ingest config storm query must be a string.'
|
|
906
|
+
raise s_exc.BadArg(mesg=mesg)
|
|
907
|
+
|
|
895
908
|
bundlenode = await self._callStorm(bundlestorm, {'bundle': bundle})
|
|
896
909
|
|
|
897
910
|
self.runt.layerConfirm(('node', 'edge', 'add', 'refs'))
|
|
898
911
|
|
|
899
|
-
|
|
912
|
+
try:
|
|
913
|
+
nodesbyid = await self._ingestObjects(bundle, config, rellook)
|
|
914
|
+
except Exception as e:
|
|
915
|
+
mesg = f'Error processing objects in STIX bundle ingest: {e}.'
|
|
916
|
+
raise s_exc.BadArg(mesg=mesg)
|
|
917
|
+
|
|
918
|
+
if bundlenode is not None:
|
|
919
|
+
for node in nodesbyid.values():
|
|
920
|
+
await bundlenode.addEdge('refs', node.iden())
|
|
921
|
+
await asyncio.sleep(0)
|
|
922
|
+
yield bundlenode
|
|
923
|
+
|
|
924
|
+
for node in nodesbyid.values():
|
|
925
|
+
yield node
|
|
926
|
+
|
|
927
|
+
async def _ingestObjects(self, bundle, config, rellook):
|
|
928
|
+
|
|
929
|
+
nodesbyid = {}
|
|
930
|
+
relationships = []
|
|
931
|
+
|
|
932
|
+
for obj in bundle.get('objects', ()):
|
|
900
933
|
|
|
901
934
|
objtype = obj.get('type')
|
|
902
935
|
|
|
@@ -971,7 +1004,7 @@ class LibStixImport(s_stormtypes.Lib):
|
|
|
971
1004
|
await self.runt.snap.warnonce(f'STIX bundle ingest has no relationship definition for: {reltype}.')
|
|
972
1005
|
|
|
973
1006
|
# attempt to resolve object_refs
|
|
974
|
-
for obj in bundle.get('objects'):
|
|
1007
|
+
for obj in bundle.get('objects', ()):
|
|
975
1008
|
|
|
976
1009
|
node = nodesbyid.get(obj.get('id'))
|
|
977
1010
|
if node is None:
|
|
@@ -984,17 +1017,7 @@ class LibStixImport(s_stormtypes.Lib):
|
|
|
984
1017
|
|
|
985
1018
|
await node.addEdge('refs', refsnode.iden())
|
|
986
1019
|
|
|
987
|
-
|
|
988
|
-
for node in nodesbyid.values():
|
|
989
|
-
await bundlenode.addEdge('refs', node.iden())
|
|
990
|
-
await asyncio.sleep(0)
|
|
991
|
-
yield bundlenode
|
|
992
|
-
|
|
993
|
-
for node in nodesbyid.values():
|
|
994
|
-
yield node
|
|
995
|
-
|
|
996
|
-
if bundlenode:
|
|
997
|
-
yield bundlenode
|
|
1020
|
+
return nodesbyid
|
|
998
1021
|
|
|
999
1022
|
async def _callStorm(self, text, varz):
|
|
1000
1023
|
|
synapse/lib/stormlib/vault.py
CHANGED
|
@@ -649,7 +649,7 @@ class Vault(s_stormtypes.Prim):
|
|
|
649
649
|
'type': {'type': 'function', '_funcname': '_methSetPerm',
|
|
650
650
|
'args': (
|
|
651
651
|
{'name': 'iden', 'type': 'str', 'desc': 'The user or role to modify.'},
|
|
652
|
-
{'name': 'level', 'type': 'str', 'desc': 'The easyperm level for the iden. $lib.
|
|
652
|
+
{'name': 'level', 'type': 'str', 'desc': 'The easyperm level for the iden. $lib.null to remove an existing permission.'},
|
|
653
653
|
),
|
|
654
654
|
'returns': {'type': 'boolean', 'desc': '$lib.true if the permission was set, $lib.false otherwise.', }}},
|
|
655
655
|
|
|
@@ -744,7 +744,7 @@ class Vault(s_stormtypes.Prim):
|
|
|
744
744
|
s_stormtypes.confirmEasyPerm(vault, s_cell.PERM_ADMIN, mesg=mesg)
|
|
745
745
|
|
|
746
746
|
iden = await s_stormtypes.tostr(iden)
|
|
747
|
-
level = await s_stormtypes.toint(level)
|
|
747
|
+
level = await s_stormtypes.toint(level, noneok=True)
|
|
748
748
|
|
|
749
749
|
return await self.runt.snap.core.setVaultPerm(self.valu, iden, level)
|
|
750
750
|
|
synapse/lib/stormtypes.py
CHANGED
|
@@ -5277,7 +5277,7 @@ class Number(Prim):
|
|
|
5277
5277
|
def __init__(self, valu, path=None):
|
|
5278
5278
|
try:
|
|
5279
5279
|
valu = s_common.hugenum(valu)
|
|
5280
|
-
except decimal.DecimalException as e:
|
|
5280
|
+
except (TypeError, decimal.DecimalException) as e:
|
|
5281
5281
|
mesg = f'Failed to make number from {valu!r}'
|
|
5282
5282
|
raise s_exc.BadCast(mesg=mesg) from e
|
|
5283
5283
|
|
synapse/lib/types.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import sys
|
|
1
2
|
import asyncio
|
|
2
3
|
import decimal
|
|
3
4
|
import logging
|
|
@@ -78,6 +79,14 @@ class Type:
|
|
|
78
79
|
|
|
79
80
|
self.postTypeInit()
|
|
80
81
|
|
|
82
|
+
normopts = dict(self.opts)
|
|
83
|
+
for optn, valu in normopts.items():
|
|
84
|
+
if isinstance(valu, float):
|
|
85
|
+
normopts[optn] = str(valu)
|
|
86
|
+
|
|
87
|
+
ctor = '.'.join([self.__class__.__module__, self.__class__.__qualname__])
|
|
88
|
+
self.typehash = sys.intern(s_common.guid((ctor, s_common.flatten(normopts))))
|
|
89
|
+
|
|
81
90
|
def _storLiftSafe(self, cmpr, valu):
|
|
82
91
|
try:
|
|
83
92
|
return self.storlifts['=']('=', valu)
|
synapse/lib/version.py
CHANGED
|
@@ -223,6 +223,6 @@ def reqVersion(valu, reqver,
|
|
|
223
223
|
##############################################################################
|
|
224
224
|
# The following are touched during the release process by bumpversion.
|
|
225
225
|
# Do not modify these directly.
|
|
226
|
-
version = (2,
|
|
226
|
+
version = (2, 179, 0)
|
|
227
227
|
verstring = '.'.join([str(x) for x in version])
|
|
228
|
-
commit = '
|
|
228
|
+
commit = '1c51c58523e9012655d8d18bfa1ad149e5536c25'
|