foreman_openscap 7.1.0 → 8.0.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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_openscap/locale/cs_CZ/foreman_openscap.js +517 -421
  3. data/app/assets/javascripts/foreman_openscap/locale/de/foreman_openscap.js +909 -813
  4. data/app/assets/javascripts/foreman_openscap/locale/en/foreman_openscap.js +517 -421
  5. data/app/assets/javascripts/foreman_openscap/locale/en_GB/foreman_openscap.js +549 -453
  6. data/app/assets/javascripts/foreman_openscap/locale/es/foreman_openscap.js +917 -821
  7. data/app/assets/javascripts/foreman_openscap/locale/fr/foreman_openscap.js +917 -821
  8. data/app/assets/javascripts/foreman_openscap/locale/gl/foreman_openscap.js +557 -461
  9. data/app/assets/javascripts/foreman_openscap/locale/it/foreman_openscap.js +603 -507
  10. data/app/assets/javascripts/foreman_openscap/locale/ja/foreman_openscap.js +908 -812
  11. data/app/assets/javascripts/foreman_openscap/locale/ka/foreman_openscap.js +1398 -0
  12. data/app/assets/javascripts/foreman_openscap/locale/ko/foreman_openscap.js +705 -609
  13. data/app/assets/javascripts/foreman_openscap/locale/pt_BR/foreman_openscap.js +917 -821
  14. data/app/assets/javascripts/foreman_openscap/locale/ru/foreman_openscap.js +707 -611
  15. data/app/assets/javascripts/foreman_openscap/locale/sv_SE/foreman_openscap.js +557 -461
  16. data/app/assets/javascripts/foreman_openscap/locale/zh_CN/foreman_openscap.js +908 -812
  17. data/app/assets/javascripts/foreman_openscap/locale/zh_TW/foreman_openscap.js +705 -609
  18. data/app/assets/javascripts/foreman_openscap/reports.js +5 -0
  19. data/app/controllers/arf_reports_controller.rb +23 -2
  20. data/app/helpers/arf_reports_helper.rb +17 -4
  21. data/app/models/concerns/foreman_openscap/host_extensions.rb +2 -0
  22. data/app/models/foreman_openscap/arf_report.rb +11 -2
  23. data/app/views/arf_reports/_output.html.erb +5 -1
  24. data/app/views/job_templates/run_openscap_remediation_-_ansible_default.erb +27 -0
  25. data/app/views/job_templates/run_openscap_remediation_-_script_default.erb +24 -0
  26. data/config/routes.rb +1 -0
  27. data/db/migrate/20230912122310_add_fixes_to_message.rb +5 -0
  28. data/lib/foreman_openscap/engine.rb +18 -2
  29. data/lib/foreman_openscap/version.rb +1 -1
  30. data/lib/tasks/foreman_openscap_tasks.rake +5 -16
  31. data/locale/Makefile +3 -3
  32. data/locale/cs_CZ/foreman_openscap.edit.po +144 -16
  33. data/locale/cs_CZ/foreman_openscap.po +97 -1
  34. data/locale/de/LC_MESSAGES/foreman_openscap.mo +0 -0
  35. data/locale/de/foreman_openscap.edit.po +145 -17
  36. data/locale/de/foreman_openscap.po +98 -2
  37. data/locale/en/foreman_openscap.edit.po +144 -16
  38. data/locale/en/foreman_openscap.po +97 -1
  39. data/locale/en_GB/foreman_openscap.edit.po +144 -16
  40. data/locale/en_GB/foreman_openscap.po +97 -1
  41. data/locale/es/LC_MESSAGES/foreman_openscap.mo +0 -0
  42. data/locale/es/foreman_openscap.edit.po +145 -17
  43. data/locale/es/foreman_openscap.po +98 -2
  44. data/locale/foreman_openscap.pot +168 -16
  45. data/locale/fr/LC_MESSAGES/foreman_openscap.mo +0 -0
  46. data/locale/fr/foreman_openscap.edit.po +145 -17
  47. data/locale/fr/foreman_openscap.po +98 -2
  48. data/locale/gl/foreman_openscap.edit.po +144 -16
  49. data/locale/gl/foreman_openscap.po +97 -1
  50. data/locale/it/foreman_openscap.edit.po +144 -16
  51. data/locale/it/foreman_openscap.po +97 -1
  52. data/locale/ja/LC_MESSAGES/foreman_openscap.mo +0 -0
  53. data/locale/ja/foreman_openscap.edit.po +145 -17
  54. data/locale/ja/foreman_openscap.po +98 -2
  55. data/locale/ka/LC_MESSAGES/foreman_openscap.mo +0 -0
  56. data/locale/ka/foreman_openscap.edit.po +1863 -0
  57. data/locale/ka/foreman_openscap.po +1405 -0
  58. data/locale/ka/foreman_openscap.po.time_stamp +0 -0
  59. data/locale/ko/LC_MESSAGES/foreman_openscap.mo +0 -0
  60. data/locale/ko/foreman_openscap.edit.po +145 -17
  61. data/locale/ko/foreman_openscap.po +98 -2
  62. data/locale/pt_BR/LC_MESSAGES/foreman_openscap.mo +0 -0
  63. data/locale/pt_BR/foreman_openscap.edit.po +145 -17
  64. data/locale/pt_BR/foreman_openscap.po +98 -2
  65. data/locale/ru/LC_MESSAGES/foreman_openscap.mo +0 -0
  66. data/locale/ru/foreman_openscap.edit.po +145 -17
  67. data/locale/ru/foreman_openscap.po +98 -2
  68. data/locale/sv_SE/foreman_openscap.edit.po +144 -16
  69. data/locale/sv_SE/foreman_openscap.po +97 -1
  70. data/locale/zh_CN/LC_MESSAGES/foreman_openscap.mo +0 -0
  71. data/locale/zh_CN/foreman_openscap.edit.po +145 -17
  72. data/locale/zh_CN/foreman_openscap.po +98 -2
  73. data/locale/zh_TW/LC_MESSAGES/foreman_openscap.mo +0 -0
  74. data/locale/zh_TW/foreman_openscap.edit.po +145 -17
  75. data/locale/zh_TW/foreman_openscap.po +98 -2
  76. data/webpack/components/EmptyState.js +6 -2
  77. data/webpack/components/OpenscapRemediationWizard/OpenscapRemediationSelectors.js +16 -0
  78. data/webpack/components/OpenscapRemediationWizard/OpenscapRemediationWizardContext.js +4 -0
  79. data/webpack/components/OpenscapRemediationWizard/ViewSelectedHostsLink.js +38 -0
  80. data/webpack/components/OpenscapRemediationWizard/WizardHeader.js +43 -0
  81. data/webpack/components/OpenscapRemediationWizard/constants.js +14 -0
  82. data/webpack/components/OpenscapRemediationWizard/helpers.js +33 -0
  83. data/webpack/components/OpenscapRemediationWizard/index.js +160 -0
  84. data/webpack/components/OpenscapRemediationWizard/steps/Finish.js +131 -0
  85. data/webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js +217 -0
  86. data/webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js +176 -0
  87. data/webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.scss +4 -0
  88. data/webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js +160 -0
  89. data/webpack/components/OpenscapRemediationWizard/steps/index.js +4 -0
  90. data/webpack/index.js +8 -3
  91. data/webpack/testHelper.js +6 -5
  92. metadata +24 -3
@@ -382,15 +382,15 @@ msgstr "刪除 %s 合規報告失敗"
382
382
  msgid "Successfully deleted %s compliance reports"
383
383
  msgstr "刪除 %s 合規報告成功"
384
384
 
385
- #: ../app/controllers/arf_reports_controller.rb:85
385
+ #: ../app/controllers/arf_reports_controller.rb:106
386
386
  msgid "No compliance reports were found."
387
387
  msgstr ""
388
388
 
389
- #: ../app/controllers/arf_reports_controller.rb:89
389
+ #: ../app/controllers/arf_reports_controller.rb:110
390
390
  msgid "No compliance reports selected"
391
391
  msgstr ""
392
392
 
393
- #: ../app/controllers/arf_reports_controller.rb:94
393
+ #: ../app/controllers/arf_reports_controller.rb:115
394
394
  msgid "Something went wrong while selecting compliance reports - %s"
395
395
  msgstr "選擇合規報告時發生了錯誤 - %s"
396
396
 
@@ -430,15 +430,15 @@ msgstr "已更新主機:未從合規政策指定 '%s'"
430
430
  msgid "No valid policy ID provided"
431
431
  msgstr ""
432
432
 
433
- #: ../app/controllers/policies_controller.rb:125
434
- msgid "No hosts were found."
435
- msgstr "找不到主機。"
436
-
437
433
  #: ../app/controllers/policies_controller.rb:129
434
+ msgid "No hosts were found with that id, name or query filter"
435
+ msgstr ""
436
+
437
+ #: ../app/controllers/policies_controller.rb:134
438
438
  msgid "No hosts selected"
439
439
  msgstr "未選擇主機"
440
440
 
441
- #: ../app/controllers/policies_controller.rb:134
441
+ #: ../app/controllers/policies_controller.rb:139
442
442
  msgid "Something went wrong while selecting hosts - %s"
443
443
  msgstr "選擇主機時發生了錯誤 - %s"
444
444
 
@@ -510,18 +510,22 @@ msgstr ""
510
510
  msgid " through %s"
511
511
  msgstr ""
512
512
 
513
- #: ../app/helpers/arf_reports_helper.rb:66
513
+ #: ../app/helpers/arf_reports_helper.rb:67
514
514
  msgid "Hosts failing this rule"
515
515
  msgstr ""
516
516
 
517
- #: ../app/helpers/arf_reports_helper.rb:67
517
+ #: ../app/helpers/arf_reports_helper.rb:68
518
518
  msgid "Hosts passing this rule"
519
519
  msgstr ""
520
520
 
521
- #: ../app/helpers/arf_reports_helper.rb:68
521
+ #: ../app/helpers/arf_reports_helper.rb:69
522
522
  msgid "Hosts othering this rule"
523
523
  msgstr ""
524
524
 
525
+ #: ../app/helpers/arf_reports_helper.rb:72
526
+ msgid "Remediation"
527
+ msgstr ""
528
+
525
529
  #: ../app/helpers/compliance_dashboard_helper.rb:3 ../app/views/arf_reports/_list.html.erb:6 ../app/views/arf_reports/delete_multiple.html.erb:7 ../app/views/policy_dashboard/_policy_reports.html.erb:6
526
530
  msgid "Host"
527
531
  msgstr "主機"
@@ -1161,7 +1165,7 @@ msgstr "月份中的日子,請注意並不是所有月份都有同樣的天數
1161
1165
  msgid "You can specify custom cron line, e.g. \"0 3 * * *\", separate each of 5 values by space"
1162
1166
  msgstr "您可指定自訂的 cron 行,例如\"0 3 * * *\",五個數值均由空格隔開"
1163
1167
 
1164
- #: ../app/views/policies/_list.html.erb:3 ../app/views/tailoring_files/_list.html.erb:3 ../webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js:19 ../webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js:57 ../webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js:48 ../webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js:19 ../webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyForm.js:56 ../webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js:31 ../webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js:9
1168
+ #: ../app/views/policies/_list.html.erb:3 ../app/views/tailoring_files/_list.html.erb:3 ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:162 ../webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js:19 ../webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js:57 ../webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js:48 ../webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js:19 ../webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyForm.js:56 ../webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js:31 ../webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js:9
1165
1169
  msgid "Name"
1166
1170
  msgstr "名稱"
1167
1171
 
@@ -1487,14 +1491,22 @@ msgstr ""
1487
1491
  msgid "ID of OpenSCAP Proxy"
1488
1492
  msgstr ""
1489
1493
 
1490
- #: ../lib/foreman_openscap/engine.rb:270 ../lib/foreman_openscap/engine.rb:283
1494
+ #: ../lib/foreman_openscap/engine.rb:270 ../lib/foreman_openscap/engine.rb:293
1491
1495
  msgid "Run OpenSCAP scan"
1492
1496
  msgstr ""
1493
1497
 
1494
- #: ../lib/foreman_openscap/engine.rb:275 ../lib/foreman_openscap/engine.rb:284
1498
+ #: ../lib/foreman_openscap/engine.rb:275 ../lib/foreman_openscap/engine.rb:294
1495
1499
  msgid "Run OVAL scan"
1496
1500
  msgstr ""
1497
1501
 
1502
+ #: ../lib/foreman_openscap/engine.rb:279 ../lib/foreman_openscap/engine.rb:295
1503
+ msgid "Run OpenSCAP remediation with Ansible"
1504
+ msgstr ""
1505
+
1506
+ #: ../lib/foreman_openscap/engine.rb:284 ../lib/foreman_openscap/engine.rb:296
1507
+ msgid "Run OpenSCAP remediation with Shell"
1508
+ msgstr ""
1509
+
1498
1510
  #: ../webpack/components/ConfirmModal.js:19
1499
1511
  msgid "Confirm"
1500
1512
  msgstr ""
@@ -1507,14 +1519,130 @@ msgstr ""
1507
1519
  msgid "There's no available report for this host"
1508
1520
  msgstr ""
1509
1521
 
1510
- #: ../webpack/components/withDeleteModal.js:27
1511
- msgid "Are you sure you want to delete %s?"
1522
+ #: ../webpack/components/OpenscapRemediationWizard/ViewSelectedHostsLink.js:27
1523
+ msgid "View selected hosts"
1512
1524
  msgstr ""
1513
1525
 
1514
- #: ../webpack/components/withLoading.js:12
1526
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:69 ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:174
1527
+ msgid "Review hosts"
1528
+ msgstr ""
1529
+
1530
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:77 ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:123
1531
+ msgid "Select snippet"
1532
+ msgstr ""
1533
+
1534
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:85 ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:94
1535
+ msgid "Review remediation"
1536
+ msgstr ""
1537
+
1538
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:89
1539
+ msgid "Run"
1540
+ msgstr ""
1541
+
1542
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:93
1543
+ msgid "Done"
1544
+ msgstr ""
1545
+
1546
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:127
1547
+ msgid "Remediate %s rule"
1548
+ msgstr ""
1549
+
1550
+ #: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:84
1551
+ msgid "Job details"
1552
+ msgstr ""
1553
+
1554
+ #: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:87
1555
+ msgid "Close"
1556
+ msgstr ""
1557
+
1558
+ #: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:97 ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:144 ../webpack/components/withLoading.js:12
1515
1559
  msgid "Error!"
1516
1560
  msgstr ""
1517
1561
 
1562
+ #: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:105
1563
+ msgid "The job has started on selected host(s), you can check the status on the job details page."
1564
+ msgstr ""
1565
+
1566
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:167
1567
+ msgid "OS"
1568
+ msgstr ""
1569
+
1570
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:175
1571
+ msgid "By default, remediation is applied to the current host. Optionally, remediate any additional hosts that fail the rule."
1572
+ msgstr ""
1573
+
1574
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:61
1575
+ msgid "Review the remediation snippet and apply it to the host manually."
1576
+ msgstr ""
1577
+
1578
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:62
1579
+ msgid "Review the remediation snippet that will be applied to selected host(s)."
1580
+ msgstr ""
1581
+
1582
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:67
1583
+ msgid "A reboot is required after applying remediation."
1584
+ msgstr ""
1585
+
1586
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:68
1587
+ msgid "A reboot might be required after applying remediation."
1588
+ msgstr ""
1589
+
1590
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:84
1591
+ msgid "Successfully copied to clipboard!"
1592
+ msgstr ""
1593
+
1594
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:85
1595
+ msgid "Copy to clipboard"
1596
+ msgstr ""
1597
+
1598
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:103
1599
+ msgid "Do not implement any of the recommended remedial actions or scripts without first testing them in a non-production environment."
1600
+ msgstr ""
1601
+
1602
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:106
1603
+ msgid "Remediation might render the system non-functional."
1604
+ msgstr ""
1605
+
1606
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:139
1607
+ msgid "Other hosts failing this rule"
1608
+ msgstr ""
1609
+
1610
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:155
1611
+ msgid "Reboot the system(s)"
1612
+ msgstr ""
1613
+
1614
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:71
1615
+ msgid "Method"
1616
+ msgstr ""
1617
+
1618
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:77
1619
+ msgid "Remote job"
1620
+ msgstr ""
1621
+
1622
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:86
1623
+ msgid "Manual"
1624
+ msgstr ""
1625
+
1626
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:101
1627
+ msgid "There is no job to remediate with. Please remediate manually."
1628
+ msgstr ""
1629
+
1630
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:107
1631
+ msgid "Snippet"
1632
+ msgstr ""
1633
+
1634
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:150
1635
+ msgid "Select remediation method"
1636
+ msgstr ""
1637
+
1638
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:151
1639
+ msgid "You can remediate by running a remote job or you can display a snippet for manual remediation."
1640
+ msgstr ""
1641
+
1642
+ #: ../webpack/components/withDeleteModal.js:27
1643
+ msgid "Are you sure you want to delete %s?"
1644
+ msgstr ""
1645
+
1518
1646
  #: ../webpack/components/withLoading.js:64
1519
1647
  msgid "Permission denied"
1520
1648
  msgstr ""
@@ -62,6 +62,12 @@ msgstr ""
62
62
  msgid "<b>Foreman</b> OpenSCAP summary"
63
63
  msgstr ""
64
64
 
65
+ msgid "A reboot is required after applying remediation."
66
+ msgstr ""
67
+
68
+ msgid "A reboot might be required after applying remediation."
69
+ msgstr ""
70
+
65
71
  msgid "A summary of reports for OpenSCAP policies"
66
72
  msgstr ""
67
73
 
@@ -113,6 +119,9 @@ msgstr ""
113
119
  msgid "Back"
114
120
  msgstr "上一頁"
115
121
 
122
+ msgid "By default, remediation is applied to the current host. Optionally, remediate any additional hosts that fail the rule."
123
+ msgstr ""
124
+
116
125
  msgid "CVEs"
117
126
  msgstr ""
118
127
 
@@ -158,6 +167,9 @@ msgstr "選擇期間"
158
167
  msgid "Choose weekday"
159
168
  msgstr "選擇星期幾"
160
169
 
170
+ msgid "Close"
171
+ msgstr ""
172
+
161
173
  msgid "Compliance"
162
174
  msgstr "合規"
163
175
 
@@ -191,6 +203,9 @@ msgstr ""
191
203
  msgid "Content"
192
204
  msgstr ""
193
205
 
206
+ msgid "Copy to clipboard"
207
+ msgstr ""
208
+
194
209
  msgid "Could not find host identified by: %s"
195
210
  msgstr ""
196
211
 
@@ -302,9 +317,15 @@ msgstr ""
302
317
  msgid "Directory to upload when using \"directory\" upload type"
303
318
  msgstr ""
304
319
 
320
+ msgid "Do not implement any of the recommended remedial actions or scripts without first testing them in a non-production environment."
321
+ msgstr ""
322
+
305
323
  msgid "Documentation"
306
324
  msgstr "文件"
307
325
 
326
+ msgid "Done"
327
+ msgstr ""
328
+
308
329
  msgid "Download"
309
330
  msgstr "下載"
310
331
 
@@ -505,6 +526,9 @@ msgstr ""
505
526
  msgid "It may sometimes be required to adjust the security policy to your specific needs. "
506
527
  msgstr ""
507
528
 
529
+ msgid "Job details"
530
+ msgstr ""
531
+
508
532
  msgid "Latest Compliance Reports"
509
533
  msgstr ""
510
534
 
@@ -538,9 +562,15 @@ msgstr "載入中…"
538
562
  msgid "Locations"
539
563
  msgstr "位置"
540
564
 
565
+ msgid "Manual"
566
+ msgstr ""
567
+
541
568
  msgid "Message"
542
569
  msgstr "訊息"
543
570
 
571
+ msgid "Method"
572
+ msgstr ""
573
+
544
574
  msgid "Monthly, day of month: %s"
545
575
  msgstr ""
546
576
 
@@ -622,8 +652,8 @@ msgstr ""
622
652
  msgid "No hosts selected"
623
653
  msgstr "未選擇主機"
624
654
 
625
- msgid "No hosts were found."
626
- msgstr "找不到主機。"
655
+ msgid "No hosts were found with that id, name or query filter"
656
+ msgstr ""
627
657
 
628
658
  msgid "No proxy found for %{name} or %{url}"
629
659
  msgstr ""
@@ -676,6 +706,9 @@ msgstr "事件數量"
676
706
  msgid "Number of a day in month, note that not all months have same count of days"
677
707
  msgstr "月份中的日子,請注意並不是所有月份都有同樣的天數"
678
708
 
709
+ msgid "OS"
710
+ msgstr ""
711
+
679
712
  msgid "OVAL Content"
680
713
  msgstr ""
681
714
 
@@ -775,6 +808,9 @@ msgstr ""
775
808
  msgid "Other"
776
809
  msgstr "其他"
777
810
 
811
+ msgid "Other hosts failing this rule"
812
+ msgstr ""
813
+
778
814
  msgid "Othered"
779
815
  msgstr "其它"
780
816
 
@@ -867,6 +903,9 @@ msgstr "Puppet 類別"
867
903
  msgid "Rationale"
868
904
  msgstr "理由"
869
905
 
906
+ msgid "Reboot the system(s)"
907
+ msgstr ""
908
+
870
909
  msgid "Red Hat %s default content"
871
910
  msgstr ""
872
911
 
@@ -876,9 +915,21 @@ msgstr ""
876
915
  msgid "References"
877
916
  msgstr "參照"
878
917
 
918
+ msgid "Remediate %s rule"
919
+ msgstr ""
920
+
921
+ msgid "Remediation"
922
+ msgstr ""
923
+
924
+ msgid "Remediation might render the system non-functional."
925
+ msgstr ""
926
+
879
927
  msgid "Remote action:"
880
928
  msgstr "遠端動作:"
881
929
 
930
+ msgid "Remote job"
931
+ msgstr ""
932
+
882
933
  msgid "Report Metrics"
883
934
  msgstr "報告計量"
884
935
 
@@ -915,12 +966,33 @@ msgstr "資源"
915
966
  msgid "Result"
916
967
  msgstr "結果"
917
968
 
969
+ msgid "Review hosts"
970
+ msgstr ""
971
+
972
+ msgid "Review remediation"
973
+ msgstr ""
974
+
975
+ msgid "Review the remediation snippet and apply it to the host manually."
976
+ msgstr ""
977
+
978
+ msgid "Review the remediation snippet that will be applied to selected host(s)."
979
+ msgstr ""
980
+
918
981
  msgid "Rule Results"
919
982
  msgstr ""
920
983
 
984
+ msgid "Run"
985
+ msgstr ""
986
+
921
987
  msgid "Run OVAL scan"
922
988
  msgstr ""
923
989
 
990
+ msgid "Run OpenSCAP remediation with Ansible"
991
+ msgstr ""
992
+
993
+ msgid "Run OpenSCAP remediation with Shell"
994
+ msgstr ""
995
+
924
996
  msgid "Run OpenSCAP scan"
925
997
  msgstr ""
926
998
 
@@ -963,6 +1035,12 @@ msgstr ""
963
1035
  msgid "Select all items in this page"
964
1036
  msgstr "選擇這頁中的所有項目"
965
1037
 
1038
+ msgid "Select remediation method"
1039
+ msgstr ""
1040
+
1041
+ msgid "Select snippet"
1042
+ msgstr ""
1043
+
966
1044
  msgid "Severity"
967
1045
  msgstr "嚴重性"
968
1046
 
@@ -1005,6 +1083,9 @@ msgstr "顯示日誌訊息:"
1005
1083
  msgid "Smart Class Parameters"
1006
1084
  msgstr ""
1007
1085
 
1086
+ msgid "Snippet"
1087
+ msgstr ""
1088
+
1008
1089
  msgid "Something went wrong while selecting compliance reports - %s"
1009
1090
  msgstr "選擇合規報告時發生了錯誤 - %s"
1010
1091
 
@@ -1023,6 +1104,9 @@ msgstr "狀態表"
1023
1104
  msgid "Submit"
1024
1105
  msgstr "提交"
1025
1106
 
1107
+ msgid "Successfully copied to clipboard!"
1108
+ msgstr ""
1109
+
1026
1110
  msgid "Successfully deleted %s compliance reports"
1027
1111
  msgstr "刪除 %s 合規報告成功"
1028
1112
 
@@ -1085,9 +1169,15 @@ msgstr ""
1085
1169
  msgid "The identifier of the host"
1086
1170
  msgstr ""
1087
1171
 
1172
+ msgid "The job has started on selected host(s), you can check the status on the job details page."
1173
+ msgstr ""
1174
+
1088
1175
  msgid "There are significant differences in deployment options."
1089
1176
  msgstr ""
1090
1177
 
1178
+ msgid "There is no job to remediate with. Please remediate manually."
1179
+ msgstr ""
1180
+
1091
1181
  msgid "There was a following error when deleting %(name)s: %(error)s"
1092
1182
  msgstr ""
1093
1183
 
@@ -1210,6 +1300,9 @@ msgstr "檢視報告"
1210
1300
  msgid "View full report"
1211
1301
  msgstr "檢視完整報告"
1212
1302
 
1303
+ msgid "View selected hosts"
1304
+ msgstr ""
1305
+
1213
1306
  msgid "Was %s configured successfully?"
1214
1307
  msgstr ""
1215
1308
 
@@ -1240,6 +1333,9 @@ msgstr "是"
1240
1333
  msgid "You are not authorized to view the page. "
1241
1334
  msgstr ""
1242
1335
 
1336
+ msgid "You can remediate by running a remote job or you can display a snippet for manual remediation."
1337
+ msgstr ""
1338
+
1243
1339
  msgid "You can specify custom cron line, e.g. \"0 3 * * *\", separate each of 5 values by space"
1244
1340
  msgstr "您可指定自訂的 cron 行,例如\"0 3 * * *\",五個數值均由空格隔開"
1245
1341
 
@@ -56,8 +56,12 @@ EmptyStateIcon.defaultProps = {
56
56
 
57
57
  EmptyState.propTypes = {
58
58
  title: PropTypes.string,
59
- body: PropTypes.string,
60
- error: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.string]),
59
+ body: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
60
+ error: PropTypes.oneOfType([
61
+ PropTypes.shape({}),
62
+ PropTypes.string,
63
+ PropTypes.bool,
64
+ ]),
61
65
  search: PropTypes.bool,
62
66
  lock: PropTypes.bool,
63
67
  primaryButton: PropTypes.node,
@@ -0,0 +1,16 @@
1
+ import {
2
+ selectAPIError,
3
+ selectAPIResponse,
4
+ selectAPIStatus,
5
+ } from 'foremanReact/redux/API/APISelectors';
6
+ import { STATUS } from 'foremanReact/constants';
7
+ import { REPORT_LOG_REQUEST_KEY } from './constants';
8
+
9
+ export const selectLogResponse = state =>
10
+ selectAPIResponse(state, REPORT_LOG_REQUEST_KEY);
11
+
12
+ export const selectLogStatus = state =>
13
+ selectAPIStatus(state, REPORT_LOG_REQUEST_KEY) || STATUS.PENDING;
14
+
15
+ export const selectLogError = state =>
16
+ selectAPIError(state, REPORT_LOG_REQUEST_KEY);
@@ -0,0 +1,4 @@
1
+ import { createContext } from 'react';
2
+
3
+ const OpenscapRemediationWizardContext = createContext({});
4
+ export default OpenscapRemediationWizardContext;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ import { ExternalLinkSquareAltIcon } from '@patternfly/react-icons';
5
+ import { Button } from '@patternfly/react-core';
6
+
7
+ import { translate as __ } from 'foremanReact/common/I18n';
8
+ import { foremanUrl } from 'foremanReact/common/helpers';
9
+ import { getHostsPageUrl } from 'foremanReact/Root/Context/ForemanContext';
10
+
11
+ const ViewSelectedHostsLink = ({
12
+ hostIdsParam,
13
+ isAllHostsSelected,
14
+ defaultFailedHostsSearch,
15
+ }) => {
16
+ const search = isAllHostsSelected ? defaultFailedHostsSearch : hostIdsParam;
17
+ const url = foremanUrl(`${getHostsPageUrl(false)}?search=${search}`);
18
+ return (
19
+ <Button
20
+ component="a"
21
+ variant="link"
22
+ icon={<ExternalLinkSquareAltIcon />}
23
+ iconPosition="right"
24
+ target="_blank"
25
+ href={url}
26
+ >
27
+ {__('View selected hosts')}
28
+ </Button>
29
+ );
30
+ };
31
+
32
+ ViewSelectedHostsLink.propTypes = {
33
+ isAllHostsSelected: PropTypes.bool.isRequired,
34
+ defaultFailedHostsSearch: PropTypes.string.isRequired,
35
+ hostIdsParam: PropTypes.string.isRequired,
36
+ };
37
+
38
+ export default ViewSelectedHostsLink;
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {
4
+ Grid,
5
+ TextContent,
6
+ Text,
7
+ TextVariants,
8
+ Flex,
9
+ FlexItem,
10
+ } from '@patternfly/react-core';
11
+
12
+ const WizardHeader = ({ title, description }) => (
13
+ <Grid style={{ gridGap: '24px' }}>
14
+ {title && (
15
+ <TextContent>
16
+ <Text ouiaId="wizard-header-text" component={TextVariants.h2}>
17
+ {title}
18
+ </Text>
19
+ </TextContent>
20
+ )}
21
+ {description && (
22
+ <TextContent>
23
+ <Flex flex={{ default: 'inlineFlex' }}>
24
+ <FlexItem>
25
+ <TextContent>{description}</TextContent>
26
+ </FlexItem>
27
+ </Flex>
28
+ </TextContent>
29
+ )}
30
+ </Grid>
31
+ );
32
+
33
+ WizardHeader.propTypes = {
34
+ title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
35
+ description: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
36
+ };
37
+
38
+ WizardHeader.defaultProps = {
39
+ title: undefined,
40
+ description: undefined,
41
+ };
42
+
43
+ export default WizardHeader;
@@ -0,0 +1,14 @@
1
+ export const OPENSCAP_REMEDIATION_MODAL_ID = 'openscapRemediationModal';
2
+ export const HOSTS_PATH = '/hosts';
3
+ export const FAIL_RULE_SEARCH = 'fails_xccdf_rule';
4
+
5
+ export const HOSTS_API_PATH = '/api/hosts';
6
+ export const HOSTS_API_REQUEST_KEY = 'HOSTS';
7
+ export const REPORT_LOG_REQUEST_KEY = 'ARF_REPORT_LOG';
8
+
9
+ export const JOB_INVOCATION_PATH = '/job_invocations';
10
+ export const JOB_INVOCATION_API_PATH = '/api/job_invocations';
11
+ export const JOB_INVOCATION_API_REQUEST_KEY = 'OPENSCAP_REX_JOB_INVOCATIONS';
12
+
13
+ export const SNIPPET_SH = 'urn:xccdf:fix:script:sh';
14
+ export const SNIPPET_ANSIBLE = 'urn:xccdf:fix:script:ansible';
@@ -0,0 +1,33 @@
1
+ import { join, find, map, compact, includes, filter, isString } from 'lodash';
2
+
3
+ const getResponseErrorMsgs = ({ data } = {}) => {
4
+ if (data) {
5
+ const messages =
6
+ data.displayMessage || data.message || data.errors || data.error?.message;
7
+ return Array.isArray(messages) ? messages : [messages];
8
+ }
9
+ return [];
10
+ };
11
+
12
+ export const errorMsg = data => {
13
+ if (isString(data)) return data;
14
+
15
+ return join(getResponseErrorMsgs({ data }), '\n');
16
+ };
17
+
18
+ export const findFixBySnippet = (fixes, snippet) =>
19
+ find(fixes, fix => fix.system === snippet);
20
+
21
+ export const supportedRemediationSnippets = (
22
+ fixes,
23
+ meth,
24
+ supportedJobSnippets
25
+ ) => {
26
+ if (meth === 'manual') return map(fixes, f => f.system);
27
+ return compact(
28
+ map(
29
+ filter(fixes, fix => includes(supportedJobSnippets, fix.system)),
30
+ f => f.system
31
+ )
32
+ );
33
+ };