sfdx-hardis 6.2.0 → 6.3.0
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.
- package/CHANGELOG.md +11 -0
- package/lib/commands/hardis/org/diagnose/unsecure-connected-apps.d.ts +16 -0
- package/lib/commands/hardis/org/diagnose/unsecure-connected-apps.js +190 -0
- package/lib/commands/hardis/org/diagnose/unsecure-connected-apps.js.map +1 -0
- package/lib/commands/hardis/org/monitor/all.js +6 -0
- package/lib/commands/hardis/org/monitor/all.js.map +1 -1
- package/lib/commands/hardis/work/save.js +7 -8
- package/lib/commands/hardis/work/save.js.map +1 -1
- package/lib/common/gitProvider/index.js +1 -1
- package/lib/common/gitProvider/index.js.map +1 -1
- package/lib/common/metadata-utils/index.js +1 -1
- package/lib/common/metadata-utils/index.js.map +1 -1
- package/lib/common/notifProvider/index.d.ts +1 -1
- package/lib/common/notifProvider/index.js.map +1 -1
- package/oclif.lock +24 -24
- package/oclif.manifest.json +387 -267
- package/package.json +5 -5
package/oclif.manifest.json
CHANGED
|
@@ -5800,6 +5800,121 @@
|
|
|
5800
5800
|
"import:files:org:hardis"
|
|
5801
5801
|
]
|
|
5802
5802
|
},
|
|
5803
|
+
"hardis:org:fix:listviewmine": {
|
|
5804
|
+
"aliases": [],
|
|
5805
|
+
"args": {},
|
|
5806
|
+
"description": "Fix listviews whose scope Mine has been replaced by Everything\n\n[](https://nicolas.vuillamy.fr/invalid-scope-mine-not-allowed-deploy-your-listviews-anyway-443aceca8ac7)\n\nList of ListViews can be:\n\n- read from .sfdx-hardis.yml file in property **listViewsToSetToMine**\n- sent in argument listviews\n\nNote: property **listViewsToSetToMine** can be auto-generated by command hardis:work:save if .sfdx-hardis.yml contains the following configuration\n\n```yaml\nautoCleanTypes:\n - listViewsMine\n```\n\n- Example of sfdx-hardis.yml property `listViewsToSetToMine`:\n\n```yaml\nlistViewsToSetToMine:\n - \"force-app/main/default/objects/Operation__c/listViews/MyCurrentOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Operation__c/listViews/MyFinalizedOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/Default_Opportunity_Pipeline.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MyCurrentSubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MySubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Account/listViews/MyActivePartners.listView-meta.xml\"\n```\n\n- If manually written, this could also be:\n\n```yaml\nlistViewsToSetToMine:\n - \"Operation__c:MyCurrentOperations\"\n - \"Operation__c:MyFinalizedOperations\"\n - \"Opportunity:Default_Opportunity_Pipeline\"\n - \"Opportunity:MyCurrentSubscriptions\"\n - \"Opportunity:MySubscriptions\"\n - \"Account:MyActivePartners\"\n```\n\nTroubleshooting: if you need to run this command from an alpine-linux based docker image, use this workaround in your dockerfile:\n\n```dockerfile\n# Do not use puppeteer embedded chromium\nRUN apk add --update --no-cache chromium\nENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=\"true\"\nENV CHROMIUM_PATH=\"/usr/bin/chromium-browser\"\nENV PUPPETEER_EXECUTABLE_PATH=\"$\\{CHROMIUM_PATH}\" // remove \\ before {\n```\n",
|
|
5807
|
+
"examples": [
|
|
5808
|
+
"$ sf hardis:org:fix:listviewmine",
|
|
5809
|
+
"$ sf hardis:org:fix:listviewmine --listviews Opportunity:MySubscriptions,Account:MyActivePartners"
|
|
5810
|
+
],
|
|
5811
|
+
"flags": {
|
|
5812
|
+
"json": {
|
|
5813
|
+
"description": "Format output as json.",
|
|
5814
|
+
"helpGroup": "GLOBAL",
|
|
5815
|
+
"name": "json",
|
|
5816
|
+
"allowNo": false,
|
|
5817
|
+
"type": "boolean"
|
|
5818
|
+
},
|
|
5819
|
+
"flags-dir": {
|
|
5820
|
+
"helpGroup": "GLOBAL",
|
|
5821
|
+
"name": "flags-dir",
|
|
5822
|
+
"summary": "Import flag values from a directory.",
|
|
5823
|
+
"hasDynamicHelp": false,
|
|
5824
|
+
"multiple": false,
|
|
5825
|
+
"type": "option"
|
|
5826
|
+
},
|
|
5827
|
+
"listviews": {
|
|
5828
|
+
"char": "l",
|
|
5829
|
+
"description": "Comma-separated list of listviews following format Object:ListViewName\nExample: Contact:MyContacts,Contact:MyActiveContacts,Opportunity:MYClosedOpportunities",
|
|
5830
|
+
"name": "listviews",
|
|
5831
|
+
"hasDynamicHelp": false,
|
|
5832
|
+
"multiple": false,
|
|
5833
|
+
"type": "option"
|
|
5834
|
+
},
|
|
5835
|
+
"debug": {
|
|
5836
|
+
"char": "d",
|
|
5837
|
+
"description": "Activate debug mode (more logs)",
|
|
5838
|
+
"name": "debug",
|
|
5839
|
+
"allowNo": false,
|
|
5840
|
+
"type": "boolean"
|
|
5841
|
+
},
|
|
5842
|
+
"websocket": {
|
|
5843
|
+
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
5844
|
+
"name": "websocket",
|
|
5845
|
+
"hasDynamicHelp": false,
|
|
5846
|
+
"multiple": false,
|
|
5847
|
+
"type": "option"
|
|
5848
|
+
},
|
|
5849
|
+
"skipauth": {
|
|
5850
|
+
"description": "Skip authentication check when a default username is required",
|
|
5851
|
+
"name": "skipauth",
|
|
5852
|
+
"allowNo": false,
|
|
5853
|
+
"type": "boolean"
|
|
5854
|
+
},
|
|
5855
|
+
"target-org": {
|
|
5856
|
+
"aliases": [
|
|
5857
|
+
"targetusername",
|
|
5858
|
+
"u"
|
|
5859
|
+
],
|
|
5860
|
+
"char": "o",
|
|
5861
|
+
"deprecateAliases": true,
|
|
5862
|
+
"name": "target-org",
|
|
5863
|
+
"noCacheDefault": true,
|
|
5864
|
+
"required": true,
|
|
5865
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
5866
|
+
"hasDynamicHelp": true,
|
|
5867
|
+
"multiple": false,
|
|
5868
|
+
"type": "option"
|
|
5869
|
+
}
|
|
5870
|
+
},
|
|
5871
|
+
"hasDynamicHelp": true,
|
|
5872
|
+
"hiddenAliases": [],
|
|
5873
|
+
"id": "hardis:org:fix:listviewmine",
|
|
5874
|
+
"pluginAlias": "sfdx-hardis",
|
|
5875
|
+
"pluginName": "sfdx-hardis",
|
|
5876
|
+
"pluginType": "core",
|
|
5877
|
+
"strict": true,
|
|
5878
|
+
"enableJsonFlag": true,
|
|
5879
|
+
"title": "Fix listviews with ",
|
|
5880
|
+
"requiresProject": true,
|
|
5881
|
+
"isESM": true,
|
|
5882
|
+
"relativePath": [
|
|
5883
|
+
"lib",
|
|
5884
|
+
"commands",
|
|
5885
|
+
"hardis",
|
|
5886
|
+
"org",
|
|
5887
|
+
"fix",
|
|
5888
|
+
"listviewmine.js"
|
|
5889
|
+
],
|
|
5890
|
+
"aliasPermutations": [],
|
|
5891
|
+
"permutations": [
|
|
5892
|
+
"hardis:org:fix:listviewmine",
|
|
5893
|
+
"org:hardis:fix:listviewmine",
|
|
5894
|
+
"org:fix:hardis:listviewmine",
|
|
5895
|
+
"org:fix:listviewmine:hardis",
|
|
5896
|
+
"hardis:fix:org:listviewmine",
|
|
5897
|
+
"fix:hardis:org:listviewmine",
|
|
5898
|
+
"fix:org:hardis:listviewmine",
|
|
5899
|
+
"fix:org:listviewmine:hardis",
|
|
5900
|
+
"hardis:fix:listviewmine:org",
|
|
5901
|
+
"fix:hardis:listviewmine:org",
|
|
5902
|
+
"fix:listviewmine:hardis:org",
|
|
5903
|
+
"fix:listviewmine:org:hardis",
|
|
5904
|
+
"hardis:org:listviewmine:fix",
|
|
5905
|
+
"org:hardis:listviewmine:fix",
|
|
5906
|
+
"org:listviewmine:hardis:fix",
|
|
5907
|
+
"org:listviewmine:fix:hardis",
|
|
5908
|
+
"hardis:listviewmine:org:fix",
|
|
5909
|
+
"listviewmine:hardis:org:fix",
|
|
5910
|
+
"listviewmine:org:hardis:fix",
|
|
5911
|
+
"listviewmine:org:fix:hardis",
|
|
5912
|
+
"hardis:listviewmine:fix:org",
|
|
5913
|
+
"listviewmine:hardis:fix:org",
|
|
5914
|
+
"listviewmine:fix:hardis:org",
|
|
5915
|
+
"listviewmine:fix:org:hardis"
|
|
5916
|
+
]
|
|
5917
|
+
},
|
|
5803
5918
|
"hardis:org:diagnose:audittrail": {
|
|
5804
5919
|
"aliases": [],
|
|
5805
5920
|
"args": {},
|
|
@@ -6409,6 +6524,120 @@
|
|
|
6409
6524
|
"releaseupdates:diagnose:org:hardis"
|
|
6410
6525
|
]
|
|
6411
6526
|
},
|
|
6527
|
+
"hardis:org:diagnose:unsecure-connected-apps": {
|
|
6528
|
+
"aliases": [],
|
|
6529
|
+
"args": {},
|
|
6530
|
+
"description": "\n## Command Behavior\n\n**Detects unsecured Connected Apps in a Salesforce org and generates detailed reports for security analysis.**\n\nThis command is a critical security diagnostic tool that helps administrators identify Connected Apps that may pose security risks due to improper configuration. It provides comprehensive analysis of OAuth tokens and Connected App security settings to ensure proper access control.\n\nKey functionalities:\n\n- **OAuth Token Analysis:** Queries all OAuth tokens in the org using SOQL to retrieve comprehensive token information including app names, users, authorization status, and usage statistics.\n- **Security Status Assessment:** Evaluates each Connected App's security configuration by checking the `IsUsingAdminAuthorization` flag to determine if admin pre-approval is required.\n- **Unsecured App Detection:** Identifies Connected Apps that allow users to authorize themselves without admin approval, which can pose security risks.\n- **Detailed Reporting:** Generates two comprehensive CSV reports:\n - **OAuth Tokens Report:** Lists all OAuth tokens with security status, user information, and usage data\n - **Connected Apps Summary:** Aggregates unsecured Connected Apps with counts of associated OAuth tokens\n- **Visual Indicators:** Uses status icons (❌ for unsecured, ✅ for secured) to provide immediate visual feedback on security status.\n- **Security Recommendations:** Provides actionable guidance on how to secure Connected Apps through proper configuration.\n- **Notifications:** Sends alerts to configured channels (Grafana, Slack, MS Teams) with security findings and attached reports.\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-org-security/) and can output Grafana, Slack and MsTeams Notifications.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **SOQL Query Execution:** Executes a comprehensive SOQL query on the `OauthToken` object, joining with `AppMenuItem` and `User` objects to gather complete security context.\n- **Security Analysis Logic:** Analyzes the `AppMenuItem.IsUsingAdminAuthorization` field to determine if a Connected App requires admin pre-approval for user authorization.\n- **Data Transformation:** Processes raw SOQL results to add security status indicators and reorganize data for optimal reporting and analysis.\n- **Aggregation Processing:** Groups OAuth tokens by Connected App name to provide summary statistics and identify the most problematic applications.\n- **Report Generation:** Uses `generateCsvFile` to create structured CSV reports with proper formatting and metadata for easy analysis and sharing.\n- **Notification Integration:** Integrates with the `NotifProvider` to send security alerts with detailed metrics, including the number of unsecured Connected Apps and associated OAuth tokens.\n- **File Management:** Generates multiple output formats (CSV, XLSX) and manages file paths using `generateReportPath` for consistent report organization.\n- **Connection Management:** Uses `setConnectionVariables` to ensure proper authentication context for notification providers that require org connection details.\n</details>\n",
|
|
6531
|
+
"examples": [
|
|
6532
|
+
"$ sf hardis:org:diagnose:unsecure-connected-apps"
|
|
6533
|
+
],
|
|
6534
|
+
"flags": {
|
|
6535
|
+
"json": {
|
|
6536
|
+
"description": "Format output as json.",
|
|
6537
|
+
"helpGroup": "GLOBAL",
|
|
6538
|
+
"name": "json",
|
|
6539
|
+
"allowNo": false,
|
|
6540
|
+
"type": "boolean"
|
|
6541
|
+
},
|
|
6542
|
+
"flags-dir": {
|
|
6543
|
+
"helpGroup": "GLOBAL",
|
|
6544
|
+
"name": "flags-dir",
|
|
6545
|
+
"summary": "Import flag values from a directory.",
|
|
6546
|
+
"hasDynamicHelp": false,
|
|
6547
|
+
"multiple": false,
|
|
6548
|
+
"type": "option"
|
|
6549
|
+
},
|
|
6550
|
+
"outputfile": {
|
|
6551
|
+
"char": "f",
|
|
6552
|
+
"description": "Force the path and name of output report file. Must end with .csv",
|
|
6553
|
+
"name": "outputfile",
|
|
6554
|
+
"hasDynamicHelp": false,
|
|
6555
|
+
"multiple": false,
|
|
6556
|
+
"type": "option"
|
|
6557
|
+
},
|
|
6558
|
+
"debug": {
|
|
6559
|
+
"char": "d",
|
|
6560
|
+
"description": "Activate debug mode (more logs)",
|
|
6561
|
+
"name": "debug",
|
|
6562
|
+
"allowNo": false,
|
|
6563
|
+
"type": "boolean"
|
|
6564
|
+
},
|
|
6565
|
+
"websocket": {
|
|
6566
|
+
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
6567
|
+
"name": "websocket",
|
|
6568
|
+
"hasDynamicHelp": false,
|
|
6569
|
+
"multiple": false,
|
|
6570
|
+
"type": "option"
|
|
6571
|
+
},
|
|
6572
|
+
"skipauth": {
|
|
6573
|
+
"description": "Skip authentication check when a default username is required",
|
|
6574
|
+
"name": "skipauth",
|
|
6575
|
+
"allowNo": false,
|
|
6576
|
+
"type": "boolean"
|
|
6577
|
+
},
|
|
6578
|
+
"target-org": {
|
|
6579
|
+
"aliases": [
|
|
6580
|
+
"targetusername",
|
|
6581
|
+
"u"
|
|
6582
|
+
],
|
|
6583
|
+
"char": "o",
|
|
6584
|
+
"deprecateAliases": true,
|
|
6585
|
+
"name": "target-org",
|
|
6586
|
+
"noCacheDefault": true,
|
|
6587
|
+
"required": true,
|
|
6588
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
6589
|
+
"hasDynamicHelp": true,
|
|
6590
|
+
"multiple": false,
|
|
6591
|
+
"type": "option"
|
|
6592
|
+
}
|
|
6593
|
+
},
|
|
6594
|
+
"hasDynamicHelp": true,
|
|
6595
|
+
"hiddenAliases": [],
|
|
6596
|
+
"id": "hardis:org:diagnose:unsecure-connected-apps",
|
|
6597
|
+
"pluginAlias": "sfdx-hardis",
|
|
6598
|
+
"pluginName": "sfdx-hardis",
|
|
6599
|
+
"pluginType": "core",
|
|
6600
|
+
"strict": true,
|
|
6601
|
+
"enableJsonFlag": true,
|
|
6602
|
+
"title": "Detect Unsecured Connected Apps",
|
|
6603
|
+
"requiresProject": false,
|
|
6604
|
+
"isESM": true,
|
|
6605
|
+
"relativePath": [
|
|
6606
|
+
"lib",
|
|
6607
|
+
"commands",
|
|
6608
|
+
"hardis",
|
|
6609
|
+
"org",
|
|
6610
|
+
"diagnose",
|
|
6611
|
+
"unsecure-connected-apps.js"
|
|
6612
|
+
],
|
|
6613
|
+
"aliasPermutations": [],
|
|
6614
|
+
"permutations": [
|
|
6615
|
+
"hardis:org:diagnose:unsecure-connected-apps",
|
|
6616
|
+
"org:hardis:diagnose:unsecure-connected-apps",
|
|
6617
|
+
"org:diagnose:hardis:unsecure-connected-apps",
|
|
6618
|
+
"org:diagnose:unsecure-connected-apps:hardis",
|
|
6619
|
+
"hardis:diagnose:org:unsecure-connected-apps",
|
|
6620
|
+
"diagnose:hardis:org:unsecure-connected-apps",
|
|
6621
|
+
"diagnose:org:hardis:unsecure-connected-apps",
|
|
6622
|
+
"diagnose:org:unsecure-connected-apps:hardis",
|
|
6623
|
+
"hardis:diagnose:unsecure-connected-apps:org",
|
|
6624
|
+
"diagnose:hardis:unsecure-connected-apps:org",
|
|
6625
|
+
"diagnose:unsecure-connected-apps:hardis:org",
|
|
6626
|
+
"diagnose:unsecure-connected-apps:org:hardis",
|
|
6627
|
+
"hardis:org:unsecure-connected-apps:diagnose",
|
|
6628
|
+
"org:hardis:unsecure-connected-apps:diagnose",
|
|
6629
|
+
"org:unsecure-connected-apps:hardis:diagnose",
|
|
6630
|
+
"org:unsecure-connected-apps:diagnose:hardis",
|
|
6631
|
+
"hardis:unsecure-connected-apps:org:diagnose",
|
|
6632
|
+
"unsecure-connected-apps:hardis:org:diagnose",
|
|
6633
|
+
"unsecure-connected-apps:org:hardis:diagnose",
|
|
6634
|
+
"unsecure-connected-apps:org:diagnose:hardis",
|
|
6635
|
+
"hardis:unsecure-connected-apps:diagnose:org",
|
|
6636
|
+
"unsecure-connected-apps:hardis:diagnose:org",
|
|
6637
|
+
"unsecure-connected-apps:diagnose:hardis:org",
|
|
6638
|
+
"unsecure-connected-apps:diagnose:org:hardis"
|
|
6639
|
+
]
|
|
6640
|
+
},
|
|
6412
6641
|
"hardis:org:diagnose:unused-apex-classes": {
|
|
6413
6642
|
"aliases": [],
|
|
6414
6643
|
"args": {},
|
|
@@ -6900,168 +7129,53 @@
|
|
|
6900
7129
|
"hasDynamicHelp": true,
|
|
6901
7130
|
"multiple": false,
|
|
6902
7131
|
"type": "option"
|
|
6903
|
-
}
|
|
6904
|
-
},
|
|
6905
|
-
"hasDynamicHelp": true,
|
|
6906
|
-
"hiddenAliases": [],
|
|
6907
|
-
"id": "hardis:org:diagnose:unusedusers",
|
|
6908
|
-
"pluginAlias": "sfdx-hardis",
|
|
6909
|
-
"pluginName": "sfdx-hardis",
|
|
6910
|
-
"pluginType": "core",
|
|
6911
|
-
"strict": true,
|
|
6912
|
-
"enableJsonFlag": true,
|
|
6913
|
-
"title": "Detect unused Users in Salesforce",
|
|
6914
|
-
"requiresProject": false,
|
|
6915
|
-
"isESM": true,
|
|
6916
|
-
"relativePath": [
|
|
6917
|
-
"lib",
|
|
6918
|
-
"commands",
|
|
6919
|
-
"hardis",
|
|
6920
|
-
"org",
|
|
6921
|
-
"diagnose",
|
|
6922
|
-
"unusedusers.js"
|
|
6923
|
-
],
|
|
6924
|
-
"aliasPermutations": [],
|
|
6925
|
-
"permutations": [
|
|
6926
|
-
"hardis:org:diagnose:unusedusers",
|
|
6927
|
-
"org:hardis:diagnose:unusedusers",
|
|
6928
|
-
"org:diagnose:hardis:unusedusers",
|
|
6929
|
-
"org:diagnose:unusedusers:hardis",
|
|
6930
|
-
"hardis:diagnose:org:unusedusers",
|
|
6931
|
-
"diagnose:hardis:org:unusedusers",
|
|
6932
|
-
"diagnose:org:hardis:unusedusers",
|
|
6933
|
-
"diagnose:org:unusedusers:hardis",
|
|
6934
|
-
"hardis:diagnose:unusedusers:org",
|
|
6935
|
-
"diagnose:hardis:unusedusers:org",
|
|
6936
|
-
"diagnose:unusedusers:hardis:org",
|
|
6937
|
-
"diagnose:unusedusers:org:hardis",
|
|
6938
|
-
"hardis:org:unusedusers:diagnose",
|
|
6939
|
-
"org:hardis:unusedusers:diagnose",
|
|
6940
|
-
"org:unusedusers:hardis:diagnose",
|
|
6941
|
-
"org:unusedusers:diagnose:hardis",
|
|
6942
|
-
"hardis:unusedusers:org:diagnose",
|
|
6943
|
-
"unusedusers:hardis:org:diagnose",
|
|
6944
|
-
"unusedusers:org:hardis:diagnose",
|
|
6945
|
-
"unusedusers:org:diagnose:hardis",
|
|
6946
|
-
"hardis:unusedusers:diagnose:org",
|
|
6947
|
-
"unusedusers:hardis:diagnose:org",
|
|
6948
|
-
"unusedusers:diagnose:hardis:org",
|
|
6949
|
-
"unusedusers:diagnose:org:hardis"
|
|
6950
|
-
]
|
|
6951
|
-
},
|
|
6952
|
-
"hardis:org:fix:listviewmine": {
|
|
6953
|
-
"aliases": [],
|
|
6954
|
-
"args": {},
|
|
6955
|
-
"description": "Fix listviews whose scope Mine has been replaced by Everything\n\n[](https://nicolas.vuillamy.fr/invalid-scope-mine-not-allowed-deploy-your-listviews-anyway-443aceca8ac7)\n\nList of ListViews can be:\n\n- read from .sfdx-hardis.yml file in property **listViewsToSetToMine**\n- sent in argument listviews\n\nNote: property **listViewsToSetToMine** can be auto-generated by command hardis:work:save if .sfdx-hardis.yml contains the following configuration\n\n```yaml\nautoCleanTypes:\n - listViewsMine\n```\n\n- Example of sfdx-hardis.yml property `listViewsToSetToMine`:\n\n```yaml\nlistViewsToSetToMine:\n - \"force-app/main/default/objects/Operation__c/listViews/MyCurrentOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Operation__c/listViews/MyFinalizedOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/Default_Opportunity_Pipeline.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MyCurrentSubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MySubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Account/listViews/MyActivePartners.listView-meta.xml\"\n```\n\n- If manually written, this could also be:\n\n```yaml\nlistViewsToSetToMine:\n - \"Operation__c:MyCurrentOperations\"\n - \"Operation__c:MyFinalizedOperations\"\n - \"Opportunity:Default_Opportunity_Pipeline\"\n - \"Opportunity:MyCurrentSubscriptions\"\n - \"Opportunity:MySubscriptions\"\n - \"Account:MyActivePartners\"\n```\n\nTroubleshooting: if you need to run this command from an alpine-linux based docker image, use this workaround in your dockerfile:\n\n```dockerfile\n# Do not use puppeteer embedded chromium\nRUN apk add --update --no-cache chromium\nENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=\"true\"\nENV CHROMIUM_PATH=\"/usr/bin/chromium-browser\"\nENV PUPPETEER_EXECUTABLE_PATH=\"$\\{CHROMIUM_PATH}\" // remove \\ before {\n```\n",
|
|
6956
|
-
"examples": [
|
|
6957
|
-
"$ sf hardis:org:fix:listviewmine",
|
|
6958
|
-
"$ sf hardis:org:fix:listviewmine --listviews Opportunity:MySubscriptions,Account:MyActivePartners"
|
|
6959
|
-
],
|
|
6960
|
-
"flags": {
|
|
6961
|
-
"json": {
|
|
6962
|
-
"description": "Format output as json.",
|
|
6963
|
-
"helpGroup": "GLOBAL",
|
|
6964
|
-
"name": "json",
|
|
6965
|
-
"allowNo": false,
|
|
6966
|
-
"type": "boolean"
|
|
6967
|
-
},
|
|
6968
|
-
"flags-dir": {
|
|
6969
|
-
"helpGroup": "GLOBAL",
|
|
6970
|
-
"name": "flags-dir",
|
|
6971
|
-
"summary": "Import flag values from a directory.",
|
|
6972
|
-
"hasDynamicHelp": false,
|
|
6973
|
-
"multiple": false,
|
|
6974
|
-
"type": "option"
|
|
6975
|
-
},
|
|
6976
|
-
"listviews": {
|
|
6977
|
-
"char": "l",
|
|
6978
|
-
"description": "Comma-separated list of listviews following format Object:ListViewName\nExample: Contact:MyContacts,Contact:MyActiveContacts,Opportunity:MYClosedOpportunities",
|
|
6979
|
-
"name": "listviews",
|
|
6980
|
-
"hasDynamicHelp": false,
|
|
6981
|
-
"multiple": false,
|
|
6982
|
-
"type": "option"
|
|
6983
|
-
},
|
|
6984
|
-
"debug": {
|
|
6985
|
-
"char": "d",
|
|
6986
|
-
"description": "Activate debug mode (more logs)",
|
|
6987
|
-
"name": "debug",
|
|
6988
|
-
"allowNo": false,
|
|
6989
|
-
"type": "boolean"
|
|
6990
|
-
},
|
|
6991
|
-
"websocket": {
|
|
6992
|
-
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
6993
|
-
"name": "websocket",
|
|
6994
|
-
"hasDynamicHelp": false,
|
|
6995
|
-
"multiple": false,
|
|
6996
|
-
"type": "option"
|
|
6997
|
-
},
|
|
6998
|
-
"skipauth": {
|
|
6999
|
-
"description": "Skip authentication check when a default username is required",
|
|
7000
|
-
"name": "skipauth",
|
|
7001
|
-
"allowNo": false,
|
|
7002
|
-
"type": "boolean"
|
|
7003
|
-
},
|
|
7004
|
-
"target-org": {
|
|
7005
|
-
"aliases": [
|
|
7006
|
-
"targetusername",
|
|
7007
|
-
"u"
|
|
7008
|
-
],
|
|
7009
|
-
"char": "o",
|
|
7010
|
-
"deprecateAliases": true,
|
|
7011
|
-
"name": "target-org",
|
|
7012
|
-
"noCacheDefault": true,
|
|
7013
|
-
"required": true,
|
|
7014
|
-
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
7015
|
-
"hasDynamicHelp": true,
|
|
7016
|
-
"multiple": false,
|
|
7017
|
-
"type": "option"
|
|
7018
|
-
}
|
|
7019
|
-
},
|
|
7020
|
-
"hasDynamicHelp": true,
|
|
7021
|
-
"hiddenAliases": [],
|
|
7022
|
-
"id": "hardis:org:fix:listviewmine",
|
|
7023
|
-
"pluginAlias": "sfdx-hardis",
|
|
7024
|
-
"pluginName": "sfdx-hardis",
|
|
7025
|
-
"pluginType": "core",
|
|
7026
|
-
"strict": true,
|
|
7027
|
-
"enableJsonFlag": true,
|
|
7028
|
-
"title": "Fix listviews with ",
|
|
7029
|
-
"requiresProject": true,
|
|
7030
|
-
"isESM": true,
|
|
7031
|
-
"relativePath": [
|
|
7032
|
-
"lib",
|
|
7033
|
-
"commands",
|
|
7034
|
-
"hardis",
|
|
7035
|
-
"org",
|
|
7036
|
-
"fix",
|
|
7037
|
-
"listviewmine.js"
|
|
7038
|
-
],
|
|
7039
|
-
"aliasPermutations": [],
|
|
7040
|
-
"permutations": [
|
|
7041
|
-
"hardis:org:fix:listviewmine",
|
|
7042
|
-
"org:hardis:fix:listviewmine",
|
|
7043
|
-
"org:fix:hardis:listviewmine",
|
|
7044
|
-
"org:fix:listviewmine:hardis",
|
|
7045
|
-
"hardis:fix:org:listviewmine",
|
|
7046
|
-
"fix:hardis:org:listviewmine",
|
|
7047
|
-
"fix:org:hardis:listviewmine",
|
|
7048
|
-
"fix:org:listviewmine:hardis",
|
|
7049
|
-
"hardis:fix:listviewmine:org",
|
|
7050
|
-
"fix:hardis:listviewmine:org",
|
|
7051
|
-
"fix:listviewmine:hardis:org",
|
|
7052
|
-
"fix:listviewmine:org:hardis",
|
|
7053
|
-
"hardis:org:listviewmine:fix",
|
|
7054
|
-
"org:hardis:listviewmine:fix",
|
|
7055
|
-
"org:listviewmine:hardis:fix",
|
|
7056
|
-
"org:listviewmine:fix:hardis",
|
|
7057
|
-
"hardis:listviewmine:org:fix",
|
|
7058
|
-
"listviewmine:hardis:org:fix",
|
|
7059
|
-
"listviewmine:org:hardis:fix",
|
|
7060
|
-
"listviewmine:org:fix:hardis",
|
|
7061
|
-
"hardis:listviewmine:fix:org",
|
|
7062
|
-
"listviewmine:hardis:fix:org",
|
|
7063
|
-
"listviewmine:fix:hardis:org",
|
|
7064
|
-
"listviewmine:fix:org:hardis"
|
|
7132
|
+
}
|
|
7133
|
+
},
|
|
7134
|
+
"hasDynamicHelp": true,
|
|
7135
|
+
"hiddenAliases": [],
|
|
7136
|
+
"id": "hardis:org:diagnose:unusedusers",
|
|
7137
|
+
"pluginAlias": "sfdx-hardis",
|
|
7138
|
+
"pluginName": "sfdx-hardis",
|
|
7139
|
+
"pluginType": "core",
|
|
7140
|
+
"strict": true,
|
|
7141
|
+
"enableJsonFlag": true,
|
|
7142
|
+
"title": "Detect unused Users in Salesforce",
|
|
7143
|
+
"requiresProject": false,
|
|
7144
|
+
"isESM": true,
|
|
7145
|
+
"relativePath": [
|
|
7146
|
+
"lib",
|
|
7147
|
+
"commands",
|
|
7148
|
+
"hardis",
|
|
7149
|
+
"org",
|
|
7150
|
+
"diagnose",
|
|
7151
|
+
"unusedusers.js"
|
|
7152
|
+
],
|
|
7153
|
+
"aliasPermutations": [],
|
|
7154
|
+
"permutations": [
|
|
7155
|
+
"hardis:org:diagnose:unusedusers",
|
|
7156
|
+
"org:hardis:diagnose:unusedusers",
|
|
7157
|
+
"org:diagnose:hardis:unusedusers",
|
|
7158
|
+
"org:diagnose:unusedusers:hardis",
|
|
7159
|
+
"hardis:diagnose:org:unusedusers",
|
|
7160
|
+
"diagnose:hardis:org:unusedusers",
|
|
7161
|
+
"diagnose:org:hardis:unusedusers",
|
|
7162
|
+
"diagnose:org:unusedusers:hardis",
|
|
7163
|
+
"hardis:diagnose:unusedusers:org",
|
|
7164
|
+
"diagnose:hardis:unusedusers:org",
|
|
7165
|
+
"diagnose:unusedusers:hardis:org",
|
|
7166
|
+
"diagnose:unusedusers:org:hardis",
|
|
7167
|
+
"hardis:org:unusedusers:diagnose",
|
|
7168
|
+
"org:hardis:unusedusers:diagnose",
|
|
7169
|
+
"org:unusedusers:hardis:diagnose",
|
|
7170
|
+
"org:unusedusers:diagnose:hardis",
|
|
7171
|
+
"hardis:unusedusers:org:diagnose",
|
|
7172
|
+
"unusedusers:hardis:org:diagnose",
|
|
7173
|
+
"unusedusers:org:hardis:diagnose",
|
|
7174
|
+
"unusedusers:org:diagnose:hardis",
|
|
7175
|
+
"hardis:unusedusers:diagnose:org",
|
|
7176
|
+
"unusedusers:hardis:diagnose:org",
|
|
7177
|
+
"unusedusers:diagnose:hardis:org",
|
|
7178
|
+
"unusedusers:diagnose:org:hardis"
|
|
7065
7179
|
]
|
|
7066
7180
|
},
|
|
7067
7181
|
"hardis:org:generate:packagexmlfull": {
|
|
@@ -7189,7 +7303,7 @@
|
|
|
7189
7303
|
"hardis:org:monitor:all": {
|
|
7190
7304
|
"aliases": [],
|
|
7191
7305
|
"args": {},
|
|
7192
|
-
"description": "Monitor org, generate reports and sends notifications\n\nYou can disable some commands defining either a **monitoringDisable** property in `.sfdx-hardis.yml`, or a comma separated list in env variable **MONITORING_DISABLE**\n\nExample in .sfdx-hardis.yml:\n \n```yaml\nmonitoringDisable:\n - METADATA_STATUS\n - MISSING_ATTRIBUTES\n - UNUSED_METADATAS\n```\n \nExample in env var:\n\n```sh\nMONITORING_DISABLE=METADATA_STATUS,MISSING_ATTRIBUTES,UNUSED_METADATAS\n```\n\nA [default list of monitoring commands](https://sfdx-hardis.cloudity.com/salesforce-monitoring-home/#monitoring-commands) is used, if you want to override it you can define property **monitoringCommands** in your .sfdx-hardis.yml file\n\nExample:\n\n```yaml\nmonitoringCommands:\n - title: My Custom command\n command: sf my:custom:command\n - title: My Custom command 2\n command: sf my:other:custom:command\n```\n\nYou can force the daily run of all commands by defining env var `MONITORING_IGNORE_FREQUENCY=true`\n\nThe default list of commands is the following:\n\n| Key | Description | Command | Frequency |\n| :---: | :---- | :---- | :-----: |\n| [AUDIT_TRAIL](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/audittrail) | Detect suspect setup actions in major org | [sf hardis:org:diagnose:audittrail](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/audittrail) | daily |\n| [LEGACY_API](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/legacyapi) | Detect calls to deprecated API versions | [sf hardis:org:diagnose:legacyapi](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/legacyapi) | daily |\n| [ORG_LIMITS](https://sfdx-hardis.cloudity.com/hardis/org/monitor/limits) | Detect if org limits are close to be reached | [sf hardis:org:monitor:limits](https://sfdx-hardis.cloudity.com/hardis/org/monitor/limits) | daily |\n| [LICENSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/licenses) | Extract licenses information | [sf hardis:org:diagnose:licenses](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/licenses) | weekly |\n| [LINT_ACCESS](https://sfdx-hardis.cloudity.com/hardis/lint/access) | Detect custom elements with no access rights defined in permission sets | [sf hardis:lint:access](https://sfdx-hardis.cloudity.com/hardis/lint/access) | weekly |\n| [UNUSED_LICENSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedlicenses) | Detect permission set licenses that are assigned to users that do not need them | [sf hardis:org:diagnose:unusedlicenses](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedlicenses) | weekly |\n| [UNUSED_USERS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | Detect active users without recent logins | [sf hardis:org:diagnose:unusedusers](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | weekly |\n| [ACTIVE_USERS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | Detect active users with recent logins | [sf hardis:org:diagnose:unusedusers --returnactiveusers](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | weekly |\n| [ORG_INFO](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/instanceupgrade) | Get org info + SF instance info + next major upgrade date | [sf hardis:org:diagnose:instanceupgrade](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/instanceupgrade) | weekly |\n| [RELEASE_UPDATES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/releaseupdates) | Gather warnings about incoming and overdue Release Updates | [sf hardis:org:diagnose:releaseupdates](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/releaseupdates) | weekly |\n| [UNUSED_METADATAS](https://sfdx-hardis.cloudity.com/hardis/lint/unusedmetadatas) | Detect custom labels and custom permissions that are not in use | [sf hardis:lint:unusedmetadatas](https://sfdx-hardis.cloudity.com/hardis/lint/unusedmetadatas) | weekly |\n| [UNUSED_APEX_CLASSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-apex-classes) | Detect unused Apex classes in an org | [sf hardis:org:diagnose:unused-apex-classes](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-apex-classes) | weekly |\n| [CONNECTED_APPS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-connected-apps) | Detect unused Connected Apps in an org | [sf hardis:org:diagnose:unused-connected-apps](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-connected-apps) | weekly |\n| [METADATA_STATUS](https://sfdx-hardis.cloudity.com/hardis/lint/metadatastatus) | Detect inactive metadata | [sf hardis:lint:metadatastatus](https://sfdx-hardis.cloudity.com/hardis/lint/metadatastatus) | weekly |\n| [MISSING_ATTRIBUTES](https://sfdx-hardis.cloudity.com/hardis/lint/missingattributes) | Detect missing description on custom field | [sf hardis:lint:missingattributes](https://sfdx-hardis.cloudity.com/hardis/lint/missingattributes) | weekly |\n\n",
|
|
7306
|
+
"description": "Monitor org, generate reports and sends notifications\n\nYou can disable some commands defining either a **monitoringDisable** property in `.sfdx-hardis.yml`, or a comma separated list in env variable **MONITORING_DISABLE**\n\nExample in .sfdx-hardis.yml:\n \n```yaml\nmonitoringDisable:\n - METADATA_STATUS\n - MISSING_ATTRIBUTES\n - UNUSED_METADATAS\n```\n \nExample in env var:\n\n```sh\nMONITORING_DISABLE=METADATA_STATUS,MISSING_ATTRIBUTES,UNUSED_METADATAS\n```\n\nA [default list of monitoring commands](https://sfdx-hardis.cloudity.com/salesforce-monitoring-home/#monitoring-commands) is used, if you want to override it you can define property **monitoringCommands** in your .sfdx-hardis.yml file\n\nExample:\n\n```yaml\nmonitoringCommands:\n - title: My Custom command\n command: sf my:custom:command\n - title: My Custom command 2\n command: sf my:other:custom:command\n```\n\nYou can force the daily run of all commands by defining env var `MONITORING_IGNORE_FREQUENCY=true`\n\nThe default list of commands is the following:\n\n| Key | Description | Command | Frequency |\n| :---: | :---- | :---- | :-----: |\n| [AUDIT_TRAIL](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/audittrail) | Detect suspect setup actions in major org | [sf hardis:org:diagnose:audittrail](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/audittrail) | daily |\n| [LEGACY_API](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/legacyapi) | Detect calls to deprecated API versions | [sf hardis:org:diagnose:legacyapi](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/legacyapi) | daily |\n| [ORG_LIMITS](https://sfdx-hardis.cloudity.com/hardis/org/monitor/limits) | Detect if org limits are close to be reached | [sf hardis:org:monitor:limits](https://sfdx-hardis.cloudity.com/hardis/org/monitor/limits) | daily |\n| [LICENSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/licenses) | Extract licenses information | [sf hardis:org:diagnose:licenses](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/licenses) | weekly |\n| [LINT_ACCESS](https://sfdx-hardis.cloudity.com/hardis/lint/access) | Detect custom elements with no access rights defined in permission sets | [sf hardis:lint:access](https://sfdx-hardis.cloudity.com/hardis/lint/access) | weekly |\n| [UNUSED_LICENSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedlicenses) | Detect permission set licenses that are assigned to users that do not need them | [sf hardis:org:diagnose:unusedlicenses](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedlicenses) | weekly |\n| [UNUSED_USERS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | Detect active users without recent logins | [sf hardis:org:diagnose:unusedusers](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | weekly |\n| [ACTIVE_USERS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | Detect active users with recent logins | [sf hardis:org:diagnose:unusedusers --returnactiveusers](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | weekly |\n| [ORG_INFO](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/instanceupgrade) | Get org info + SF instance info + next major upgrade date | [sf hardis:org:diagnose:instanceupgrade](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/instanceupgrade) | weekly |\n| [RELEASE_UPDATES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/releaseupdates) | Gather warnings about incoming and overdue Release Updates | [sf hardis:org:diagnose:releaseupdates](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/releaseupdates) | weekly |\n| [UNUSED_METADATAS](https://sfdx-hardis.cloudity.com/hardis/lint/unusedmetadatas) | Detect custom labels and custom permissions that are not in use | [sf hardis:lint:unusedmetadatas](https://sfdx-hardis.cloudity.com/hardis/lint/unusedmetadatas) | weekly |\n| [UNUSED_APEX_CLASSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-apex-classes) | Detect unused Apex classes in an org | [sf hardis:org:diagnose:unused-apex-classes](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-apex-classes) | weekly |\n| [CONNECTED_APPS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-connected-apps) | Detect unused Connected Apps in an org | [sf hardis:org:diagnose:unused-connected-apps](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-connected-apps) | weekly |\n| [UNSECURED_CONNECTED_APPS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unsecure-connected-apps) | Detect unsecured Connected Apps in an org | [sf hardis:org:diagnose:unsecure-connected-apps](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unsecure-connected-apps) | weekly |\n| [METADATA_STATUS](https://sfdx-hardis.cloudity.com/hardis/lint/metadatastatus) | Detect inactive metadata | [sf hardis:lint:metadatastatus](https://sfdx-hardis.cloudity.com/hardis/lint/metadatastatus) | weekly |\n| [MISSING_ATTRIBUTES](https://sfdx-hardis.cloudity.com/hardis/lint/missingattributes) | Detect missing description on custom field | [sf hardis:lint:missingattributes](https://sfdx-hardis.cloudity.com/hardis/lint/missingattributes) | weekly |\n\n",
|
|
7193
7307
|
"examples": [
|
|
7194
7308
|
"$ sf hardis:org:monitor:all"
|
|
7195
7309
|
],
|
|
@@ -7333,6 +7447,12 @@
|
|
|
7333
7447
|
"command": "sf hardis:org:diagnose:unused-connected-apps",
|
|
7334
7448
|
"frequency": "weekly"
|
|
7335
7449
|
},
|
|
7450
|
+
{
|
|
7451
|
+
"key": "UNSECURED_CONNECTED_APPS",
|
|
7452
|
+
"title": "Detect unsecured Connected Apps in an org",
|
|
7453
|
+
"command": "sf hardis:org:diagnose:unsecure-connected-apps",
|
|
7454
|
+
"frequency": "weekly"
|
|
7455
|
+
},
|
|
7336
7456
|
{
|
|
7337
7457
|
"key": "METADATA_STATUS",
|
|
7338
7458
|
"title": "Detect inactive metadata",
|
|
@@ -9691,109 +9811,6 @@
|
|
|
9691
9811
|
"auth:configure:project:hardis"
|
|
9692
9812
|
]
|
|
9693
9813
|
},
|
|
9694
|
-
"hardis:project:convert:profilestopermsets": {
|
|
9695
|
-
"aliases": [],
|
|
9696
|
-
"args": {},
|
|
9697
|
-
"description": "\n## Command Behavior\n\n**Converts existing Salesforce Profiles into Permission Sets, facilitating a more granular and recommended security model.**\n\nThis command helps in migrating permissions from Profiles to Permission Sets, which is a best practice for managing user access in Salesforce. It creates a new Permission Set for each specified Profile, adopting a naming convention of `PS_PROFILENAME`.\n\nKey functionalities:\n\n- **Profile to Permission Set Conversion:** Automatically extracts permissions from a Profile and creates a corresponding Permission Set.\n- **Naming Convention:** New Permission Sets are named with a `PS_` prefix followed by the Profile name (e.g., `PS_Standard_User`).\n- **Exclusion Filter:** Allows you to exclude specific Profiles from the conversion process using the `--except` flag.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **External Plugin Integration:** It relies on the `shane-sfdx-plugins` (specifically the `sf shane:profile:convert` command) to perform the actual conversion.\n- **File System Scan:** It reads the contents of the `force-app/main/default/profiles` directory to identify all available Profile metadata files.\n- **Command Execution:** For each identified Profile (that is not excluded), it constructs and executes the `sf shane:profile:convert` command with the appropriate Profile name and desired Permission Set name.\n- **Error Handling:** Includes basic error handling for the external command execution.\n</details>\n",
|
|
9698
|
-
"examples": [
|
|
9699
|
-
"$ sf hardis:project:convert:profilestopermsets"
|
|
9700
|
-
],
|
|
9701
|
-
"flags": {
|
|
9702
|
-
"json": {
|
|
9703
|
-
"description": "Format output as json.",
|
|
9704
|
-
"helpGroup": "GLOBAL",
|
|
9705
|
-
"name": "json",
|
|
9706
|
-
"allowNo": false,
|
|
9707
|
-
"type": "boolean"
|
|
9708
|
-
},
|
|
9709
|
-
"flags-dir": {
|
|
9710
|
-
"helpGroup": "GLOBAL",
|
|
9711
|
-
"name": "flags-dir",
|
|
9712
|
-
"summary": "Import flag values from a directory.",
|
|
9713
|
-
"hasDynamicHelp": false,
|
|
9714
|
-
"multiple": false,
|
|
9715
|
-
"type": "option"
|
|
9716
|
-
},
|
|
9717
|
-
"except": {
|
|
9718
|
-
"char": "e",
|
|
9719
|
-
"description": "List of filters",
|
|
9720
|
-
"name": "except",
|
|
9721
|
-
"default": [],
|
|
9722
|
-
"hasDynamicHelp": false,
|
|
9723
|
-
"multiple": true,
|
|
9724
|
-
"type": "option"
|
|
9725
|
-
},
|
|
9726
|
-
"debug": {
|
|
9727
|
-
"char": "d",
|
|
9728
|
-
"description": "Activate debug mode (more logs)",
|
|
9729
|
-
"name": "debug",
|
|
9730
|
-
"allowNo": false,
|
|
9731
|
-
"type": "boolean"
|
|
9732
|
-
},
|
|
9733
|
-
"websocket": {
|
|
9734
|
-
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
9735
|
-
"name": "websocket",
|
|
9736
|
-
"hasDynamicHelp": false,
|
|
9737
|
-
"multiple": false,
|
|
9738
|
-
"type": "option"
|
|
9739
|
-
},
|
|
9740
|
-
"skipauth": {
|
|
9741
|
-
"description": "Skip authentication check when a default username is required",
|
|
9742
|
-
"name": "skipauth",
|
|
9743
|
-
"allowNo": false,
|
|
9744
|
-
"type": "boolean"
|
|
9745
|
-
}
|
|
9746
|
-
},
|
|
9747
|
-
"hasDynamicHelp": false,
|
|
9748
|
-
"hiddenAliases": [],
|
|
9749
|
-
"id": "hardis:project:convert:profilestopermsets",
|
|
9750
|
-
"pluginAlias": "sfdx-hardis",
|
|
9751
|
-
"pluginName": "sfdx-hardis",
|
|
9752
|
-
"pluginType": "core",
|
|
9753
|
-
"strict": true,
|
|
9754
|
-
"enableJsonFlag": true,
|
|
9755
|
-
"title": "Convert Profiles into Permission Sets",
|
|
9756
|
-
"requiresProject": true,
|
|
9757
|
-
"requiresSfdxPlugins": [
|
|
9758
|
-
"shane-sfdx-plugins"
|
|
9759
|
-
],
|
|
9760
|
-
"isESM": true,
|
|
9761
|
-
"relativePath": [
|
|
9762
|
-
"lib",
|
|
9763
|
-
"commands",
|
|
9764
|
-
"hardis",
|
|
9765
|
-
"project",
|
|
9766
|
-
"convert",
|
|
9767
|
-
"profilestopermsets.js"
|
|
9768
|
-
],
|
|
9769
|
-
"aliasPermutations": [],
|
|
9770
|
-
"permutations": [
|
|
9771
|
-
"hardis:project:convert:profilestopermsets",
|
|
9772
|
-
"project:hardis:convert:profilestopermsets",
|
|
9773
|
-
"project:convert:hardis:profilestopermsets",
|
|
9774
|
-
"project:convert:profilestopermsets:hardis",
|
|
9775
|
-
"hardis:convert:project:profilestopermsets",
|
|
9776
|
-
"convert:hardis:project:profilestopermsets",
|
|
9777
|
-
"convert:project:hardis:profilestopermsets",
|
|
9778
|
-
"convert:project:profilestopermsets:hardis",
|
|
9779
|
-
"hardis:convert:profilestopermsets:project",
|
|
9780
|
-
"convert:hardis:profilestopermsets:project",
|
|
9781
|
-
"convert:profilestopermsets:hardis:project",
|
|
9782
|
-
"convert:profilestopermsets:project:hardis",
|
|
9783
|
-
"hardis:project:profilestopermsets:convert",
|
|
9784
|
-
"project:hardis:profilestopermsets:convert",
|
|
9785
|
-
"project:profilestopermsets:hardis:convert",
|
|
9786
|
-
"project:profilestopermsets:convert:hardis",
|
|
9787
|
-
"hardis:profilestopermsets:project:convert",
|
|
9788
|
-
"profilestopermsets:hardis:project:convert",
|
|
9789
|
-
"profilestopermsets:project:hardis:convert",
|
|
9790
|
-
"profilestopermsets:project:convert:hardis",
|
|
9791
|
-
"hardis:profilestopermsets:convert:project",
|
|
9792
|
-
"profilestopermsets:hardis:convert:project",
|
|
9793
|
-
"profilestopermsets:convert:hardis:project",
|
|
9794
|
-
"profilestopermsets:convert:project:hardis"
|
|
9795
|
-
]
|
|
9796
|
-
},
|
|
9797
9814
|
"hardis:project:clean:emptyitems": {
|
|
9798
9815
|
"aliases": [],
|
|
9799
9816
|
"args": {},
|
|
@@ -11279,6 +11296,109 @@
|
|
|
11279
11296
|
"xml:clean:project:hardis"
|
|
11280
11297
|
]
|
|
11281
11298
|
},
|
|
11299
|
+
"hardis:project:convert:profilestopermsets": {
|
|
11300
|
+
"aliases": [],
|
|
11301
|
+
"args": {},
|
|
11302
|
+
"description": "\n## Command Behavior\n\n**Converts existing Salesforce Profiles into Permission Sets, facilitating a more granular and recommended security model.**\n\nThis command helps in migrating permissions from Profiles to Permission Sets, which is a best practice for managing user access in Salesforce. It creates a new Permission Set for each specified Profile, adopting a naming convention of `PS_PROFILENAME`.\n\nKey functionalities:\n\n- **Profile to Permission Set Conversion:** Automatically extracts permissions from a Profile and creates a corresponding Permission Set.\n- **Naming Convention:** New Permission Sets are named with a `PS_` prefix followed by the Profile name (e.g., `PS_Standard_User`).\n- **Exclusion Filter:** Allows you to exclude specific Profiles from the conversion process using the `--except` flag.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **External Plugin Integration:** It relies on the `shane-sfdx-plugins` (specifically the `sf shane:profile:convert` command) to perform the actual conversion.\n- **File System Scan:** It reads the contents of the `force-app/main/default/profiles` directory to identify all available Profile metadata files.\n- **Command Execution:** For each identified Profile (that is not excluded), it constructs and executes the `sf shane:profile:convert` command with the appropriate Profile name and desired Permission Set name.\n- **Error Handling:** Includes basic error handling for the external command execution.\n</details>\n",
|
|
11303
|
+
"examples": [
|
|
11304
|
+
"$ sf hardis:project:convert:profilestopermsets"
|
|
11305
|
+
],
|
|
11306
|
+
"flags": {
|
|
11307
|
+
"json": {
|
|
11308
|
+
"description": "Format output as json.",
|
|
11309
|
+
"helpGroup": "GLOBAL",
|
|
11310
|
+
"name": "json",
|
|
11311
|
+
"allowNo": false,
|
|
11312
|
+
"type": "boolean"
|
|
11313
|
+
},
|
|
11314
|
+
"flags-dir": {
|
|
11315
|
+
"helpGroup": "GLOBAL",
|
|
11316
|
+
"name": "flags-dir",
|
|
11317
|
+
"summary": "Import flag values from a directory.",
|
|
11318
|
+
"hasDynamicHelp": false,
|
|
11319
|
+
"multiple": false,
|
|
11320
|
+
"type": "option"
|
|
11321
|
+
},
|
|
11322
|
+
"except": {
|
|
11323
|
+
"char": "e",
|
|
11324
|
+
"description": "List of filters",
|
|
11325
|
+
"name": "except",
|
|
11326
|
+
"default": [],
|
|
11327
|
+
"hasDynamicHelp": false,
|
|
11328
|
+
"multiple": true,
|
|
11329
|
+
"type": "option"
|
|
11330
|
+
},
|
|
11331
|
+
"debug": {
|
|
11332
|
+
"char": "d",
|
|
11333
|
+
"description": "Activate debug mode (more logs)",
|
|
11334
|
+
"name": "debug",
|
|
11335
|
+
"allowNo": false,
|
|
11336
|
+
"type": "boolean"
|
|
11337
|
+
},
|
|
11338
|
+
"websocket": {
|
|
11339
|
+
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
11340
|
+
"name": "websocket",
|
|
11341
|
+
"hasDynamicHelp": false,
|
|
11342
|
+
"multiple": false,
|
|
11343
|
+
"type": "option"
|
|
11344
|
+
},
|
|
11345
|
+
"skipauth": {
|
|
11346
|
+
"description": "Skip authentication check when a default username is required",
|
|
11347
|
+
"name": "skipauth",
|
|
11348
|
+
"allowNo": false,
|
|
11349
|
+
"type": "boolean"
|
|
11350
|
+
}
|
|
11351
|
+
},
|
|
11352
|
+
"hasDynamicHelp": false,
|
|
11353
|
+
"hiddenAliases": [],
|
|
11354
|
+
"id": "hardis:project:convert:profilestopermsets",
|
|
11355
|
+
"pluginAlias": "sfdx-hardis",
|
|
11356
|
+
"pluginName": "sfdx-hardis",
|
|
11357
|
+
"pluginType": "core",
|
|
11358
|
+
"strict": true,
|
|
11359
|
+
"enableJsonFlag": true,
|
|
11360
|
+
"title": "Convert Profiles into Permission Sets",
|
|
11361
|
+
"requiresProject": true,
|
|
11362
|
+
"requiresSfdxPlugins": [
|
|
11363
|
+
"shane-sfdx-plugins"
|
|
11364
|
+
],
|
|
11365
|
+
"isESM": true,
|
|
11366
|
+
"relativePath": [
|
|
11367
|
+
"lib",
|
|
11368
|
+
"commands",
|
|
11369
|
+
"hardis",
|
|
11370
|
+
"project",
|
|
11371
|
+
"convert",
|
|
11372
|
+
"profilestopermsets.js"
|
|
11373
|
+
],
|
|
11374
|
+
"aliasPermutations": [],
|
|
11375
|
+
"permutations": [
|
|
11376
|
+
"hardis:project:convert:profilestopermsets",
|
|
11377
|
+
"project:hardis:convert:profilestopermsets",
|
|
11378
|
+
"project:convert:hardis:profilestopermsets",
|
|
11379
|
+
"project:convert:profilestopermsets:hardis",
|
|
11380
|
+
"hardis:convert:project:profilestopermsets",
|
|
11381
|
+
"convert:hardis:project:profilestopermsets",
|
|
11382
|
+
"convert:project:hardis:profilestopermsets",
|
|
11383
|
+
"convert:project:profilestopermsets:hardis",
|
|
11384
|
+
"hardis:convert:profilestopermsets:project",
|
|
11385
|
+
"convert:hardis:profilestopermsets:project",
|
|
11386
|
+
"convert:profilestopermsets:hardis:project",
|
|
11387
|
+
"convert:profilestopermsets:project:hardis",
|
|
11388
|
+
"hardis:project:profilestopermsets:convert",
|
|
11389
|
+
"project:hardis:profilestopermsets:convert",
|
|
11390
|
+
"project:profilestopermsets:hardis:convert",
|
|
11391
|
+
"project:profilestopermsets:convert:hardis",
|
|
11392
|
+
"hardis:profilestopermsets:project:convert",
|
|
11393
|
+
"profilestopermsets:hardis:project:convert",
|
|
11394
|
+
"profilestopermsets:project:hardis:convert",
|
|
11395
|
+
"profilestopermsets:project:convert:hardis",
|
|
11396
|
+
"hardis:profilestopermsets:convert:project",
|
|
11397
|
+
"profilestopermsets:hardis:convert:project",
|
|
11398
|
+
"profilestopermsets:convert:hardis:project",
|
|
11399
|
+
"profilestopermsets:convert:project:hardis"
|
|
11400
|
+
]
|
|
11401
|
+
},
|
|
11282
11402
|
"hardis:project:deploy:notify": {
|
|
11283
11403
|
"aliases": [],
|
|
11284
11404
|
"args": {},
|
|
@@ -15151,5 +15271,5 @@
|
|
|
15151
15271
|
]
|
|
15152
15272
|
}
|
|
15153
15273
|
},
|
|
15154
|
-
"version": "6.
|
|
15274
|
+
"version": "6.3.0"
|
|
15155
15275
|
}
|