class ResultData(JSLSchemaBase): class Options(object): definition_id = "result_data" description = "Result data" package = jsl.DictField(additional_properties=True) version = jsl.DictField(additional_properties=True)
class FilterQuery(jsl.Document): match = jsl.DictField({ 'event.action': jsl.DictField(properties={ 'query': jsl.StringField(), 'type': jsl.StringField() }) })
class Service(jsl.Document): class Options(object): definition_id = "service" title = "Service Specification" type = jsl.StringField(description="Type of chute service.", enum=["light", "normal", "image"]) source = jsl.StringField(description="Source directory for this service.") image = jsl.StringField( description= "Image specification for services that pull a Docker image.", ) command = jsl.AnyOfField( [jsl.StringField(), jsl.ArrayField(items=jsl.StringField())]) dns = jsl.ArrayField( description="List of DNS servers to be used within the container.", items=jsl.StringField()) environment = jsl.DictField(description="Environment variables.") interfaces = jsl.DictField( pattern_properties={ "\w{1,16}": jsl.DocumentField(Interface, as_ref=True, title="ChuteInterface") }, description="Network interfaces to be connected.") requests = jsl.DocumentField( ChuteRequests, description="Extra features and privileges requested for the service.")
class TodoSchema(jsl.Document): """ A Todo schema Attributes: id (int): A unique id for the todo. description (str): A text description of the todo. items (array): An array of sub-todos of this todo. skip_if (array): An array of conditions to skip this todo. If any of the condition is true, the todo is skipped. Each condition is a dictionary of attributes and predicates which get ANDed together. remove_if (array): An array of conditions to remove this todo. If any of the condition is true, the todo is removed. Each condition is a dictionary of attributes and predicates which get ANDed together. """ id = jsl.IntField(required=True) description = jsl.StringField(required=True) items = jsl.ArrayField(jsl.DocumentField('TodoSchema')) skip_if = jsl.ArrayField( jsl.DictField( pattern_properties={'.*': jsl.DocumentField('PredicateSchema')})) remove_if = jsl.ArrayField( jsl.DictField( pattern_properties={'.*': jsl.DocumentField('PredicateSchema')}))
class VersionResolutionDetail(JSLSchemaBase): class Options: description = "Version range resolver_detail" definition_id = "version_range_resolver_detail" difference = jsl.ArrayField(required=True) analysed = jsl.DictField(required=True) upstream = jsl.DictField(required=True)
class FailedLicenseScan(JSLSchemaBaseWithRelease): class Options(object): definition_id = "failed_license_scan" description = "Failed automated software copyright license scan" status = jsl.StringField(enum=["error"], required=True) summary = jsl.DictField(required=True, additional_properties=True) details = jsl.DictField(required=True, additional_properties=True)
class PackageKeywordsTaggingDetails(jsl.Document): class Options(object): definition_id = "package_keywords_tagging_details" description = "Details computed by PackageKeywordsTagging worker" README = jsl.DictField(required=False, dditional_properties=True) package_name = jsl.DictField(required=False, additional_properties=True) repository_description = jsl.DictField(required=False, additional_properties=True) gh_topics = jsl.ArrayField(jsl.StringField(), required=False)
class ResultData(JSLSchemaBase): """Class with the schema definition based on JSL domain specific language.""" class Options(object): """A container for options.""" definition_id = "result_data" description = "Result data" package = jsl.DictField(additional_properties=True) version = jsl.DictField(additional_properties=True)
class FilterQuery(jsl.Document): """Base class for siem rule query filters.""" match = jsl.DictField({ 'event.action': jsl.DictField(properties={ 'query': jsl.StringField(), 'type': jsl.StringField() }) })
def dataclass_field_to_jsl_field(prop: dataclasses.Field, nullable=False) -> jsl.BaseField: t = dataclass_check_type(prop, date) if t: return jsl.DateTimeField(name=prop.name, required=t['required']) t = dataclass_check_type(prop, datetime) if t: return jsl.DateTimeField(name=prop.name, required=t['required']) t = dataclass_check_type(prop, str) if t: return jsl.StringField(name=prop.name, required=t['required']) t = dataclass_check_type(prop, int) if t: return jsl.IntField(name=prop.name, required=t['required']) t = dataclass_check_type(prop, float) if t: return jsl.NumberField(name=prop.name, required=t['required']) t = dataclass_check_type(prop, bool) if t: return jsl.BooleanField(name=prop.name, required=t['required']) t = dataclass_check_type(prop, dict) if t: return jsl.DictField(name=prop.name, required=t['required']) t = dataclass_check_type(prop, ISchema) if t: subtype = jsonobject_to_jsl(t['schema'], nullable=nullable) return jsl.DocumentField(name=prop.name, document_cls=subtype, required=t['required']) t = dataclass_check_type(prop, list) if t: return jsl.ArrayField(name=prop.name, required=t['required']) t = dataclass_check_type(prop, typing.List) if t: if 'schema' not in t.keys(): return jsl.ArrayField(name=prop.name, required=t['required']) if issubclass(t['schema'], ISchema): subtype = jsl.DocumentField( document_cls=jsonobject_to_jsl(t['schema'], nullable=nullable)) elif t['schema'] == str: subtype = jsl.StringField(name=prop.name) elif t['schema'] == int: subtype = jsl.IntField(name=prop.name) elif t['schema'] == float: subtype = jsl.NumberField(name=prop.name) elif t['schema'] == dict: subtype = jsl.DictField(name=prop.name) else: raise KeyError(t['schema']) return jsl.ArrayField(items=subtype, required=t['required']) raise KeyError(prop)
class VersionResolutionDetail(JSLSchemaBase): """Class with the schema definition based on JSL domain specific language.""" class Options: """A container for options.""" description = "Version range resolver_detail" definition_id = "version_range_resolver_detail" difference = jsl.ArrayField(required=True) analysed = jsl.DictField(required=True) upstream = jsl.DictField(required=True)
def jsonobject_property_to_jsl_field(prop: jsonobject.JsonProperty, nullable=False) -> jsl.BaseField: if isinstance(prop, jsonobject.DateProperty): return jsl.DateTimeField(name=prop.name, required=prop.required) if isinstance(prop, jsonobject.DateTimeProperty): return jsl.DateTimeField(name=prop.name, required=prop.required) if isinstance(prop, jsonobject.StringProperty): return jsl.StringField(name=prop.name, required=prop.required) if isinstance(prop, jsonobject.IntegerProperty): return jsl.IntField(name=prop.name, required=prop.required) if isinstance(prop, jsonobject.FloatProperty): return jsl.NumberField(name=prop.name, required=prop.required) if isinstance(prop, jsonobject.BooleanProperty): return jsl.BooleanField(name=prop.name, required=prop.required) if isinstance(prop, jsonobject.DictProperty): if prop.item_wrapper: subtype = jsonobject_to_jsl(prop.item_wrapper.item_type, nullable=nullable) return jsl.DocumentField(name=prop.name, document_cls=subtype, required=prop.required) return jsl.DictField(name=prop.name, required=prop.required) if isinstance(prop, jsonobject.ListProperty): if prop.item_wrapper: if isinstance(prop.item_wrapper, jsonobject.ObjectProperty): if issubclass(prop.item_wrapper.item_type, jsonobject.JsonObject): subtype = jsl.DocumentField(document_cls=jsonobject_to_jsl( prop.item_wrapper.item_type), nullable=nullable) elif isinstance(prop.item_wrapper.item_type, jsonobject.JsonProperty): subtype = jsonobject_property_to_jsl_field( prop.item_wrapper.item_type) else: raise KeyError(prop.item_wrapper.item_type) elif isinstance(prop.item_wrapper, jsonobject.StringProperty): subtype = jsl.StringField(name=prop.name) elif isinstance(prop.item_wrapper, jsonobject.IntegerProperty): subtype = jsl.IntField(name=prop.name) elif isinstance(prop.item_wrapper, jsonobject.FloatProperty): subtype = jsl.NumberField(name=prop.name) elif isinstance(prop.item_wrapper, jsonobject.DictProperty): subtype = jsl.DictField(name=prop.name) else: raise KeyError(prop.item_wrapper) return jsl.ArrayField(items=subtype, required=prop.required) return jsl.ArrayField(name=prop.name, required=prop.required) raise KeyError(prop)
class ParameterBase(jsl.Document): class Options(object): additional_properties = True name = jsl.StringField(pattern='[^\s=]+', required=True) label = jsl.StringField(required=True) required = jsl.BooleanField(required=True) default_value = jsl.StringField(required=False) help_string = jsl.StringField(required=False) possible_values = jsl.DictField(required=False, min_properties=1) ctrl_props = jsl.DictField(required=False, min_properties=1) help_link = jsl.DocumentField(ParameterHelpLink, as_ref=True, required=False)
class hAdr(Microformat): type = type_of('h-adr') properties = jsl.DictField( required=True, properties={ 'street-address': string_array, 'extended-address': string_array, 'post-office-box': string_array, 'locality': string_array, 'region': string_array, 'postal-code': string_array, 'country-name': string_array, 'label': string_array, 'geo': jsl.ArrayField( jsl.OneOfField( [jsl.StringField(), jsl.DocumentField(hGeo, as_ref=True)])), 'latitude': latitude, 'longitude': longitude, 'altitude': altitude, }, )
class hRecipe(Microformat): type = type_of('h-recipe') properties = jsl.DictField( required=True, properties={ 'name': string_array, 'ingredient': content_array, 'yield': string_array, 'instructions': content_array, 'duration': string_array, 'photo': photo_field, 'summary': content_array, 'author': jsl.ArrayField( jsl.OneOfField( [jsl.StringField(), jsl.DocumentField(hCard, as_ref=True)])), 'published': datetime_array, 'nutrition': string_array, 'category': string_array, }, )
class hReview(Microformat): type = type_of('h-review') properties = jsl.DictField( required=True, properties={ 'name': string_array, 'item': jsl.ArrayField( jsl.OneOfField([ jsl.StringField(), jsl.DocumentField(hCard, as_ref=True), jsl.DocumentField(hItem, as_ref=True), jsl.DocumentField(hProduct, as_ref=True), jsl.DocumentField(hEvent, as_ref=True), jsl.DocumentField(hAdr, as_ref=True), jsl.DocumentField(hGeo, as_ref=True), ])), 'author': jsl.ArrayField( jsl.OneOfField( [jsl.StringField(), jsl.DocumentField(hCard, as_ref=True)])), 'published': datetime_array, 'rating': jsl.ArrayField(jsl.StringField()), 'category': string_array, 'url': uri_array, 'content': content_array, }, )
class hEvent(Microformat): type = type_of('h-event') properties = jsl.DictField( required=True, properties={ 'name': string_array, 'summary': string_array, 'start': datetime_array, 'end': datetime_array, 'duration': string_array, 'description': string_array, 'url': uri_array, 'category': string_array, 'location': jsl.ArrayField( jsl.OneOfField([ jsl.StringField(), jsl.DocumentField(hGeo, as_ref=True), jsl.DocumentField(hAdr, as_ref=True), jsl.DocumentField(hCard, as_ref=True), ])), }, )
class hCite(Microformat): type = type_of('h-cite') properties = jsl.DictField( required=True, properties={ 'name': string_array, 'published': datetime_array, 'author': jsl.ArrayField( jsl.OneOfField( [jsl.StringField(), jsl.DocumentField(hCard, as_ref=True)])), 'url': uri_array, 'uid': uri_array, 'publication': string_array, 'accessed': datetime_array, 'content': content_array, }, )
class Filters(jsl.Document): """Intermediate schema for handling DSL-like filters.""" class FilterMetadata(jsl.Document): negate = jsl.BooleanField() type = jsl.StringField() key = jsl.StringField() value = jsl.StringField() disabled = jsl.BooleanField() indexRefName = jsl.StringField() alias = jsl.StringField() # null acceptable params = jsl.DictField(properties={'query': jsl.StringField()}) class FilterQuery(jsl.Document): match = jsl.DictField({ 'event.action': jsl.DictField(properties={ 'query': jsl.StringField(), 'type': jsl.StringField() }) }) class FilterState(jsl.Document): store = jsl.StringField() class FilterExists(jsl.Document): field = jsl.StringField() exists = jsl.DocumentField(FilterExists) meta = jsl.DocumentField(FilterMetadata) state = jsl.DocumentField(FilterState, name='$state') query = jsl.DictField()
class CortexExpSchemaJSLBase(jsl.Document): """class defining json schema for a database record. See top of file""" timestamp = jsl.StringField(format="date-time", required=True) monkey = jsl.StringField(enum=monkeylist, required=True) session_number = jsl.IntField(minimum=1, maximum=999, required=True) code_repo = jsl.DocumentField(schemautil.GitRepoRef, required=True) experiment_name = jsl.StringField( required=True, pattern=schemautil.StringPatterns.relativePathPattern) timing_file_name = jsl.StringField( pattern=schemautil.StringPatterns.strictFilenameLowerPattern('tm'), required=True) condition_file_name = jsl.StringField( pattern=schemautil.StringPatterns.strictFilenameLowerPattern('cnd'), required=True) item_file_name = jsl.StringField( pattern=schemautil.StringPatterns.strictFilenameLowerPattern('itm'), required=True) parameter_file_name = jsl.StringField( pattern=schemautil.StringPatterns.strictFilenameLowerPattern('par'), required=True) set_file_name = jsl.StringField( pattern=schemautil.StringPatterns.strictFilenameLowerPattern('set'), required=True) recorded_files = jsl.DocumentField( schemautil.filetransfer.FileTransferSiteAndFileListRemote, required=True) additional_parameters = jsl.DictField(required=True) notes = jsl.StringField(required=True)
class Service(jsl.Document): class Options(object): definition_id = 'service' exe = jsl.StringField() command_line = jsl.StringField() env = jsl.DictField()
class LicenseScanDetails(jsl.Document): class Options(object): definition_id = "license_scan_details" additional_properties = True with removed_in(ROLE_v3_0_0) as removed_in_v3_0_0: removed_in_v3_0_0.files = jsl.ArrayField( jsl.DocumentField(FileDetails, as_ref=True)) removed_in_v3_0_0.license_stats = jsl.ArrayField( jsl.DocumentField(LicenseDetailsPre30, as_ref=True)) removed_in_v3_0_0.oslc_stats = jsl.DocumentField(OSLCStats, as_ref=True) with added_in(ROLE_v3_0_0) as added_in_v3_0_0: added_in_v3_0_0.files_count = jsl.IntField(required=True) added_in_v3_0_0.licenses = jsl.DictField(pattern_properties=jsl.Var({ 'role': { '*': jsl.DocumentField(LicenseDetails, as_ref=True, required=True), } }), required=True) added_in_v3_0_0.scancode_notice = jsl.StringField(required=True) added_in_v3_0_0.scancode_version = jsl.StringField(required=True)
class ComponentAnalysis(JSLSchemaBaseWithRelease): class Options(object): definition_id = "component_analysis" description = "Software component analysis" ecosystem = jsl.StringField( description="Language ecosystem providing the component", required=True) package = jsl.StringField(description="Component name", required=True) version = jsl.StringField(description="Component version", required=True) latest_version = jsl.OneOfField( [jsl.StringField(), jsl.NullField()], description= "Latest version available of this component (null if unknown)", required=True) started_at = jsl.DateTimeField( description="Date/time component analysis was started", required=True) finished_at = jsl.DateTimeField( description="Date/time component analysis was finished", required=True) access_count = jsl.NumberField( description="Number of times this component has been queried", required=True) dependents_count = jsl.Var({ lambda v: v >= ROLE_v1_1_0: jsl.NumberField(description="Number of dependent GitHub projects", required=True) }) analyses = jsl.DocumentField(AnalysisSet, as_ref=True, required=True) package_info = jsl.DictField( description="Additional information related to the package", additional_properties=True, required=False)
class GithubDetail(jsl.Document): """JSL schema for Github worker results details.""" class Options(object): """JSL schema for Github worker results details.""" definition_id = "github_extracted_details" description = "Details of Github inspection" # we don't mandate any of these fields, because they may not be present forks_count = jsl.IntField() last_year_commits = jsl.DocumentField(GithubLastYearCommits, as_ref=True) open_issues_count = jsl.IntField() stargazers_count = jsl.IntField() subscribers_count = jsl.IntField() with removed_in(ROLE_v2_0_0) as until_v2_0_0: until_v2_0_0.updated_issues = jsl.DocumentField(GithubUpdatedIssues, as_ref=True) until_v2_0_0.updated_pull_requests = jsl.DocumentField( GithubUpdatedPullRequests, as_ref=True) with added_in(ROLE_v1_0_2) as since_v1_0_2: since_v1_0_2.contributors_count = jsl.IntField() with jsl.Scope(ROLE_v1_0_3) as v1_0_3: v1_0_3.topics = jsl.ArrayField(jsl.StringField(), required=True) with added_in(ROLE_v1_0_4) as since_v1_0_4: since_v1_0_4.topics = jsl.ArrayField(jsl.StringField()) with added_in(ROLE_v2_0_1) as since_v2_0_1: since_v2_0_1.license = jsl.DictField() with added_in(ROLE_v2_0_2) as since_v2_0_2: since_v2_0_2.updated_on = jsl.StringField(required=True)
class Diagnostics(jsl.Document): class Options(object): definition_id = 'diagnostics' severity = jsl.StringField(enum=['log', 'debug', 'fatal'], required=True) message = jsl.StringField(required=True) data = jsl.DictField()
class Status(JSLSchemaBase): class Options(object): definition_id = "status" description = "Component analyses response status" attributes = jsl.DictField(additional_properties=True) code = jsl.NumberField(required=True) message = jsl.StringField(required=True)
class ResultInner(JSLSchemaBase): class Options(object): definition_id = "result_inner" description = "Set of Result inner" with removed_in(ROLE_v1_2_0) as removed_in_v1_2_0: removed_in_v1_2_0.data = jsl.ArrayField(jsl.DocumentField(ResultData, as_ref=True), required=True) with added_in(ROLE_v1_2_0) as added_in_v1_2_0: added_in_v1_2_0.data = jsl.DocumentField(ResultData, as_ref=True, required=True) with added_in(ROLE_v1_2_0) as added_in_v1_2_0: added_in_v1_2_0.recommendation = jsl.DictField( additional_properties=True) meta = jsl.DictField(additional_properties=True)
class KeywordsTaggingDetails(jsl.Document): class Options(object): definition_id = "keywords_tagging_details" description = "Details computed by KeywordsTagging worker" description = jsl.DictField(required=False, additional_properties=True) # Keywords extracted in mercator (e.g. keywords stated in setup.py) keywords = jsl.ArrayField(jsl.StringField())
class FilterMetadata(jsl.Document): negate = jsl.BooleanField() type = jsl.StringField() key = jsl.StringField() value = jsl.StringField() disabled = jsl.BooleanField() indexRefName = jsl.StringField() alias = jsl.StringField() # null acceptable params = jsl.DictField(properties={'query': jsl.StringField()})
class FileDetails(jsl.Document): """JSL schema for file details.""" class Options(object): """JSL schema for file details.""" definition_id = "file_details" path = jsl.StringField(required=True) result = jsl.ArrayField(jsl.DictField(additional_properties=True))