watobo 0.9.21 → 0.9.23

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 (283) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +46 -1
  3. data/bin/nfq_server.rb +0 -9
  4. data/bin/watobo_gui.rb +3 -13
  5. data/custom-views/prettify-json.rb +9 -18
  6. data/icons/watobo.ico +0 -0
  7. data/icons/watobo.ico.old +0 -0
  8. data/lib/watobo.rb +10 -19
  9. data/lib/watobo/adapters.rb +5 -14
  10. data/lib/watobo/adapters/data_store.rb +50 -59
  11. data/lib/watobo/adapters/file/file_store.rb +287 -296
  12. data/lib/watobo/adapters/file/marshal_store.rb +293 -296
  13. data/lib/watobo/adapters/session_store.rb +5 -14
  14. data/lib/watobo/ca.rb +1 -10
  15. data/lib/watobo/config.rb +197 -206
  16. data/lib/watobo/constants.rb +0 -9
  17. data/lib/watobo/core.rb +3 -12
  18. data/lib/watobo/core/active_check.rb +72 -135
  19. data/lib/watobo/core/active_checks.rb +49 -58
  20. data/lib/watobo/core/ca.rb +369 -389
  21. data/lib/watobo/core/cert_store.rb +34 -43
  22. data/lib/watobo/core/chat.rb +92 -101
  23. data/lib/watobo/core/chats.rb +271 -280
  24. data/lib/watobo/core/client_cert_store.rb +106 -35
  25. data/lib/watobo/core/conversation.rb +48 -57
  26. data/lib/watobo/core/cookie.rb +23 -32
  27. data/lib/watobo/core/egress_handlers.rb +98 -0
  28. data/lib/watobo/core/finding.rb +66 -75
  29. data/lib/watobo/core/findings.rb +107 -114
  30. data/lib/watobo/core/forwarding_proxy.rb +13 -22
  31. data/lib/watobo/core/fuzz_gen.rb +0 -9
  32. data/lib/watobo/core/intercept_carver.rb +166 -177
  33. data/lib/watobo/core/intercept_filter.rb +235 -244
  34. data/lib/watobo/core/interceptor.rb +98 -107
  35. data/lib/watobo/core/min_class.rb +4 -13
  36. data/lib/watobo/core/netfilter_queue.rb +170 -179
  37. data/lib/watobo/core/ott_cache.rb +132 -141
  38. data/lib/watobo/core/parameter.rb +43 -52
  39. data/lib/watobo/core/passive_check.rb +103 -102
  40. data/lib/watobo/core/passive_checks.rb +48 -57
  41. data/lib/watobo/core/passive_scanner.rb +54 -55
  42. data/lib/watobo/core/plugin.rb +11 -20
  43. data/lib/watobo/core/project.rb +3 -9
  44. data/lib/watobo/core/proxy.rb +43 -52
  45. data/lib/watobo/core/request.rb +125 -123
  46. data/lib/watobo/core/response.rb +44 -53
  47. data/lib/watobo/core/scanner.rb +0 -9
  48. data/lib/watobo/core/scanner3.rb +405 -414
  49. data/lib/watobo/core/scope.rb +83 -92
  50. data/lib/watobo/core/session.rb +1043 -1026
  51. data/lib/watobo/core/sid_cache.rb +98 -107
  52. data/lib/watobo/core/subscriber.rb +25 -34
  53. data/lib/watobo/defaults.rb +21 -30
  54. data/lib/watobo/external/diff/lcs.rb +0 -9
  55. data/lib/watobo/external/diff/lcs/array.rb +0 -9
  56. data/lib/watobo/external/diff/lcs/block.rb +0 -9
  57. data/lib/watobo/external/diff/lcs/callbacks.rb +0 -9
  58. data/lib/watobo/external/diff/lcs/change.rb +0 -9
  59. data/lib/watobo/external/diff/lcs/hunk.rb +0 -9
  60. data/lib/watobo/external/diff/lcs/ldiff.rb +0 -9
  61. data/lib/watobo/external/diff/lcs/string.rb +0 -9
  62. data/lib/watobo/externals.rb +6 -15
  63. data/lib/watobo/framework.rb +4 -13
  64. data/lib/watobo/framework/create_project.rb +60 -69
  65. data/lib/watobo/framework/init.rb +0 -9
  66. data/lib/watobo/framework/init_modules.rb +0 -9
  67. data/lib/watobo/framework/license_text.rb +28 -37
  68. data/lib/watobo/framework/load_chat.rb +13 -22
  69. data/lib/watobo/gui.rb +132 -123
  70. data/lib/watobo/gui/about_watobo.rb +0 -9
  71. data/lib/watobo/gui/browser_preview.rb +0 -9
  72. data/lib/watobo/gui/certificate_dialog.rb +0 -9
  73. data/lib/watobo/gui/chat_diff.rb +0 -9
  74. data/lib/watobo/gui/chatviewer_frame.rb +73 -72
  75. data/lib/watobo/gui/checkboxtree.rb +0 -9
  76. data/lib/watobo/gui/checks_policy_frame.rb +0 -9
  77. data/lib/watobo/gui/client_cert_dialog.rb +96 -87
  78. data/lib/watobo/gui/confirm_scan_dialog.rb +0 -9
  79. data/lib/watobo/gui/conversation_table.rb +158 -164
  80. data/lib/watobo/gui/conversation_table_ctrl.rb +207 -216
  81. data/lib/watobo/gui/conversation_table_ctrl2.rb +373 -382
  82. data/lib/watobo/gui/csrf_token_dialog.rb +0 -9
  83. data/lib/watobo/gui/custom_viewer.rb +374 -383
  84. data/lib/watobo/gui/dashboard.rb +296 -303
  85. data/lib/watobo/gui/define_scope_frame.rb +0 -9
  86. data/lib/watobo/gui/differ_frame.rb +215 -224
  87. data/lib/watobo/gui/edit_comment.rb +0 -9
  88. data/lib/watobo/gui/edit_scope_dialog.rb +0 -9
  89. data/lib/watobo/gui/export_dialog.rb +104 -113
  90. data/lib/watobo/gui/finding_info.rb +0 -9
  91. data/lib/watobo/gui/findings_tree.rb +210 -217
  92. data/lib/watobo/gui/full_scan_dialog.rb +0 -9
  93. data/lib/watobo/gui/fuzzer_gui.rb +1295 -1313
  94. data/lib/watobo/gui/fxsave_thread.rb +14 -0
  95. data/lib/watobo/gui/goto_url_dialog.rb +70 -79
  96. data/lib/watobo/gui/hex_viewer.rb +0 -9
  97. data/lib/watobo/gui/html_viewer.rb +287 -296
  98. data/lib/watobo/gui/intercept_filter_dialog.rb +188 -197
  99. data/lib/watobo/gui/interceptor_gui.rb +1041 -1051
  100. data/lib/watobo/gui/interceptor_settings_dialog.rb +0 -9
  101. data/lib/watobo/gui/json_viewer.rb +287 -0
  102. data/lib/watobo/gui/list_box.rb +101 -110
  103. data/lib/watobo/gui/log_file_viewer.rb +32 -41
  104. data/lib/watobo/gui/log_viewer.rb +83 -88
  105. data/lib/watobo/gui/login_wizzard.rb +0 -9
  106. data/lib/watobo/gui/main_window.rb +587 -618
  107. data/lib/watobo/gui/manual_request_editor.rb +620 -565
  108. data/lib/watobo/gui/master_pw_dialog.rb +0 -9
  109. data/lib/watobo/gui/mixins/gui_settings.rb +29 -38
  110. data/lib/watobo/gui/page_tree.rb +217 -226
  111. data/lib/watobo/gui/password_policy_dialog.rb +0 -9
  112. data/lib/watobo/gui/plugin_board.rb +0 -9
  113. data/lib/watobo/gui/preferences_dialog.rb +0 -9
  114. data/lib/watobo/gui/progress_window.rb +17 -27
  115. data/lib/watobo/gui/project_wizzard.rb +0 -9
  116. data/lib/watobo/gui/proxy_dialog.rb +1 -10
  117. data/lib/watobo/gui/quick_scan_dialog.rb +0 -9
  118. data/lib/watobo/gui/request_builder_frame.rb +102 -111
  119. data/lib/watobo/gui/request_editor.rb +181 -137
  120. data/lib/watobo/gui/rewrite_filters_dialog.rb +394 -403
  121. data/lib/watobo/gui/rewrite_rules_dialog.rb +372 -381
  122. data/lib/watobo/gui/save_chat_dialog.rb +140 -149
  123. data/lib/watobo/gui/scanner_settings_dialog.rb +0 -9
  124. data/lib/watobo/gui/select_chat_dialog.rb +0 -9
  125. data/lib/watobo/gui/session_management_dialog.rb +0 -9
  126. data/lib/watobo/gui/sites_tree.rb +0 -9
  127. data/lib/watobo/gui/status_bar.rb +0 -9
  128. data/lib/watobo/gui/table_editor.rb +0 -9
  129. data/lib/watobo/gui/tagless_viewer.rb +0 -9
  130. data/lib/watobo/gui/templates/plugin.rb +0 -9
  131. data/lib/watobo/gui/templates/plugin2.rb +92 -100
  132. data/lib/watobo/gui/templates/plugin_base.rb +144 -153
  133. data/lib/watobo/gui/text_viewer.rb +0 -9
  134. data/lib/watobo/gui/transcoder_window.rb +0 -9
  135. data/lib/watobo/gui/utils/gui_utils.rb +0 -9
  136. data/lib/watobo/gui/utils/init_icons.rb +86 -95
  137. data/lib/watobo/gui/utils/load_icons.rb +33 -42
  138. data/lib/watobo/gui/utils/load_plugins.rb +116 -119
  139. data/lib/watobo/gui/utils/master_password.rb +68 -77
  140. data/lib/watobo/gui/utils/save_default_settings.rb +113 -122
  141. data/lib/watobo/gui/utils/save_project_settings.rb +0 -9
  142. data/lib/watobo/gui/utils/save_proxy_settings.rb +41 -50
  143. data/lib/watobo/gui/utils/save_scanner_settings.rb +18 -27
  144. data/lib/watobo/gui/utils/session_history.rb +112 -121
  145. data/lib/watobo/gui/workspace_dialog.rb +0 -9
  146. data/lib/watobo/gui/www_auth_dialog.rb +0 -9
  147. data/lib/watobo/gui/xml_viewer_frame.rb +0 -9
  148. data/lib/watobo/http.rb +4 -13
  149. data/lib/watobo/http/cookies/cookies.rb +26 -35
  150. data/lib/watobo/http/data/data.rb +45 -54
  151. data/lib/watobo/http/data/json.rb +47 -55
  152. data/lib/watobo/http/url/url.rb +38 -47
  153. data/lib/watobo/http/xml/xml.rb +124 -130
  154. data/lib/watobo/interceptor.rb +3 -12
  155. data/lib/watobo/interceptor/proxy.rb +742 -739
  156. data/lib/watobo/interceptor/transparent.rb +22 -24
  157. data/lib/watobo/mixins.rb +10 -19
  158. data/lib/watobo/mixins/check_info.rb +27 -36
  159. data/lib/watobo/mixins/httpparser.rb +613 -637
  160. data/lib/watobo/mixins/request_parser.rb +88 -97
  161. data/lib/watobo/mixins/shapers.rb +515 -529
  162. data/lib/watobo/mixins/transcoders.rb +3 -11
  163. data/lib/watobo/parser.rb +1 -10
  164. data/lib/watobo/parser/html.rb +83 -92
  165. data/lib/watobo/patch_fxruby_setfocus.rb +26 -0
  166. data/lib/watobo/sockets.rb +3 -12
  167. data/lib/watobo/sockets/agent.rb +828 -837
  168. data/lib/watobo/sockets/client_socket.rb +308 -312
  169. data/lib/watobo/sockets/connection.rb +401 -410
  170. data/lib/watobo/sockets/http_socket.rb +11 -13
  171. data/lib/watobo/sockets/ntlm_auth.rb +129 -138
  172. data/lib/watobo/utils.rb +10 -19
  173. data/lib/watobo/utils/check_regex.rb +0 -9
  174. data/lib/watobo/utils/copy_object.rb +0 -9
  175. data/lib/watobo/utils/crypto.rb +0 -9
  176. data/lib/watobo/utils/expand_range.rb +23 -32
  177. data/lib/watobo/utils/export_xml.rb +97 -106
  178. data/lib/watobo/utils/file_management.rb +9 -11
  179. data/lib/watobo/utils/hexprint.rb +9 -18
  180. data/lib/watobo/utils/load_chat.rb +0 -9
  181. data/lib/watobo/utils/load_icon.rb +0 -9
  182. data/lib/watobo/utils/ntlm.rb +866 -875
  183. data/lib/watobo/utils/print_debug.rb +12 -21
  184. data/lib/watobo/utils/response_builder.rb +90 -99
  185. data/lib/watobo/utils/response_hash.rb +0 -9
  186. data/lib/watobo/utils/secure_eval.rb +0 -9
  187. data/lib/watobo/utils/strings.rb +10 -19
  188. data/lib/watobo/utils/text2request.rb +0 -9
  189. data/lib/watobo/utils/url.rb +23 -32
  190. data/lib/watobo/utils/utf16.rb +11 -20
  191. data/modules/active/Apache/mod_status.rb +0 -9
  192. data/modules/active/Apache/multiview.rb +151 -160
  193. data/modules/active/Flash/crossdomain.rb +0 -9
  194. data/modules/active/JWT/jwt_oauth2_none.rb +111 -0
  195. data/modules/active/cq5/cq5_default_selectors.rb +106 -115
  196. data/modules/active/cq5/cqp_user_enumeration.rb +125 -134
  197. data/modules/active/directories/dirwalker.rb +0 -9
  198. data/modules/active/discovery/fileextensions.rb +0 -9
  199. data/modules/active/discovery/http_methods.rb +0 -9
  200. data/modules/active/discovery/jsmapfiles.rb +79 -0
  201. data/modules/active/domino/domino_db.rb +68 -76
  202. data/modules/active/dotNET/custom_errors.rb +102 -111
  203. data/modules/active/dotNET/dotnet_files.rb +90 -99
  204. data/modules/active/fileinclusion/lfi_simple.rb +0 -9
  205. data/modules/active/jboss/jboss_basic.rb +0 -9
  206. data/modules/active/sap/business_objects.rb +51 -60
  207. data/modules/active/sap/its_commands.rb +0 -9
  208. data/modules/active/sap/its_service_parameter.rb +0 -9
  209. data/modules/active/sap/its_services.rb +0 -9
  210. data/modules/active/sap/its_xss.rb +0 -9
  211. data/modules/active/shell_shock/shell_shock.rb +139 -148
  212. data/modules/active/siebel/siebel_apps.rb +160 -169
  213. data/modules/active/sqlinjection/sql_boolean.rb +0 -9
  214. data/modules/active/sqlinjection/sql_numerical.rb +198 -0
  215. data/modules/active/sqlinjection/sqli_error.rb +0 -9
  216. data/modules/active/sqlinjection/sqli_timing.rb +220 -229
  217. data/modules/active/struts2/default_handler_ognl.rb +106 -115
  218. data/modules/active/struts2/include_params_ognl.rb +105 -114
  219. data/modules/active/xml/xml_xxe.rb +112 -123
  220. data/modules/active/xss/xss_ng.rb +214 -223
  221. data/modules/active/xss/xss_simple.rb +0 -9
  222. data/modules/passive/ajax.rb +68 -77
  223. data/modules/passive/autocomplete.rb +56 -65
  224. data/modules/passive/cookie_options.rb +0 -9
  225. data/modules/passive/cookie_xss.rb +0 -9
  226. data/modules/passive/detect_code.rb +0 -9
  227. data/modules/passive/detect_fileupload.rb +0 -9
  228. data/modules/passive/detect_infrastructure.rb +0 -9
  229. data/modules/passive/detect_one_time_tokens.rb +0 -9
  230. data/modules/passive/dirindexing.rb +0 -9
  231. data/modules/passive/disclosure_domino.rb +55 -64
  232. data/modules/passive/disclosure_emails.rb +0 -9
  233. data/modules/passive/disclosure_ipaddr.rb +55 -53
  234. data/modules/passive/filename_as_parameter.rb +0 -9
  235. data/modules/passive/form_spotter.rb +0 -9
  236. data/modules/passive/hidden_fields.rb +50 -59
  237. data/modules/passive/hotspots.rb +0 -9
  238. data/modules/passive/in_script_parameter.rb +0 -9
  239. data/modules/passive/json_web_token.rb +93 -0
  240. data/modules/passive/multiple_server_headers.rb +0 -9
  241. data/modules/passive/possible_login.rb +0 -9
  242. data/modules/passive/redirect_url.rb +0 -9
  243. data/modules/passive/redirectionz.rb +0 -9
  244. data/modules/passive/sap-headers.rb +56 -65
  245. data/modules/passive/xss_dom.rb +0 -9
  246. data/plugins/aem/aem.rb +11 -20
  247. data/plugins/aem/gui/main.rb +118 -127
  248. data/plugins/aem/gui/tree_view.rb +171 -180
  249. data/plugins/aem/lib/agent.rb +130 -138
  250. data/plugins/aem/lib/dispatcher.rb +45 -51
  251. data/plugins/aem/lib/engine.rb +177 -186
  252. data/plugins/catalog/catalog.rb +345 -355
  253. data/plugins/crawler/crawler.rb +4 -13
  254. data/plugins/crawler/gui.rb +5 -14
  255. data/plugins/crawler/gui/auth_frame.rb +270 -279
  256. data/plugins/crawler/gui/crawler_gui.rb +271 -276
  257. data/plugins/crawler/gui/general_settings_frame.rb +96 -105
  258. data/plugins/crawler/gui/hooks_frame.rb +80 -89
  259. data/plugins/crawler/gui/scope_frame.rb +50 -59
  260. data/plugins/crawler/gui/settings_tabbook.rb +38 -47
  261. data/plugins/crawler/gui/status_frame.rb +59 -68
  262. data/plugins/crawler/lib/bags.rb +18 -27
  263. data/plugins/crawler/lib/constants.rb +11 -20
  264. data/plugins/crawler/lib/engine.rb +488 -497
  265. data/plugins/crawler/lib/grabber.rb +68 -77
  266. data/plugins/crawler/lib/status.rb +71 -80
  267. data/plugins/crawler/lib/uri_mp.rb +12 -21
  268. data/plugins/filefinder/filefinder.rb +326 -333
  269. data/plugins/sqlmap/bin/test.rb +78 -87
  270. data/plugins/sqlmap/gui.rb +4 -13
  271. data/plugins/sqlmap/gui/main.rb +218 -227
  272. data/plugins/sqlmap/gui/options_frame.rb +97 -106
  273. data/plugins/sqlmap/lib/sqlmap_ctrl.rb +90 -100
  274. data/plugins/sqlmap/sqlmap.rb +2 -11
  275. data/plugins/sslchecker/cli/sslchecker_cli.rb +0 -9
  276. data/plugins/sslchecker/gui/cipher_table.rb +246 -254
  277. data/plugins/sslchecker/gui/gui.rb +258 -264
  278. data/plugins/sslchecker/gui/sslchecker.rb +4 -13
  279. data/plugins/sslchecker/lib/check.rb +127 -133
  280. data/plugins/wshell/gui/main.rb +119 -117
  281. data/plugins/wshell/lib/core.rb +38 -88
  282. data/plugins/wshell/wshell.rb +11 -20
  283. metadata +170 -164
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e79414053ae38bea886b65d60a350e8ac62258d8
4
+ data.tar.gz: 437d2cc8cd2bba344f17d8099e618366385842eb
5
+ SHA512:
6
+ metadata.gz: 43e8ed6af9219845fd1c1a1da5f37be56e845c408e699054a5b45db5afa48352b660d0e9023ed70252d956331811184a1cd1c297cd7dc58320153d424aba46d6
7
+ data.tar.gz: 93bd513d65ab88646cf9801c094dde4fc2fe84ce488f3306d2414ec05f2566daf9d1e2bce7e5052da11fd4a835946211803e70e3ba4b558306e1a8b4b4b8591b
@@ -1,3 +1,48 @@
1
+ #Version 0.9.22
2
+
3
+ ## News
4
+
5
+ **ManualRequestEditor**
6
+
7
+ * added dynamic egress handler support. Useful for more complex request transformations, e.g. if you need a http header with a hmac which is based on the request body
8
+
9
+ **SSL-Checker**
10
+
11
+ * the results can now be saved
12
+ * bad ciphers will be added to findings
13
+
14
+ ##Fixes
15
+
16
+ **Proxy**
17
+
18
+ * fixed duplicated serial numbers in fake certificates
19
+
20
+ **WShell**
21
+
22
+ * fixed a bug which prevented work on linux boxes
23
+ * switched command execution to thread via runOnUiThread
24
+
25
+ **Client-Certificates**
26
+
27
+ * settings will be saved and reloaded on project start
28
+
29
+ **Transparent Proxy**
30
+
31
+ * crash fixed
32
+
33
+ **SQLMap Plugin**
34
+
35
+ * fixed load_config error
36
+
37
+ **General**
38
+
39
+ * fixed old yaml style file format after editing comments
40
+
41
+ **Contributions**
42
+ * Work around error 'FXComposeContext: illegal window parameter' (by Lars Kanis)
43
+ * Use runOnUiThread for GUI activity while loading plugins in a thread (by Lars Kanis)
44
+
45
+
1
46
  Version 0.9.21
2
47
  ===
3
48
 
@@ -15,7 +60,7 @@ News
15
60
 
16
61
  **Plugins**
17
62
 
18
- * added Adobe Experience Manager Enumeration, crawles the site by using information of AEM/CQ5 json-Extensions
63
+ * added Adobe Experience Manager Enumeration, crawls the site by using information of AEM/CQ5 json-Extensions
19
64
 
20
65
  **Fuzzer**
21
66
 
@@ -1,13 +1,4 @@
1
1
  #!/usr/bin/ruby
2
- #.
3
- # nfq_server.rb
4
- #.
5
- # Copyright 2014 by siberas, http://www.siberas.de
6
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
7
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
8
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
10
-
11
2
  require 'drb'
12
3
  require 'yaml'
13
4
  require 'openssl'
@@ -1,16 +1,7 @@
1
1
  #!/usr/bin/ruby
2
- #.
3
- # watobo_gui.rb
4
- #.
5
- # Copyright 2014 by siberas, http://www.siberas.de
6
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
7
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
8
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
10
-
11
2
  if $0 == __FILE__
12
3
  inc_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")) # this is the same as rubygems would do
13
- $: << inc_path
4
+ $: << inc_path
14
5
  end
15
6
 
16
7
  puts "#############################################################"
@@ -22,10 +13,9 @@ puts
22
13
  puts "#############################################################"
23
14
 
24
15
  require 'watobo'
16
+ require 'watobo/gui'
25
17
 
26
- Watobo.print_summary
18
+ puts Watobo::Gui.info
27
19
 
28
20
  puts ">> Starting GUI ..."
29
- require 'watobo/gui'
30
-
31
21
  Watobo::Gui.start
@@ -1,19 +1,10 @@
1
- #.
2
- # prettify-json.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
9
-
10
- lambda{|response|
11
- begin
12
- jb = JSON.parse(response.body.to_s)
13
- out = JSON.pretty_generate jb
14
- rescue => bang
15
- out = "Could prettify response :(\n\n"
16
- out << bang.to_s
17
- end
18
- out
1
+ lambda{|response|
2
+ begin
3
+ jb = JSON.parse(response.body.to_s)
4
+ out = JSON.pretty_generate jb
5
+ rescue => bang
6
+ out = "Could prettify response :(\n\n"
7
+ out << bang.to_s
8
+ end
9
+ out
19
10
  }
Binary file
Binary file
@@ -1,15 +1,13 @@
1
1
  #!/usr/bin/ruby
2
- #.
3
- # watobo.rb
4
- #.
5
- # Copyright 2014 by siberas, http://www.siberas.de
6
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
7
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
8
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
10
-
11
2
  #Encoding: UTF-8
12
3
  require 'rubygems'
4
+ begin
5
+ require 'bundler/setup'
6
+ rescue LoadError
7
+ puts "You will need bundler to run watobo!"
8
+ puts "please run\n gem install bundler\n bundle install\n"
9
+ exit
10
+ end
13
11
  require 'yaml'
14
12
  require 'json'
15
13
  require 'thread'
@@ -31,6 +29,7 @@ require 'drb'
31
29
  require 'nokogiri'
32
30
  require 'stringio'
33
31
  require 'mechanize'
32
+ require 'jwt'
34
33
 
35
34
  require 'watobo/constants'
36
35
  require 'watobo/utils'
@@ -52,7 +51,7 @@ dont_know_why_REQUIRE_hangs = Mechanize.new
52
51
  # @private
53
52
  module Watobo#:nodoc: all #:nodoc: all
54
53
 
55
- VERSION = "0.9.21"
54
+ VERSION = "0.9.23"
56
55
 
57
56
  def self.base_directory
58
57
  @base_directory ||= ""
@@ -78,15 +77,7 @@ module Watobo#:nodoc: all #:nodoc: all
78
77
  Watobo::VERSION
79
78
  end
80
79
 
81
- def self.print_summary
82
- puts "--- Info ---"
83
- puts "Version: " + version
84
- puts "Working Directory: " + Watobo.working_directory
85
- puts "Active Checks Location: " + Watobo.active_module_path
86
- puts "Passive Checks Location: " + Watobo.passive_module_path
87
- puts "---"
88
- puts
89
- end
80
+
90
81
  end
91
82
 
92
83
  Watobo.init_framework
@@ -1,15 +1,6 @@
1
- #.
2
- # adapters.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1
+ %w( data_store session_store ).each do |lib|
2
+ require "watobo/adapters/#{lib}"
3
+ end
9
4
 
10
- %w( data_store session_store ).each do |lib|
11
- require "watobo/adapters/#{lib}"
12
- end
13
-
14
- #require "watobo/adapters/file/file_store"
15
- require "watobo/adapters/file/marshal_store"
5
+ #require "watobo/adapters/file/file_store"
6
+ require "watobo/adapters/file/marshal_store"
@@ -1,20 +1,11 @@
1
- #.
2
- # data_store.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
9
-
10
1
  # @private
11
- module Watobo#:nodoc: all
12
- class DataStore
13
-
14
- @engine = nil
15
-
16
- def self.engine
17
- @engine
2
+ module Watobo#:nodoc: all
3
+ class DataStore
4
+
5
+ @engine = nil
6
+
7
+ def self.engine
8
+ @engine
18
9
  end
19
10
 
20
11
  def self.projects(&block)
@@ -37,47 +28,47 @@ module Watobo#:nodoc: all
37
28
  ss << sname
38
29
  end
39
30
  ss
40
- end
41
-
42
- def self.connect(project_name, session_name)
43
- a = Watobo::Conf::Datastore.adapter
44
- store = case
45
- when 'file'
46
- FileSessionStore.new(project_name, session_name)
47
- else
48
- nil
49
- end
50
- @engine = store
51
- store
52
- end
53
-
54
- def self.method_missing(name, *args, &block)
55
- super unless @engine.respond_to? name
56
- @engine.send name, *args, &block
57
- end
58
-
59
-
60
- end
61
-
62
- def self.logs
63
- return "" if DataStore.engine.nil?
64
- DataStore.engine.logs
65
- end
66
-
67
- def self.log(message, prefs={})
68
-
69
- text = message
70
- if message.is_a? Array
71
- text = message.join("\n| ")
72
- end
73
-
74
- #clean up sender's name
75
- if prefs.has_key? :sender
76
- prefs[:sender].gsub!(/.*::/,'')
77
- end
78
-
79
- if DataStore.engine.respond_to? :logger
80
- DataStore.engine.logger message, prefs
81
- end
82
- end
31
+ end
32
+
33
+ def self.connect(project_name, session_name)
34
+ a = Watobo::Conf::Datastore.adapter
35
+ store = case
36
+ when 'file'
37
+ FileSessionStore.new(project_name, session_name)
38
+ else
39
+ nil
40
+ end
41
+ @engine = store
42
+ store
43
+ end
44
+
45
+ def self.method_missing(name, *args, &block)
46
+ super unless @engine.respond_to? name
47
+ @engine.send name, *args, &block
48
+ end
49
+
50
+
51
+ end
52
+
53
+ def self.logs
54
+ return "" if DataStore.engine.nil?
55
+ DataStore.engine.logs
56
+ end
57
+
58
+ def self.log(message, prefs={})
59
+
60
+ text = message
61
+ if message.is_a? Array
62
+ text = message.join("\n| ")
63
+ end
64
+
65
+ #clean up sender's name
66
+ if prefs.has_key? :sender
67
+ prefs[:sender].gsub!(/.*::/,'')
68
+ end
69
+
70
+ if DataStore.engine.respond_to? :logger
71
+ DataStore.engine.logger message, prefs
72
+ end
73
+ end
83
74
  end
@@ -1,302 +1,293 @@
1
- #.
2
- # file_store.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
9
-
10
1
  # @private
11
- module Watobo#:nodoc: all
12
- class FileSessionStore < SessionStore
13
- def num_chats
14
- get_file_list(@conversation_path, "*-chat*").length
15
- end
16
-
17
- def num_findings
18
- get_file_list(@findings_path, "*-finding*").length
19
- end
20
-
21
- def add_finding(finding)
22
- return false unless finding.respond_to? :request
23
- return false unless finding.respond_to? :response
24
-
25
- finding_file = File.join("#{@findings_path}", "#{finding.id}-finding.yml")
26
- if not File.exists?(finding_file) then
27
-
28
- finding_data = {
29
- :request => finding.request.map{|x| x.inspect},
30
- :response => finding.response.map{|x| x.inspect},
31
- :details => Hash.new
32
- }
33
- finding_data[:details].update(finding.details)
34
-
35
- fh = File.new(finding_file, "w+b")
36
- fh.print YAML.dump(finding_data)
37
- fh.close
38
- return true
39
- end
40
- return false
41
- end
42
-
43
- def delete_finding(finding)
44
- finding_file = File.join("#{@findings_path}", "#{finding.id}-finding")
45
- File.delete finding_file if File.exist? finding_file
46
- finding_file << ".yml"
47
- File.delete finding_file if File.exist? finding_file
48
-
49
- end
50
-
51
- def update_finding(finding)
52
- finding_file = File.join("#{@findings_path}", "#{finding.id}-finding.yml")
53
- finding_data = {
54
- :request => finding.request.map{|x| x.inspect},
55
- :response => finding.response.map{|x| x.inspect},
56
- :details => Hash.new
57
- }
58
- finding_data[:details].update(finding.details)
59
-
60
- if File.exists?(finding_file) then
61
- fh = File.new(finding_file, "w+b")
62
- fh.print YAML.dump(finding_data)
63
- fh.close
64
- end
65
-
66
- end
67
-
68
- # add_scan_log
69
- # adds a chat to a specific log store, e.g. if you want to log scan results.
70
- # needs a scan_name (STRING) as its destination which will be created
71
- # if the scan name does not exist.
72
- def add_scan_log(chat, scan_name = nil)
73
- return false unless chat.respond_to? :request
74
- return false unless chat.respond_to? :response
2
+ module Watobo#:nodoc: all
3
+ class FileSessionStore < SessionStore
4
+ def num_chats
5
+ get_file_list(@conversation_path, "*-chat*").length
6
+ end
7
+
8
+ def num_findings
9
+ get_file_list(@findings_path, "*-finding*").length
10
+ end
11
+
12
+ def add_finding(finding)
13
+ return false unless finding.respond_to? :request
14
+ return false unless finding.respond_to? :response
15
+
16
+ finding_file = File.join("#{@findings_path}", "#{finding.id}-finding.yml")
17
+ if not File.exists?(finding_file) then
18
+
19
+ finding_data = {
20
+ :request => finding.request.map{|x| x.inspect},
21
+ :response => finding.response.map{|x| x.inspect},
22
+ :details => Hash.new
23
+ }
24
+ finding_data[:details].update(finding.details)
25
+
26
+ fh = File.new(finding_file, "w+b")
27
+ fh.print YAML.dump(finding_data)
28
+ fh.close
29
+ return true
30
+ end
31
+ return false
32
+ end
33
+
34
+ def delete_finding(finding)
35
+ finding_file = File.join("#{@findings_path}", "#{finding.id}-finding")
36
+ File.delete finding_file if File.exist? finding_file
37
+ finding_file << ".yml"
38
+ File.delete finding_file if File.exist? finding_file
39
+
40
+ end
41
+
42
+ def update_finding(finding)
43
+ finding_file = File.join("#{@findings_path}", "#{finding.id}-finding.yml")
44
+ finding_data = {
45
+ :request => finding.request.map{|x| x.inspect},
46
+ :response => finding.response.map{|x| x.inspect},
47
+ :details => Hash.new
48
+ }
49
+ finding_data[:details].update(finding.details)
50
+
51
+ if File.exists?(finding_file) then
52
+ fh = File.new(finding_file, "w+b")
53
+ fh.print YAML.dump(finding_data)
54
+ fh.close
55
+ end
56
+
57
+ end
58
+
59
+ # add_scan_log
60
+ # adds a chat to a specific log store, e.g. if you want to log scan results.
61
+ # needs a scan_name (STRING) as its destination which will be created
62
+ # if the scan name does not exist.
63
+ def add_scan_log(chat, scan_name = nil)
64
+ return false unless chat.respond_to? :request
65
+ return false unless chat.respond_to? :response
75
66
  begin
76
-
67
+
77
68
  return false if scan_name.nil?
78
69
  return false if scan_name.empty?
79
70
 
80
- scan_name_clean = scan_name.gsub(/[:\\\/\.]*/,"_")
81
- # puts ">> scan_name"
82
- path = File.join(@scanlog_path, scan_name_clean)
83
-
84
- Dir.mkdir path unless File.exist? path
85
-
86
- log_file = File.join( path, "log_" + Time.now.to_f.to_s + ".yml")
87
-
88
- chat_data = {
89
- :request => chat.request.map{|x| x.inspect},
90
- :response => chat.response.map{|x| x.inspect},
91
- }
92
- # puts log_file
93
- chat_data.update(chat.settings)
94
- File.open(log_file, "w") { |fh|
95
- YAML.dump(chat_data, fh)
96
- }
97
- return true
98
- rescue => bang
99
- puts bang
100
- puts bang.backtrace if $DEBUG
101
- end
102
- return false
103
- end
104
-
105
- def add_chat(chat)
106
- return false unless chat_valid? chat
107
- chat_file = File.join("#{@conversation_path}", "#{chat.id}-chat.yml")
108
- chat_data = {
109
- :request => chat.request.map{|x| x.inspect},
110
- :response => chat.response.map{|x| x.inspect},
111
- }
112
-
113
- chat_data.update(chat.settings)
114
- if not File.exists?(chat_file) then
115
- File.open(chat_file, "w") { |fh|
116
- YAML.dump(chat_data, fh)
117
- }
118
- chat.file = chat_file
119
- return true
120
- end
121
- return false
122
- end
123
-
124
- def each_chat(&block)
125
- get_file_list(@conversation_path, "*-chat*").each do |fname|
126
- chat = Watobo::Utils.loadChatYAML(fname)
127
- next unless chat
128
- yield chat if block_given?
129
- end
130
- end
131
-
132
- def each_finding(&block)
133
- get_file_list(@findings_path, "*-finding*").each do |fname|
134
- f = Watobo::Utils.loadFindingYAML(fname)
135
- next unless f
136
- yield f if block_given?
137
- end
138
- end
139
-
140
- def initialize(project_name, session_name)
141
-
142
- wsp = Watobo.workspace_path
143
- return false unless File.exist? wsp
144
- puts "* using workspace path: #{wsp}" if $DEBUG
145
-
146
- @log_file = nil
147
- @log_lock = Mutex.new
148
-
149
- @project_path = File.join(wsp, project_name)
150
- unless File.exist? @project_path
151
- puts "* create project path: #{@project_path}" if $DEBUG
152
- Dir.mkdir(@project_path)
153
- end
154
-
155
- @project_config_path = File.join(@project_path, ".config")
156
- Dir.mkdir @project_config_path unless File.exist? @project_config_path
157
-
158
- @session_path = File.join(@project_path, session_name)
159
-
160
- unless File.exist? @session_path
161
- puts "* create session path: #{@session_path}" if $DEBUG
162
- Dir.mkdir(@session_path)
163
- end
164
-
165
- @session_config_path = File.join(@session_path, ".config")
166
- Dir.mkdir @session_config_path unless File.exist? @session_config_path
167
-
168
- sext = Watobo::Conf::General.session_settings_file_ext
169
-
170
- @session_file = File.join(@session_path, session_name + sext)
171
- @project_file = File.join(@project_path, project_name + Watobo::Conf::General.project_settings_file_ext)
172
-
173
- @conversation_path = File.expand_path(File.join(@session_path, Watobo::Conf::Datastore.conversations))
174
-
175
- @findings_path = File.expand_path(File.join(@session_path, Watobo::Conf::Datastore.findings))
176
- @log_path = File.expand_path(File.join(@session_path, Watobo::Conf::Datastore.event_logs_dir))
177
- @scanlog_path = File.expand_path(File.join(@session_path, Watobo::Conf::Datastore.scan_logs_dir))
178
-
179
- [ @conversation_path, @findings_path, @log_path, @scanlog_path ].each do |folder|
180
- if not File.exists?(folder) then
181
- puts "create path #{folder}"
182
- begin
183
- Dir.mkdir(folder)
184
- rescue SystemCallError => bang
185
- puts "!!!ERROR:"
186
- puts bang
187
- rescue => bang
188
- puts "!!!ERROR:"
189
- puts bang
190
- end
191
- end
192
- end
193
-
194
- @log_file = File.join(@log_path, session_name + ".log")
195
-
196
- # @chat_files = get_file_list(@conversation_path, "*-chat")
197
- # @finding_files = get_file_list(@findings_path, "*-finding")
198
- end
199
-
200
- def save_session_settings(group, session_settings)
201
- # puts ">> save_session_settings <<"
202
- file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
203
- file << ".yml"
204
-
205
- session_file = File.join(@session_config_path, file)
206
- # puts "Dest.File: #{session_file}"
207
- # puts session_settings.to_yaml
208
- # puts "---"
209
- Watobo::Utils.save_settings(session_file, session_settings)
210
- end
211
-
212
- def load_session_settings(group)
213
- # puts ">> load_session_settings : #{group}"
214
- file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
215
- file << ".yml"
216
-
217
- session_file = File.join(@session_config_path, file)
218
- # puts "File: #{session_file}"
219
- # puts "---"
220
-
221
- s = Watobo::Utils.load_settings(session_file)
222
- s
223
- end
224
-
225
- def save_project_settings(group, project_settings)
226
- # puts ">> save_project_settings : #{group}"
227
- file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
228
- file << ".yml"
229
-
230
- project_file = File.join(@project_config_path, file)
231
- # puts "Dest.File: #{project_file}"
232
- # puts project_settings.to_yaml
233
- # puts "---"
234
- Watobo::Utils.save_settings(project_file, project_settings)
235
-
236
- end
237
-
238
- def load_project_settings(group)
239
- # puts ">> load_project_settings : #{group}"
240
- file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
241
- file << ".yml"
242
-
243
- project_file = File.join(@project_config_path, file)
244
- # puts "File: #{project_file}"
245
- # puts "---"
246
-
247
- s = Watobo::Utils.load_settings(project_file)
248
- s
249
-
250
- end
251
-
252
- def logs
253
- l = ''
254
- @log_lock.synchronize do
255
- l = File.open(@log_file).read
256
- end
257
- l
258
- end
259
-
260
- def logger( message, prefs = {} )
261
- opts = { :sender => "unknown", :level => Watobo::Constants::LOG_INFO }
262
- opts.update prefs
263
- return false if @log_file.nil?
264
- begin
265
- t = Time.now
266
- now = t.strftime("%m/%d/%Y @ %H:%M:%S")
267
- log_message = [ now ]
268
- log_message << "#{opts[:sender]}"
269
- if message.is_a? Array
270
- log_message << message.join("\n| ")
271
- log_message << "\n-"
272
- else
273
- log_message << message
274
- end
275
- @log_lock.synchronize do
276
- File.open(@log_file,"a") do |lfh|
277
- lfh.puts log_message.join("|")
278
- end
279
- end
280
- rescue => bang
281
- puts bang
282
- end
283
-
284
- end
285
-
286
- private
287
-
288
- def chat_valid?(chat)
289
- return false unless chat.respond_to? :request
290
- return false unless chat.respond_to? :response
291
- true
292
- end
293
-
294
- def get_file_list(path, pattern)
295
- fl = Dir["#{path}/#{pattern}"].sort_by{ |x| File.basename(x).sub(/[^0-9]*/,'').to_i }
296
- #puts fl.length
297
- fl
298
- end
299
-
300
- end
301
-
71
+ scan_name_clean = scan_name.gsub(/[:\\\/\.]*/,"_")
72
+ # puts ">> scan_name"
73
+ path = File.join(@scanlog_path, scan_name_clean)
74
+
75
+ Dir.mkdir path unless File.exist? path
76
+
77
+ log_file = File.join( path, "log_" + Time.now.to_f.to_s + ".yml")
78
+
79
+ chat_data = {
80
+ :request => chat.request.map{|x| x.inspect},
81
+ :response => chat.response.map{|x| x.inspect},
82
+ }
83
+ # puts log_file
84
+ chat_data.update(chat.settings)
85
+ File.open(log_file, "w") { |fh|
86
+ YAML.dump(chat_data, fh)
87
+ }
88
+ return true
89
+ rescue => bang
90
+ puts bang
91
+ puts bang.backtrace if $DEBUG
92
+ end
93
+ return false
94
+ end
95
+
96
+ def add_chat(chat)
97
+ return false unless chat_valid? chat
98
+ chat_file = File.join("#{@conversation_path}", "#{chat.id}-chat.yml")
99
+ chat_data = {
100
+ :request => chat.request.map{|x| x.inspect},
101
+ :response => chat.response.map{|x| x.inspect},
102
+ }
103
+
104
+ chat_data.update(chat.settings)
105
+ if not File.exists?(chat_file) then
106
+ File.open(chat_file, "w") { |fh|
107
+ YAML.dump(chat_data, fh)
108
+ }
109
+ chat.file = chat_file
110
+ return true
111
+ end
112
+ return false
113
+ end
114
+
115
+ def each_chat(&block)
116
+ get_file_list(@conversation_path, "*-chat*").each do |fname|
117
+ chat = Watobo::Utils.loadChatYAML(fname)
118
+ next unless chat
119
+ yield chat if block_given?
120
+ end
121
+ end
122
+
123
+ def each_finding(&block)
124
+ get_file_list(@findings_path, "*-finding*").each do |fname|
125
+ f = Watobo::Utils.loadFindingYAML(fname)
126
+ next unless f
127
+ yield f if block_given?
128
+ end
129
+ end
130
+
131
+ def initialize(project_name, session_name)
132
+
133
+ wsp = Watobo.workspace_path
134
+ return false unless File.exist? wsp
135
+ puts "* using workspace path: #{wsp}" if $DEBUG
136
+
137
+ @log_file = nil
138
+ @log_lock = Mutex.new
139
+
140
+ @project_path = File.join(wsp, project_name)
141
+ unless File.exist? @project_path
142
+ puts "* create project path: #{@project_path}" if $DEBUG
143
+ Dir.mkdir(@project_path)
144
+ end
145
+
146
+ @project_config_path = File.join(@project_path, ".config")
147
+ Dir.mkdir @project_config_path unless File.exist? @project_config_path
148
+
149
+ @session_path = File.join(@project_path, session_name)
150
+
151
+ unless File.exist? @session_path
152
+ puts "* create session path: #{@session_path}" if $DEBUG
153
+ Dir.mkdir(@session_path)
154
+ end
155
+
156
+ @session_config_path = File.join(@session_path, ".config")
157
+ Dir.mkdir @session_config_path unless File.exist? @session_config_path
158
+
159
+ sext = Watobo::Conf::General.session_settings_file_ext
160
+
161
+ @session_file = File.join(@session_path, session_name + sext)
162
+ @project_file = File.join(@project_path, project_name + Watobo::Conf::General.project_settings_file_ext)
163
+
164
+ @conversation_path = File.expand_path(File.join(@session_path, Watobo::Conf::Datastore.conversations))
165
+
166
+ @findings_path = File.expand_path(File.join(@session_path, Watobo::Conf::Datastore.findings))
167
+ @log_path = File.expand_path(File.join(@session_path, Watobo::Conf::Datastore.event_logs_dir))
168
+ @scanlog_path = File.expand_path(File.join(@session_path, Watobo::Conf::Datastore.scan_logs_dir))
169
+
170
+ [ @conversation_path, @findings_path, @log_path, @scanlog_path ].each do |folder|
171
+ if not File.exists?(folder) then
172
+ puts "create path #{folder}"
173
+ begin
174
+ Dir.mkdir(folder)
175
+ rescue SystemCallError => bang
176
+ puts "!!!ERROR:"
177
+ puts bang
178
+ rescue => bang
179
+ puts "!!!ERROR:"
180
+ puts bang
181
+ end
182
+ end
183
+ end
184
+
185
+ @log_file = File.join(@log_path, session_name + ".log")
186
+
187
+ # @chat_files = get_file_list(@conversation_path, "*-chat")
188
+ # @finding_files = get_file_list(@findings_path, "*-finding")
189
+ end
190
+
191
+ def save_session_settings(group, session_settings)
192
+ # puts ">> save_session_settings <<"
193
+ file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
194
+ file << ".yml"
195
+
196
+ session_file = File.join(@session_config_path, file)
197
+ # puts "Dest.File: #{session_file}"
198
+ # puts session_settings.to_yaml
199
+ # puts "---"
200
+ Watobo::Utils.save_settings(session_file, session_settings)
201
+ end
202
+
203
+ def load_session_settings(group)
204
+ # puts ">> load_session_settings : #{group}"
205
+ file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
206
+ file << ".yml"
207
+
208
+ session_file = File.join(@session_config_path, file)
209
+ # puts "File: #{session_file}"
210
+ # puts "---"
211
+
212
+ s = Watobo::Utils.load_settings(session_file)
213
+ s
214
+ end
215
+
216
+ def save_project_settings(group, project_settings)
217
+ # puts ">> save_project_settings : #{group}"
218
+ file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
219
+ file << ".yml"
220
+
221
+ project_file = File.join(@project_config_path, file)
222
+ # puts "Dest.File: #{project_file}"
223
+ # puts project_settings.to_yaml
224
+ # puts "---"
225
+ Watobo::Utils.save_settings(project_file, project_settings)
226
+
227
+ end
228
+
229
+ def load_project_settings(group)
230
+ # puts ">> load_project_settings : #{group}"
231
+ file = Watobo::Utils.snakecase group.gsub(/\.yml/,'')
232
+ file << ".yml"
233
+
234
+ project_file = File.join(@project_config_path, file)
235
+ # puts "File: #{project_file}"
236
+ # puts "---"
237
+
238
+ s = Watobo::Utils.load_settings(project_file)
239
+ s
240
+
241
+ end
242
+
243
+ def logs
244
+ l = ''
245
+ @log_lock.synchronize do
246
+ l = File.open(@log_file).read
247
+ end
248
+ l
249
+ end
250
+
251
+ def logger( message, prefs = {} )
252
+ opts = { :sender => "unknown", :level => Watobo::Constants::LOG_INFO }
253
+ opts.update prefs
254
+ return false if @log_file.nil?
255
+ begin
256
+ t = Time.now
257
+ now = t.strftime("%m/%d/%Y @ %H:%M:%S")
258
+ log_message = [ now ]
259
+ log_message << "#{opts[:sender]}"
260
+ if message.is_a? Array
261
+ log_message << message.join("\n| ")
262
+ log_message << "\n-"
263
+ else
264
+ log_message << message
265
+ end
266
+ @log_lock.synchronize do
267
+ File.open(@log_file,"a") do |lfh|
268
+ lfh.puts log_message.join("|")
269
+ end
270
+ end
271
+ rescue => bang
272
+ puts bang
273
+ end
274
+
275
+ end
276
+
277
+ private
278
+
279
+ def chat_valid?(chat)
280
+ return false unless chat.respond_to? :request
281
+ return false unless chat.respond_to? :response
282
+ true
283
+ end
284
+
285
+ def get_file_list(path, pattern)
286
+ fl = Dir["#{path}/#{pattern}"].sort_by{ |x| File.basename(x).sub(/[^0-9]*/,'').to_i }
287
+ #puts fl.length
288
+ fl
289
+ end
290
+
291
+ end
292
+
302
293
  end