-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New pack: Hackuity #17106
New pack: Hackuity #17106
Conversation
|
Thank you for your contribution. Your generosity and caring are unrivaled! Make sure to register your contribution by filling the Contribution Registration form, so our content wizard @merit-maita will know he can start review the proposed changes. |
MyPy lint fails due to https://github.com/demisto/demisto-sdk/issues/1831 |
@Rogdham Thanks for the contribution, please fill the registration form so we can go ahead with the review. |
@merit-maita thank you for your reply, it should be done now! |
verify_certificate = not demisto.params().get("insecure", False) | ||
proxy = demisto.params().get("proxy", False) | ||
|
||
commands: Dict[str, Callable[[Client, Dict[str, str]], CommandResults]] = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
commands: Dict[str, Callable[[Client, Dict[str, str]], CommandResults]] = { | |
commands = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have added that type otherwise MyPy thinks it is the following:
builtins.dict[builtins.str*, builtins.object*]
…and fails on a later line with this error:
/Packs/Hackuity/Integrations/Hackuity/Hackuity.py:673:28: error:
"object" not callable [operator]
return_results(commands[command](client, demisto.args()))
Please feel free to suggest a better solution for MyPy!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
its okay you can keep it then
description: The ID of the vulnerability | ||
type: string | ||
- contextPath: Hackuity.Vulnerabilities.Seen.First | ||
description: The date of the first time the vulnerability has been seen |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
since you have a specific format, add an example for this date
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The output date is specifically formatted with DATE_FORMAT
which I thought was the way dates are represented inside Cortex XSOAR? e.g. 2021-03-03T07:56:07Z
Tell me if that's not the case, so that I can change the date formatting so that is it the one used by default inside Cortex XSOAR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah its okay, just added to the description as an example, that's it
|
||
#### Context Output | ||
|
||
There is no context output for this command. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why dont you have a command example with returned data to any of the commands? it should be provided.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
where? the file is not updated
"search_vulnerabilities", | ||
id="search_vulnerabilities", | ||
), | ||
], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what about the other commands?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added a test for test_module
.
The hackuity-dashboard-data
and hackuity-dashboard-widgets
commands are provided in this first version of the integration as best-effort.
The hackuity-search-provider-vulnerabilities
and hackuity-search-vulndb-vulnerabilities
commands are very similar so I thought it was enough to add a test for only one of them, but tell me if you want me to add a test for the other one.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there should be a test for each command even it some are similar
!hackuity-search-findings asset_name=example.com | ||
!hackuity-search-provider-vulnerabilities asset_name=example.com | ||
!hackuity-search-vulndb-vulnerabilities asset_name=example.com |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
command examples used in building readme, should be example that would return reasonable and correct results, which i assume that example.com does not really work in that case
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
where do you mean its done? the file is not updated
type: python | ||
subtype: python3 | ||
dockerimage: demisto/python3:3.10.1.25933 | ||
fromversion: 5.5.0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
since its a new integration its preferred to be supported from 6.0.0, is there a specific reason its set to be 5.5.0?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
f"/widgets/{widget_id}/data" | ||
), | ||
) | ||
return json_get_value(response, ["payload", None]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if your trying to get the json object from the response why dont you use json() method?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because my http_request
passes a resp_type
of value json
by default to BaseClient._http_request
, the response
object will already be json-decoded.
The None
value in the path
arg of json_get_value
means “get the first value you find”.
The response returned by the server looks like this (some keys have been removed):
{
"kind": "hy#widgetData",
"payload": {
"assetsOverview": "redacted for clarity"
},
"type": "ASSETS_OVERVIEW"
}
And we are only looking to return the redacted for clarity
part.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cool, we'll talk about it in the demo
json_extract( | ||
widget, | ||
{ | ||
"id": ["id"], | ||
"params": ["params", None], | ||
"type": ["type"], | ||
}, | ||
) | ||
for widget in response.get("widgets", []) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if you're trying to get the json object of each widget, why dont you just return it as it is from the api, or use an already existing methods.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because my http_request
passes a resp_type
of value json
by default to BaseClient._http_request
, the response
object will already be json-decoded.
The None
value in the path
arg of json_get_value
means “get the first value you find”.
The response returned by the server looks like this (some extra fields have been removed):
{
"kind": "hy#dashboard",
"widgets": [
{
"id": "abc123",
"params": {
"overallScore": "redacted for clarity #1"
},
"type": "OVERALL_SCORE"
},
{
"id": "def456",
"params": {
"scoreMeter": "redacted for clarity #2"
},
"type": "SCORE_METER"
}
]
}
And we are only looking to return the following (note that we removed the nesting for the params
keys):
[
{
"id": "abc123",
"params": "redacted for clarity #1",
"type": "OVERALL_SCORE"
},
{
"id": "def456",
"params": "redacted for clarity #2",
"type": "SCORE_METER"
}
]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the hard work
please make sure to pass the checks of the pr.
Thank you for the review @merit-maita! All your points should now have been fixed or at least answers in a comment. I think all checks that are supposed to pass on this PR should be good now. Except that CircleCI is currently having an outage so the Run Unit Testing And Lint is failing because if it. Edit: CircleCI is now working properly again, but the job needs to be restarted by clicking on Sorry for the several pushes, this was me trying to fix the MyPy failing on Python 3.10 issue:
Sorry for the noise 😞 |
* Removed MITRE aliases * RN
* add replyTo arg EWS O365 * update docker * added to MSGraphMail * fix UTs * added replyTo MSgraphSingleUSer * fix * fix secrets * downgrade docker image * flake8 fixes * update rn
The CircleCI check from your latest pushed commit was unsuccessful. @Rogdham take a look at the build by clicking this link. Failed Build Steps
Try and address the listed CircleCI build step failures at your earliest convenience. This will greatly expedite the process of getting your proposed changes merged into master. Happy coding and may the force be with you. |
* #3482 [Demisto] release a new plugin * #3482 [Demisto] release a new plugin - readme * #3226 [Demisto] Release a new plug-in version to fix lost events * sepio fix test * sepio fix test2 * sepio fix test3 * sepio fix test4 * sepio fix test5 * fix test * fix tests * format Co-authored-by: ilan <ierukhimovic@paloaltonetworks.com> Co-authored-by: SepioSystems <65220432+SepioSystems@users.noreply.github.com> Co-authored-by: ilan <ierukhimovic@paloaltonetworks.com>
* Added new Content Instance Name field * Ensured input is a list to iterate through * Added instance name to "new" layout * Fixed key syntax * Added auto update field * Added auto update to "new" layout * Added default input for auto install * Added default instance from field * Updated description * Added mapping for Content Pack Selection * Added or condition to decision * Changed instance name field name * Changed instance field name * Updated the layouts * Set the pack selection default to all if None. * Updated release notes * Fixed inputs error not referencing field * Reverted last changes * Updated to accept incident field * Update Docker image tag * Added demistoreastapi input to PB * Set using for task * Added PB input for demistorestapiname * Added using to task * Updated ignore file * Updated pack metadata Co-authored-by: Adam Burt - Demisto <53576129+aburt-demisto@users.noreply.github.com>
Hello @merit-maita , the test were failing because they were some changes on I changed the target of the PR to So I'm confused, could you advise how to proceed? |
* add indication of marketplace in message titles * add indication of marketplace in message titles * Update gitlab_slack_notifier.py * Update gitlab_slack_notifier.py
…in Object of 'indicator' so that the Microsoft Azure Sentinel TAXII Connector can feed indicators. (#17326) (#17492) * Added a feature to convert STIX Cyber Observable Objects tos STIX Domain Object of 'indicator' so that the Microsoft Azure Sentinel TAXII Connector can feed indicators. * Added a test pattern * Added codes to escape indicator values. * Updated to pass MyPy * Updated the ReleaseNotes * Small change for re-run CircleCI * Fixed a test pattern Co-authored-by: Masahiko Inoue <54964121+spearmin10@users.noreply.github.com> Co-authored-by: merit <meretmaayta@gmail.com>
* delete category field * remove marketplace key * update RN
* Trend Micro Vision One (#16931) * Initial commit of Trend Micro Vision One integration * Modified command parameters to follow recommended format * Added mock JSON data for unit tests * Updates for MyPy validation * Updates to the Incident Types and Layouts * Updated max_fetch default value to 50 * Merged to single integration * Minor changes * Documentation Updates * Documentation Updates * Cleaned up test cases * Added submit to sandbox test * Removed field from mapper, classifier, updated docs * Incorporated feedback from XSOAR review * Removed entry from mapper, updated fromVersion * Update docker image * Changes associated with use of ScheduledCommand * Updated docs and removed unnecessary message * Update TrendMicroVisionOne_description.md * Updated docs to include full product name * Changed version to 6.2 in demistomock.py * Feedback from demo * demisto mock version reverted, mocked the raise error method of scheduled command Co-authored-by: Mike <mike@mdgsecurity.com> Co-authored-by: epintzov <epintzov@paloaltonetworks.com>
* Initialized file structure for integration namely ACTI Vulnerability Query * Minor changes made to README.md for Accenture CTI v2 pack * Updated README * Shifted logo changes to a new branch * Shifted logo changes to a new branch * functions and unit test for vulnerability command * added contextual properties in extract_result function * changes in extract result function and updated command function and unit test * updated command for cve not found and updated yml * added unit test for cve not found and updated yml * Modified test-module for correct API testing * WIP: Minor changes made * minor changes * cve class added locally * field added in yml * changes in cvss and display text fields * Added necessary message to differentiate API token error for tokens not having access to vulnerability intel * changes in unit test according to code * changes * date_time issue fixed * Added fields to yml and made some minor changes * WIP: Removed RM102, IN136, PA114, RN106 : Try 1 * WIP: Updated Accenture CTI v2 pack README * removed print statements * WIP: Resolving errors : Try 1 * WIP: Fixing flake8 errors : Try 2 * WIP: Resolving minor Mypy, flake8 errors : Try 3 * WIP: Resolving errors : Try 4 * Removed unnecessary unused files * Corrected typo * created custom CVE class * Inherited CVE class in CustomCVE class * minorchanges * Removed flake8 errors * Resolving E302 * Resolving errors: final * Modified CustomCVE class * Updated yml for cvss2 & cvss3 fields * Updated README * Changed base command from vuln to acti-vuln Co-authored-by: Ankit Mordhwaj <mordhwaj.ankit@gmail.com> Co-authored-by: Satyaki Chakraborti <40510780+satyakidroid@users.noreply.github.com> Co-authored-by: Ankit Mordhwaj <mordhwaj.ankit@gmail.com>
* Updated Metadata Of Pack BluecatAddressManager * Added release notes to pack BluecatAddressManager * Packs/BluecatAddressManager/Integrations/BluecatAddressManager/BluecatAddressManager.yml Docker image update
* failed unit-test * failed unit-test * failed unit-test * failed unit-test * fix bug * bump rn * update mocker variable name * failed unit-test * failed unit-tests * secrets ignore * fix bug * fix cr comments * update func docstring
* test(fetch): message with non ascii chars subject * test(fetch): rm encoding arg * feat(encoding): add raw message encoding param * doc(encoding): add param to readme and add example
* Remove wrong marketplace * RN * RN * Update core_packs_mpv2_list.json * Update core_packs_mpv2_list.json Co-authored-by: Shai Yaakovi <30797606+yaakovi@users.noreply.github.com>
As discussed:
Feel free to write back to me if you want things to be done differently. |
* New pack: Hackuity (#17106) * CrowdStrike Falcon Intel v2 - encode URLs (#17501) * Mitre fields fix (#17544) * Removed MITRE aliases * RN * [O365, Gmail] add the reply-to header (#17284) * add replyTo arg EWS O365 * update docker * added to MSGraphMail * fix UTs * added replyTo MSgraphSingleUSer * fix * fix secrets * downgrade docker image * flake8 fixes * update rn * skipping confluence cloud (#17509) * Feature/sepiodev (#17449) (#17546) * #3482 [Demisto] release a new plugin * #3482 [Demisto] release a new plugin - readme * #3226 [Demisto] Release a new plug-in version to fix lost events * sepio fix test * sepio fix test2 * sepio fix test3 * sepio fix test4 * sepio fix test5 * fix test * fix tests * format Co-authored-by: ilan <ierukhimovic@paloaltonetworks.com> Co-authored-by: SepioSystems <65220432+SepioSystems@users.noreply.github.com> Co-authored-by: ilan <ierukhimovic@paloaltonetworks.com> * Update README.md (#17542) (#17549) Co-authored-by: cado-joshua <93199751+cado-joshua@users.noreply.github.com> * Aburt-content-manager-improvements (#17355) (#17555) * Added new Content Instance Name field * Ensured input is a list to iterate through * Added instance name to "new" layout * Fixed key syntax * Added auto update field * Added auto update to "new" layout * Added default input for auto install * Added default instance from field * Updated description * Added mapping for Content Pack Selection * Added or condition to decision * Changed instance name field name * Changed instance field name * Updated the layouts * Set the pack selection default to all if None. * Updated release notes * Fixed inputs error not referencing field * Reverted last changes * Updated to accept incident field * Update Docker image tag * Added demistoreastapi input to PB * Set using for task * Added PB input for demistorestapiname * Added using to task * Updated ignore file * Updated pack metadata Co-authored-by: Adam Burt - Demisto <53576129+aburt-demisto@users.noreply.github.com> * Improve slack notifier upload message (#17533) * add indication of marketplace in message titles * add indication of marketplace in message titles * Update gitlab_slack_notifier.py * Update gitlab_slack_notifier.py * Fix bug in windows ansible pack for !win-package (#17486) (#17557) * Fix bug * Make update a revision * Empty-Commit * Empty-Commit 2 Co-authored-by: Nicholas Ericksen <59053722+nericksen@users.noreply.github.com> * Added a feature to convert STIX Cyber Observable Objects to STIX Domain Object of 'indicator' so that the Microsoft Azure Sentinel TAXII Connector can feed indicators. (#17326) (#17492) * Added a feature to convert STIX Cyber Observable Objects tos STIX Domain Object of 'indicator' so that the Microsoft Azure Sentinel TAXII Connector can feed indicators. * Added a test pattern * Added codes to escape indicator values. * Updated to pass MyPy * Updated the ReleaseNotes * Small change for re-run CircleCI * Fixed a test pattern Co-authored-by: Masahiko Inoue <54964121+spearmin10@users.noreply.github.com> Co-authored-by: merit <meretmaayta@gmail.com> * sx-support-partner-update (#17562) * delete category field (#17559) * delete category field * remove marketplace key * update RN * Trend Micro Vision One (#17512) * Trend Micro Vision One (#16931) * Initial commit of Trend Micro Vision One integration * Modified command parameters to follow recommended format * Added mock JSON data for unit tests * Updates for MyPy validation * Updates to the Incident Types and Layouts * Updated max_fetch default value to 50 * Merged to single integration * Minor changes * Documentation Updates * Documentation Updates * Cleaned up test cases * Added submit to sandbox test * Removed field from mapper, classifier, updated docs * Incorporated feedback from XSOAR review * Removed entry from mapper, updated fromVersion * Update docker image * Changes associated with use of ScheduledCommand * Updated docs and removed unnecessary message * Update TrendMicroVisionOne_description.md * Updated docs to include full product name * Changed version to 6.2 in demistomock.py * Feedback from demo * demisto mock version reverted, mocked the raise error method of scheduled command Co-authored-by: Mike <mike@mdgsecurity.com> Co-authored-by: epintzov <epintzov@paloaltonetworks.com> * New Integration: ACTI Vulnerability Query (#17357) (#17567) * Initialized file structure for integration namely ACTI Vulnerability Query * Minor changes made to README.md for Accenture CTI v2 pack * Updated README * Shifted logo changes to a new branch * Shifted logo changes to a new branch * functions and unit test for vulnerability command * added contextual properties in extract_result function * changes in extract result function and updated command function and unit test * updated command for cve not found and updated yml * added unit test for cve not found and updated yml * Modified test-module for correct API testing * WIP: Minor changes made * minor changes * cve class added locally * field added in yml * changes in cvss and display text fields * Added necessary message to differentiate API token error for tokens not having access to vulnerability intel * changes in unit test according to code * changes * date_time issue fixed * Added fields to yml and made some minor changes * WIP: Removed RM102, IN136, PA114, RN106 : Try 1 * WIP: Updated Accenture CTI v2 pack README * removed print statements * WIP: Resolving errors : Try 1 * WIP: Fixing flake8 errors : Try 2 * WIP: Resolving minor Mypy, flake8 errors : Try 3 * WIP: Resolving errors : Try 4 * Removed unnecessary unused files * Corrected typo * created custom CVE class * Inherited CVE class in CustomCVE class * minorchanges * Removed flake8 errors * Resolving E302 * Resolving errors: final * Modified CustomCVE class * Updated yml for cvss2 & cvss3 fields * Updated README * Changed base command from vuln to acti-vuln Co-authored-by: Ankit Mordhwaj <mordhwaj.ankit@gmail.com> Co-authored-by: Satyaki Chakraborti <40510780+satyakidroid@users.noreply.github.com> Co-authored-by: Ankit Mordhwaj <mordhwaj.ankit@gmail.com> * Update Docker Image To demisto/python3 (#17551) * Updated Metadata Of Pack BluecatAddressManager * Added release notes to pack BluecatAddressManager * Packs/BluecatAddressManager/Integrations/BluecatAddressManager/BluecatAddressManager.yml Docker image update * Fix ReadPdfFileV2 script bug (#17548) * failed unit-test * failed unit-test * failed unit-test * failed unit-test * fix bug * bump rn * update mocker variable name * failed unit-test * failed unit-tests * secrets ignore * fix bug * fix cr comments * update func docstring * Proofpoint TAP v2 - Handle non-ascii chars in message (#17532) * test(fetch): message with non ascii chars subject * test(fetch): rm encoding arg * feat(encoding): add raw message encoding param * doc(encoding): add param to readme and add example * Remove wrong marketplace (#17571) * Remove wrong marketplace * RN * RN * Update core_packs_mpv2_list.json * Update core_packs_mpv2_list.json Co-authored-by: Shai Yaakovi <30797606+yaakovi@users.noreply.github.com> * Hackuity integration Co-authored-by: Itay Keren <ikeren@paloaltonetworks.com> Co-authored-by: David Baumstein <51712181+David-BMS@users.noreply.github.com> Co-authored-by: Aviya Baumgarten <71635916+abaumgarten@users.noreply.github.com> Co-authored-by: Guy Keller <33782301+guykeller@users.noreply.github.com> Co-authored-by: content-bot <55035720+content-bot@users.noreply.github.com> Co-authored-by: SepioSystems <65220432+SepioSystems@users.noreply.github.com> Co-authored-by: ilan <ierukhimovic@paloaltonetworks.com> Co-authored-by: cado-joshua <93199751+cado-joshua@users.noreply.github.com> Co-authored-by: Adam Burt - Demisto <53576129+aburt-demisto@users.noreply.github.com> Co-authored-by: Shai Yaakovi <30797606+yaakovi@users.noreply.github.com> Co-authored-by: Nicholas Ericksen <59053722+nericksen@users.noreply.github.com> Co-authored-by: Masahiko Inoue <54964121+spearmin10@users.noreply.github.com> Co-authored-by: merit <meretmaayta@gmail.com> Co-authored-by: Bar Katzir <37335599+bakatzir@users.noreply.github.com> Co-authored-by: evisochek <72695126+evisochek@users.noreply.github.com> Co-authored-by: Mike <mike@mdgsecurity.com> Co-authored-by: epintzov <epintzov@paloaltonetworks.com> Co-authored-by: Satyaki Chakraborti <40510780+satyakidroid@users.noreply.github.com> Co-authored-by: Ankit Mordhwaj <mordhwaj.ankit@gmail.com> Co-authored-by: Guy Afik <53861351+GuyAfik@users.noreply.github.com> * added word Co-authored-by: Rogdham <3994389+Rogdham@users.noreply.github.com> Co-authored-by: Itay Keren <ikeren@paloaltonetworks.com> Co-authored-by: David Baumstein <51712181+David-BMS@users.noreply.github.com> Co-authored-by: Aviya Baumgarten <71635916+abaumgarten@users.noreply.github.com> Co-authored-by: Guy Keller <33782301+guykeller@users.noreply.github.com> Co-authored-by: SepioSystems <65220432+SepioSystems@users.noreply.github.com> Co-authored-by: ilan <ierukhimovic@paloaltonetworks.com> Co-authored-by: cado-joshua <93199751+cado-joshua@users.noreply.github.com> Co-authored-by: Adam Burt - Demisto <53576129+aburt-demisto@users.noreply.github.com> Co-authored-by: Shai Yaakovi <30797606+yaakovi@users.noreply.github.com> Co-authored-by: Nicholas Ericksen <59053722+nericksen@users.noreply.github.com> Co-authored-by: Masahiko Inoue <54964121+spearmin10@users.noreply.github.com> Co-authored-by: merit <meretmaayta@gmail.com> Co-authored-by: Bar Katzir <37335599+bakatzir@users.noreply.github.com> Co-authored-by: evisochek <72695126+evisochek@users.noreply.github.com> Co-authored-by: Mike <mike@mdgsecurity.com> Co-authored-by: epintzov <epintzov@paloaltonetworks.com> Co-authored-by: Satyaki Chakraborti <40510780+satyakidroid@users.noreply.github.com> Co-authored-by: Ankit Mordhwaj <mordhwaj.ankit@gmail.com> Co-authored-by: Guy Afik <53861351+GuyAfik@users.noreply.github.com>
Status
Related Issues
None
Description
This new pack provides an integration with Hackuity, a vulnerability management solution.
Screenshots
Configuration page
hackuity-search-findings command
hackuity-search-vulndb-vulnerabilities command
Minimum version of Cortex XSOAR
Does it break backward compatibility?
Must have