foreman_openscap 5.2.3 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_openscap/locale/cs_CZ/foreman_openscap.js +1302 -0
  3. data/app/assets/javascripts/foreman_openscap/locale/de/foreman_openscap.js +1302 -0
  4. data/app/assets/javascripts/foreman_openscap/locale/en/foreman_openscap.js +1302 -0
  5. data/app/assets/javascripts/foreman_openscap/locale/en_GB/foreman_openscap.js +1302 -0
  6. data/app/assets/javascripts/foreman_openscap/locale/es/foreman_openscap.js +1304 -0
  7. data/app/assets/javascripts/foreman_openscap/locale/fr/foreman_openscap.js +1304 -0
  8. data/app/assets/javascripts/foreman_openscap/locale/gl/foreman_openscap.js +1302 -0
  9. data/app/assets/javascripts/foreman_openscap/locale/it/foreman_openscap.js +1302 -0
  10. data/app/assets/javascripts/foreman_openscap/locale/ja/foreman_openscap.js +1300 -0
  11. data/app/assets/javascripts/foreman_openscap/locale/ko/foreman_openscap.js +1302 -0
  12. data/app/assets/javascripts/foreman_openscap/locale/pt_BR/foreman_openscap.js +1304 -0
  13. data/app/assets/javascripts/foreman_openscap/locale/ru/foreman_openscap.js +1302 -0
  14. data/app/assets/javascripts/foreman_openscap/locale/sv_SE/foreman_openscap.js +1302 -0
  15. data/app/assets/javascripts/foreman_openscap/locale/zh_CN/foreman_openscap.js +1300 -0
  16. data/app/assets/javascripts/foreman_openscap/locale/zh_TW/foreman_openscap.js +1302 -0
  17. data/app/controllers/concerns/foreman_openscap/hosts_and_hostgroups_controller_extensions.rb +1 -1
  18. data/app/helpers/compliance_hosts_helper.rb +2 -0
  19. data/app/services/foreman_openscap/client_config/ansible.rb +4 -1
  20. data/app/services/foreman_openscap/client_config/manual.rb +1 -1
  21. data/app/services/foreman_openscap/client_config/puppet.rb +4 -1
  22. data/app/services/foreman_openscap/oval/sync_oval_contents.rb +2 -2
  23. data/app/views/arf_reports/_list.html.erb +1 -1
  24. data/app/views/policies/_list.html.erb +3 -3
  25. data/app/views/scap_contents/_list.html.erb +3 -3
  26. data/app/views/tailoring_files/_list.html.erb +3 -3
  27. data/lib/foreman_openscap/bulk_upload.rb +7 -7
  28. data/lib/foreman_openscap/engine.rb +2 -7
  29. data/lib/foreman_openscap/version.rb +1 -1
  30. data/locale/Makefile +6 -3
  31. data/locale/cs_CZ/LC_MESSAGES/foreman_openscap.mo +0 -0
  32. data/locale/cs_CZ/foreman_openscap.edit.po +1735 -0
  33. data/locale/cs_CZ/foreman_openscap.po +1309 -0
  34. data/locale/cs_CZ/foreman_openscap.po.time_stamp +0 -0
  35. data/locale/de/foreman_openscap.edit.po +1745 -0
  36. data/locale/de/foreman_openscap.po +195 -0
  37. data/locale/de/foreman_openscap.po.time_stamp +0 -0
  38. data/locale/en/LC_MESSAGES/foreman_openscap.mo +0 -0
  39. data/locale/en/foreman_openscap.edit.po +1735 -0
  40. data/locale/en/foreman_openscap.po +1309 -0
  41. data/locale/en/foreman_openscap.po.time_stamp +0 -0
  42. data/locale/en_GB/foreman_openscap.edit.po +1735 -0
  43. data/locale/en_GB/foreman_openscap.po +195 -0
  44. data/locale/en_GB/foreman_openscap.po.time_stamp +0 -0
  45. data/locale/es/foreman_openscap.edit.po +1740 -0
  46. data/locale/es/foreman_openscap.po +195 -0
  47. data/locale/es/foreman_openscap.po.time_stamp +0 -0
  48. data/locale/foreman_openscap.pot +361 -49
  49. data/locale/fr/foreman_openscap.edit.po +1746 -0
  50. data/locale/fr/foreman_openscap.po +195 -0
  51. data/locale/fr/foreman_openscap.po.time_stamp +0 -0
  52. data/locale/gl/foreman_openscap.edit.po +1735 -0
  53. data/locale/gl/foreman_openscap.po +195 -0
  54. data/locale/gl/foreman_openscap.po.time_stamp +0 -0
  55. data/locale/it/foreman_openscap.edit.po +1737 -0
  56. data/locale/it/foreman_openscap.po +195 -0
  57. data/locale/it/foreman_openscap.po.time_stamp +0 -0
  58. data/locale/ja/foreman_openscap.edit.po +1741 -0
  59. data/locale/ja/foreman_openscap.po +195 -0
  60. data/locale/ja/foreman_openscap.po.time_stamp +0 -0
  61. data/locale/ko/foreman_openscap.edit.po +1735 -0
  62. data/locale/ko/foreman_openscap.po +195 -0
  63. data/locale/ko/foreman_openscap.po.time_stamp +0 -0
  64. data/locale/pt_BR/foreman_openscap.edit.po +1745 -0
  65. data/locale/pt_BR/foreman_openscap.po +195 -0
  66. data/locale/pt_BR/foreman_openscap.po.time_stamp +0 -0
  67. data/locale/ru/foreman_openscap.edit.po +1739 -0
  68. data/locale/ru/foreman_openscap.po +195 -0
  69. data/locale/ru/foreman_openscap.po.time_stamp +0 -0
  70. data/locale/sv_SE/foreman_openscap.edit.po +1735 -0
  71. data/locale/sv_SE/foreman_openscap.po +195 -0
  72. data/locale/sv_SE/foreman_openscap.po.time_stamp +0 -0
  73. data/locale/zh_CN/foreman_openscap.edit.po +1740 -0
  74. data/locale/zh_CN/foreman_openscap.po +195 -0
  75. data/locale/zh_CN/foreman_openscap.po.time_stamp +0 -0
  76. data/locale/zh_TW/foreman_openscap.edit.po +1736 -0
  77. data/locale/zh_TW/foreman_openscap.po +195 -0
  78. data/locale/zh_TW/foreman_openscap.po.time_stamp +0 -0
  79. data/package.json +7 -7
  80. data/webpack/components/HostExtentions/HostKebabItems.js +44 -0
  81. data/webpack/global_index.js +10 -1
  82. data/webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js +2 -2
  83. data/webpack/routes/OvalPolicies/OvalPoliciesNew/HostgroupSelect.js +1 -1
  84. data/webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyFormHelpers.js +3 -3
  85. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShowHelper.js +4 -4
  86. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.test.js +1 -1
  87. metadata +53 -3
@@ -32,6 +32,15 @@ msgid_plural "%s compliance reports by policy"
32
32
  msgstr[0] ""
33
33
  msgstr[1] ""
34
34
 
35
+ msgid "%s content"
36
+ msgstr ""
37
+
38
+ msgid "%s does not exist, skipping."
39
+ msgstr ""
40
+
41
+ msgid "%s is a directory, expecting file."
42
+ msgstr ""
43
+
35
44
  msgid "%s latest report"
36
45
  msgstr "%s 最新報告"
37
46
 
@@ -80,6 +89,9 @@ msgstr ""
80
89
  msgid "Are required variables for theforeman.foreman_scap_client present?"
81
90
  msgstr ""
82
91
 
92
+ msgid "Are you sure you want to delete %s?"
93
+ msgstr ""
94
+
83
95
  msgid "Array of host IDs"
84
96
  msgstr ""
85
97
 
@@ -101,6 +113,12 @@ msgstr ""
101
113
  msgid "Back"
102
114
  msgstr "上一頁"
103
115
 
116
+ msgid "CVEs"
117
+ msgstr ""
118
+
119
+ msgid "Can't find scap-security-guide RPM, are you sure it is installed on your server?"
120
+ msgstr ""
121
+
104
122
  msgid "Cancel"
105
123
  msgstr "取消"
106
124
 
@@ -122,6 +140,9 @@ msgstr ""
122
140
  msgid "Changed?"
123
141
  msgstr "已改變?"
124
142
 
143
+ msgid "Choose OVAL Content"
144
+ msgstr ""
145
+
125
146
  msgid "Choose Tailoring File"
126
147
  msgstr ""
127
148
 
@@ -164,6 +185,12 @@ msgstr "合規主機"
164
185
  msgid "Compliant with the policy"
165
186
  msgstr "合於政策"
166
187
 
188
+ msgid "Confirm"
189
+ msgstr ""
190
+
191
+ msgid "Content"
192
+ msgstr ""
193
+
167
194
  msgid "Could not find host identified by: %s"
168
195
  msgstr ""
169
196
 
@@ -176,6 +203,12 @@ msgstr ""
176
203
  msgid "Could not validate %{file_type}. Error %{error}"
177
204
  msgstr ""
178
205
 
206
+ msgid "Create OVAL Content"
207
+ msgstr ""
208
+
209
+ msgid "Create OVAL Policy"
210
+ msgstr ""
211
+
179
212
  msgid "Create OVAL content"
180
213
  msgstr ""
181
214
 
@@ -191,6 +224,12 @@ msgstr ""
191
224
  msgid "Create an OVAL Policy"
192
225
  msgstr ""
193
226
 
227
+ msgid "Created at"
228
+ msgstr ""
229
+
230
+ msgid "Custom cron: %s"
231
+ msgstr ""
232
+
194
233
  msgid "Dashboard"
195
234
  msgstr "控制面板"
196
235
 
@@ -206,6 +245,12 @@ msgstr "預設 XCCDF 設定檔"
206
245
  msgid "Delete"
207
246
  msgstr "刪除"
208
247
 
248
+ msgid "Delete OVAL Content"
249
+ msgstr ""
250
+
251
+ msgid "Delete OVAL Policy"
252
+ msgstr ""
253
+
209
254
  msgid "Delete a Policy"
210
255
  msgstr ""
211
256
 
@@ -248,6 +293,9 @@ msgstr ""
248
293
  msgid "Description"
249
294
  msgstr "說明"
250
295
 
296
+ msgid "Details"
297
+ msgstr ""
298
+
251
299
  msgid "Details for Compliance Policy %s"
252
300
  msgstr ""
253
301
 
@@ -287,6 +335,12 @@ msgstr ""
287
335
  msgid "Error!"
288
336
  msgstr ""
289
337
 
338
+ msgid "Every puppet run ensures the foreman_scap_client is configured according to the policy."
339
+ msgstr ""
340
+
341
+ msgid "Expected an array of files to upload, got: %s."
342
+ msgstr ""
343
+
290
344
  msgid "Failed"
291
345
  msgstr "已失敗"
292
346
 
@@ -296,6 +350,12 @@ msgstr "失敗與其它"
296
350
  msgid "Failed only"
297
351
  msgstr "只有失敗"
298
352
 
353
+ msgid "Failed saving %s:"
354
+ msgstr ""
355
+
356
+ msgid "Failed to create OVAL Policy: %s"
357
+ msgstr ""
358
+
299
359
  msgid "Failed to delete %s compliance reports"
300
360
  msgstr "刪除 %s 合規報告失敗"
301
361
 
@@ -308,6 +368,9 @@ msgstr ""
308
368
  msgid "Failed to downloaded ARF report in HTML: %s"
309
369
  msgstr ""
310
370
 
371
+ msgid "Failed to fetch content file from %s"
372
+ msgstr ""
373
+
311
374
  msgid "Failed to fetch spool status from proxy"
312
375
  msgstr ""
313
376
 
@@ -321,9 +384,15 @@ msgstr ""
321
384
  msgid "Failed|F"
322
385
  msgstr "F"
323
386
 
387
+ msgid "File"
388
+ msgstr ""
389
+
324
390
  msgid "File Upload"
325
391
  msgstr "檔案上傳"
326
392
 
393
+ msgid "File name"
394
+ msgstr ""
395
+
327
396
  msgid "File paths to upload when using \"files\" upload type"
328
397
  msgstr ""
329
398
 
@@ -472,6 +541,9 @@ msgstr "位置"
472
541
  msgid "Message"
473
542
  msgstr "訊息"
474
543
 
544
+ msgid "Monthly, day of month: %s"
545
+ msgstr ""
546
+
475
547
  msgid "More details"
476
548
  msgstr "更多詳細資訊"
477
549
 
@@ -484,6 +556,9 @@ msgstr "未曾稽核"
484
556
  msgid "New Compliance Policy"
485
557
  msgstr "新合規政策"
486
558
 
559
+ msgid "New OVAL Content"
560
+ msgstr ""
561
+
487
562
  msgid "New Policy"
488
563
  msgstr ""
489
564
 
@@ -505,6 +580,12 @@ msgstr "此政策沒有 ARF 報告"
505
580
  msgid "No CVEs found."
506
581
  msgstr ""
507
582
 
583
+ msgid "No Hostgroups found."
584
+ msgstr ""
585
+
586
+ msgid "No OVAL Content found"
587
+ msgstr ""
588
+
508
589
  msgid "No OVAL Contents found."
509
590
  msgstr ""
510
591
 
@@ -562,6 +643,9 @@ msgstr "此政策沒有報告"
562
643
  msgid "No reports available"
563
644
  msgstr "無報告可用"
564
645
 
646
+ msgid "No such directory: %s. Please check the path you have provided."
647
+ msgstr ""
648
+
565
649
  msgid "No valid policy ID provided"
566
650
  msgstr ""
567
651
 
@@ -571,6 +655,9 @@ msgstr "無"
571
655
  msgid "None found"
572
656
  msgstr "未找到"
573
657
 
658
+ msgid "None provided"
659
+ msgstr ""
660
+
574
661
  msgid "None!"
575
662
  msgstr "無!"
576
663
 
@@ -592,6 +679,24 @@ msgstr "月份中的日子,請注意並不是所有月份都有同樣的天數
592
679
  msgid "OVAL Content"
593
680
  msgstr ""
594
681
 
682
+ msgid "OVAL Content %s successfully created"
683
+ msgstr ""
684
+
685
+ msgid "OVAL Content Source"
686
+ msgstr ""
687
+
688
+ msgid "OVAL Content from URL"
689
+ msgstr ""
690
+
691
+ msgid "OVAL Content from file"
692
+ msgstr ""
693
+
694
+ msgid "OVAL Content is required to create OVAL Policy. Please create one before proceeding."
695
+ msgstr ""
696
+
697
+ msgid "OVAL Content successfully deleted."
698
+ msgstr ""
699
+
595
700
  msgid "OVAL Contents"
596
701
  msgstr ""
597
702
 
@@ -622,12 +727,24 @@ msgstr ""
622
727
  msgid "OVAL Policy schedule weekday (only if period == \"weekly\")"
623
728
  msgstr ""
624
729
 
730
+ msgid "OVAL Policy succesfully created."
731
+ msgstr ""
732
+
625
733
  msgid "OVAL content name"
626
734
  msgstr ""
627
735
 
736
+ msgid "OVAL policy"
737
+ msgstr ""
738
+
628
739
  msgid "OVAL policy successfully configured with %s."
629
740
  msgstr ""
630
741
 
742
+ msgid "OVAL policy was successfully deleted."
743
+ msgstr ""
744
+
745
+ msgid "OVAL policy was successfully updated."
746
+ msgstr ""
747
+
631
748
  msgid "OVAL scan"
632
749
  msgstr ""
633
750
 
@@ -646,6 +763,9 @@ msgstr ""
646
763
  msgid "Organizations"
647
764
  msgstr "組織"
648
765
 
766
+ msgid "Original File Name"
767
+ msgstr ""
768
+
649
769
  msgid "Original file name of the OVAL content file"
650
770
  msgstr ""
651
771
 
@@ -669,6 +789,12 @@ msgstr "已通過"
669
789
  msgid "Passed|P"
670
790
  msgstr "Passed|P"
671
791
 
792
+ msgid "Period"
793
+ msgstr ""
794
+
795
+ msgid "Permission denied"
796
+ msgstr ""
797
+
672
798
  msgid "Please Confirm"
673
799
  msgstr "請確認"
674
800
 
@@ -729,6 +855,9 @@ msgstr ""
729
855
  msgid "Policy with id %s not found."
730
856
  msgstr ""
731
857
 
858
+ msgid "Profile"
859
+ msgstr ""
860
+
732
861
  msgid "Proxy failed to send a report from spool to Foreman. This indicates a corrupted report format. Report has been moved to directory for storing corrupted files on proxy for later inspection."
733
862
  msgstr ""
734
863
 
@@ -738,6 +867,9 @@ msgstr "Puppet 類別"
738
867
  msgid "Rationale"
739
868
  msgstr "理由"
740
869
 
870
+ msgid "Red Hat %s default content"
871
+ msgstr ""
872
+
741
873
  msgid "Ref Id"
742
874
  msgstr ""
743
875
 
@@ -762,12 +894,21 @@ msgstr ""
762
894
  msgid "Reports"
763
895
  msgstr "報告"
764
896
 
897
+ msgid "Request the following permissions from administrator: %s."
898
+ msgstr ""
899
+
765
900
  msgid "Request timed out. Please try increasing Settings -> proxy_request_timeout"
766
901
  msgstr ""
767
902
 
768
903
  msgid "Required %{msg_name} %{class} was not found, please ensure it is imported first."
769
904
  msgstr ""
770
905
 
906
+ msgid "Requires %s Puppet class. This will assign the class to the hosts or selected hostgroups."
907
+ msgstr ""
908
+
909
+ msgid "Requires Ansible plugin, %s Ansible role and variables. This will assign the role to the hosts or selected hostgroups."
910
+ msgstr ""
911
+
771
912
  msgid "Resource"
772
913
  msgstr "資源"
773
914
 
@@ -834,6 +975,9 @@ msgstr ""
834
975
  msgid "Show a Tailoring file"
835
976
  msgstr ""
836
977
 
978
+ msgid "Show a policy's OVAL content"
979
+ msgstr ""
980
+
837
981
  msgid "Show a policy's SCAP content"
838
982
  msgstr "顯示政策的 SCAP 內容"
839
983
 
@@ -900,6 +1044,9 @@ msgstr ""
900
1044
  msgid "Table of CVEs for OVAL policy"
901
1045
  msgstr ""
902
1046
 
1047
+ msgid "Table of hostgroups for OVAL policy"
1048
+ msgstr ""
1049
+
903
1050
  msgid "Tailoring File"
904
1051
  msgstr ""
905
1052
 
@@ -915,6 +1062,9 @@ msgstr ""
915
1062
  msgid "Tailoring file profile ID"
916
1063
  msgstr ""
917
1064
 
1065
+ msgid "The %s proxy does not have Openscap feature enabled. Either set correct OpenSCAP Proxy or unset it."
1066
+ msgstr ""
1067
+
918
1068
  msgid ""
919
1069
  "The Security Content Automation Protocol (SCAP), combines a number of open standards that are used to enumerate software flaws and\n"
920
1070
  " configuration issues related to security. "
@@ -938,12 +1088,30 @@ msgstr ""
938
1088
  msgid "There are significant differences in deployment options."
939
1089
  msgstr ""
940
1090
 
1091
+ msgid "There was a following error when deleting %(name)s: %(error)s"
1092
+ msgstr ""
1093
+
1094
+ msgid "There was a following error when updating OVAL policy: %s"
1095
+ msgstr ""
1096
+
1097
+ msgid "There's no available report for this host"
1098
+ msgstr ""
1099
+
941
1100
  msgid "This feature is temporarily disabled. "
942
1101
  msgstr ""
943
1102
 
1103
+ msgid "This leaves the setup of the foreman_scap_client solely on the user. The policy still needs to be defined in order to link incoming ARF reports."
1104
+ msgstr ""
1105
+
944
1106
  msgid "This profile will be used to override the one from scap content"
945
1107
  msgstr ""
946
1108
 
1109
+ msgid "Title"
1110
+ msgstr ""
1111
+
1112
+ msgid "To deploy foreman_scap_client, ansible roles run needs to be triggered manually. Manual run is also required after any change to this policy."
1113
+ msgstr ""
1114
+
947
1115
  msgid "Total"
948
1116
  msgstr "總數"
949
1117
 
@@ -958,9 +1126,15 @@ msgid_plural "Total of %{hosts} hosts"
958
1126
  msgstr[0] ""
959
1127
  msgstr[1] ""
960
1128
 
1129
+ msgid "Type a hostgroup name..."
1130
+ msgstr ""
1131
+
961
1132
  msgid "Type of the upload"
962
1133
  msgstr ""
963
1134
 
1135
+ msgid "URL"
1136
+ msgstr ""
1137
+
964
1138
  msgid "URL of the OVAL content file"
965
1139
  msgstr ""
966
1140
 
@@ -979,6 +1153,12 @@ msgstr "未知的合規狀態"
979
1153
  msgid "Unknown OVAL status"
980
1154
  msgstr ""
981
1155
 
1156
+ msgid "Unknown error when submitting data, please try again later."
1157
+ msgstr ""
1158
+
1159
+ msgid "Unknown schedule"
1160
+ msgstr ""
1161
+
982
1162
  msgid "Update a Policy"
983
1163
  msgstr ""
984
1164
 
@@ -1036,6 +1216,9 @@ msgstr ""
1036
1216
  msgid "Was %{model_name} %{name} configured successfully?"
1037
1217
  msgstr ""
1038
1218
 
1219
+ msgid "Weekly, on %s"
1220
+ msgstr ""
1221
+
1039
1222
  msgid "XCCDF Profile"
1040
1223
  msgstr "XCCDF 設定檔"
1041
1224
 
@@ -1054,15 +1237,24 @@ msgstr ""
1054
1237
  msgid "Yes"
1055
1238
  msgstr "是"
1056
1239
 
1240
+ msgid "You are not authorized to view the page. "
1241
+ msgstr ""
1242
+
1057
1243
  msgid "You can specify custom cron line, e.g. \"0 3 * * *\", separate each of 5 values by space"
1058
1244
  msgstr "您可指定自訂的 cron 行,例如\"0 3 * * *\",五個數值均由空格隔開"
1059
1245
 
1060
1246
  msgid "You don't seem to have any ARF report. ARF report is a summary of a single scan occurrence on a particular host for a given Compliance Policy."
1061
1247
  msgstr ""
1062
1248
 
1249
+ msgid "can't be blank"
1250
+ msgstr ""
1251
+
1063
1252
  msgid "cannot assign to %s, all assigned policies must be deployed in the same way, check 'deploy by' for each assigned policy"
1064
1253
  msgstr ""
1065
1254
 
1255
+ msgid "cause: "
1256
+ msgstr ""
1257
+
1066
1258
  msgid "documentation"
1067
1259
  msgstr ""
1068
1260
 
@@ -1087,6 +1279,9 @@ msgstr "主機"
1087
1279
  msgid "invalid type %s"
1088
1280
  msgstr "無效的類型 %s"
1089
1281
 
1282
+ msgid "is not a valid cronline"
1283
+ msgstr ""
1284
+
1090
1285
  msgid "is not a valid value"
1091
1286
  msgstr ""
1092
1287
 
File without changes
data/package.json CHANGED
@@ -21,19 +21,19 @@
21
21
  "url": "https://projects.theforeman.org/projects/foreman_openscap/issues"
22
22
  },
23
23
  "peerDependencies": {
24
- "@theforeman/vendor": ">= 4.13.2"
24
+ "@theforeman/vendor": ">= 10.1.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@babel/core": "^7.7.0",
28
28
  "@testing-library/dom": "^8.9.1",
29
29
  "@testing-library/jest-dom": "^5.11.9",
30
30
  "@testing-library/user-event": "^13.2.1",
31
- "@theforeman/builder": "^8.4.1",
32
- "@theforeman/eslint-plugin-foreman": "8.4.1",
33
- "@theforeman/find-foreman": "^8.4.1",
34
- "@theforeman/stories": "^8.4.1",
35
- "@theforeman/test": "^8.9.0",
36
- "@theforeman/vendor-dev": "^8.4.1",
31
+ "@theforeman/builder": ">= 10.1.0",
32
+ "@theforeman/eslint-plugin-foreman": ">= 10.1.0",
33
+ "@theforeman/find-foreman": ">= 10.1.0",
34
+ "@theforeman/stories": ">= 10.1.0",
35
+ "@theforeman/test": ">= 10.1.0",
36
+ "@theforeman/vendor-dev": ">= 10.1.0",
37
37
  "babel-eslint": "^10.0.3",
38
38
  "eslint": "^6.7.2",
39
39
  "jed": "^1.1.1",
@@ -0,0 +1,44 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import { DropdownItem } from '@patternfly/react-core';
4
+ import { SecurityIcon } from '@patternfly/react-icons';
5
+ import { selectAPIResponse } from 'foremanReact/redux/API/APISelectors';
6
+ import { useAPI } from 'foremanReact/common/hooks/API/APIHooks';
7
+ import { translate as __ } from 'foremanReact/common/I18n';
8
+ import { HOST_DETAILS_KEY } from 'foremanReact/components/HostDetails/consts';
9
+ import { foremanUrl } from 'foremanReact/common/helpers';
10
+
11
+ const HostKebabItems = () => {
12
+ const { name, id } = useSelector(state =>
13
+ selectAPIResponse(state, HOST_DETAILS_KEY)
14
+ );
15
+
16
+ const ARFReportsAPIPath = name
17
+ ? `/api/v2/compliance/arf_reports?search=host+%3D+${name}`
18
+ : null;
19
+
20
+ const {
21
+ response: { results = [] },
22
+ } = useAPI('get', ARFReportsAPIPath);
23
+
24
+ const compliancePath = foremanUrl(`/compliance/hosts/${id}`);
25
+
26
+ const isDisabled = results.length === 0;
27
+
28
+ return (
29
+ <DropdownItem
30
+ ouiaId="compliance-dropdown-item"
31
+ key="compliance-report"
32
+ icon={<SecurityIcon />}
33
+ href={compliancePath}
34
+ target="_blank"
35
+ rel="noreferrer"
36
+ isAriaDisabled={isDisabled}
37
+ tooltip={isDisabled && __("There's no available report for this host")}
38
+ >
39
+ {__('Compliance')}
40
+ </DropdownItem>
41
+ );
42
+ };
43
+
44
+ export default HostKebabItems;
@@ -1,5 +1,14 @@
1
+ import React from 'react';
1
2
  import { registerRoutes } from 'foremanReact/routes/RoutingService';
2
-
3
+ import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
4
+ import HostKebabItems from './components/HostExtentions/HostKebabItems';
3
5
  import routes from './routes/routes';
4
6
 
5
7
  registerRoutes('foreman_openscap', routes);
8
+
9
+ addGlobalFill(
10
+ 'host-details-kebab',
11
+ `openscap-kebab-items`,
12
+ <HostKebabItems key="openscap-host-kebab" />,
13
+ 400
14
+ );
@@ -54,7 +54,7 @@ const OvalContentsNew = props => {
54
54
  {formProps => (
55
55
  <PfForm>
56
56
  <FormikField
57
- label="Name"
57
+ label={__('Name')}
58
58
  name="name"
59
59
  component={TextField}
60
60
  isRequired
@@ -89,7 +89,7 @@ const OvalContentsNew = props => {
89
89
  />
90
90
  </FormGroup>
91
91
  {!fileFromUrl ? (
92
- <FormGroup label="File" isRequired>
92
+ <FormGroup label={__('File')} isRequired>
93
93
  <FileUpload
94
94
  value={file}
95
95
  filename={file ? file.name : ''}
@@ -104,7 +104,7 @@ const HostgroupSelect = ({
104
104
  <Select
105
105
  variant={SelectVariant.typeaheadMulti}
106
106
  typeAheadAriaLabel="Select a hostgroup"
107
- placeholderText="Type a hostroup name..."
107
+ placeholderText={__('Type a hostgroup name...')}
108
108
  onToggle={() => setIsOpen(!isOpen)}
109
109
  onSelect={onSelect}
110
110
  onClear={onClear}
@@ -1,5 +1,5 @@
1
1
  import * as Yup from 'yup';
2
- import { translate as __ } from 'foremanReact/common/I18n';
2
+ import { translate as __, sprintf } from 'foremanReact/common/I18n';
3
3
 
4
4
  import { ovalPoliciesPath } from '../../../helpers/pathsHelper';
5
5
  import { decodeId, decodeModelId } from '../../../helpers/globalIdHelper';
@@ -51,7 +51,7 @@ export const onSubmit = (
51
51
  history.push(ovalPoliciesPath);
52
52
  showToast({
53
53
  type: 'success',
54
- message: 'OVAL Policy succesfully created.',
54
+ message: __('OVAL Policy succesfully created.'),
55
55
  });
56
56
  } else {
57
57
  actions.setSubmitting(false);
@@ -83,7 +83,7 @@ export const onSubmit = (
83
83
  const onError = response => {
84
84
  showToast({
85
85
  type: 'error',
86
- message: `Failed to create OVAL Policy: ${response.error}`,
86
+ message: sprintf(__('Failed to create OVAL Policy: %s'), response.error),
87
87
  });
88
88
  actions.setSubmitting(false);
89
89
  };
@@ -6,13 +6,13 @@ import { newJobPath } from '../../../helpers/pathsHelper';
6
6
  export const policySchedule = policy => {
7
7
  switch (policy.period) {
8
8
  case 'weekly':
9
- return `Weekly, on ${policy.weekday}`;
9
+ return sprintf(__('Weekly, on %s'), policy.weekday);
10
10
  case 'monthly':
11
- return `Monthly, day of month: ${policy.dayOfMonth}`;
11
+ return sprintf(__('Monthly, day of month: %s'), policy.dayOfMonth);
12
12
  case 'custom':
13
- return `Custom cron: ${policy.cronLine}`;
13
+ return sprintf(__('Custom cron: %s'), policy.cronLine);
14
14
  default:
15
- return 'Unknown schedule';
15
+ return __('Unknown schedule');
16
16
  }
17
17
  };
18
18
 
@@ -53,7 +53,7 @@ describe('OvalPoliciesShow', () => {
53
53
  '.pf-c-tabs__item.pf-m-current'
54
54
  );
55
55
  expect(within(activeTabHeader).getByText('Details')).toBeInTheDocument();
56
- userEvent.click(screen.getByRole('button', { name: 'CVEs' }));
56
+ userEvent.click(screen.getByRole('tab', { name: 'CVEs' }));
57
57
  expect(pushMock).toHaveBeenCalledWith(
58
58
  resolvePath(ovalPoliciesShowPath, {
59
59
  ':id': ovalPolicyId,