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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +46 -1
- data/bin/nfq_server.rb +0 -9
- data/bin/watobo_gui.rb +3 -13
- data/custom-views/prettify-json.rb +9 -18
- data/icons/watobo.ico +0 -0
- data/icons/watobo.ico.old +0 -0
- data/lib/watobo.rb +10 -19
- data/lib/watobo/adapters.rb +5 -14
- data/lib/watobo/adapters/data_store.rb +50 -59
- data/lib/watobo/adapters/file/file_store.rb +287 -296
- data/lib/watobo/adapters/file/marshal_store.rb +293 -296
- data/lib/watobo/adapters/session_store.rb +5 -14
- data/lib/watobo/ca.rb +1 -10
- data/lib/watobo/config.rb +197 -206
- data/lib/watobo/constants.rb +0 -9
- data/lib/watobo/core.rb +3 -12
- data/lib/watobo/core/active_check.rb +72 -135
- data/lib/watobo/core/active_checks.rb +49 -58
- data/lib/watobo/core/ca.rb +369 -389
- data/lib/watobo/core/cert_store.rb +34 -43
- data/lib/watobo/core/chat.rb +92 -101
- data/lib/watobo/core/chats.rb +271 -280
- data/lib/watobo/core/client_cert_store.rb +106 -35
- data/lib/watobo/core/conversation.rb +48 -57
- data/lib/watobo/core/cookie.rb +23 -32
- data/lib/watobo/core/egress_handlers.rb +98 -0
- data/lib/watobo/core/finding.rb +66 -75
- data/lib/watobo/core/findings.rb +107 -114
- data/lib/watobo/core/forwarding_proxy.rb +13 -22
- data/lib/watobo/core/fuzz_gen.rb +0 -9
- data/lib/watobo/core/intercept_carver.rb +166 -177
- data/lib/watobo/core/intercept_filter.rb +235 -244
- data/lib/watobo/core/interceptor.rb +98 -107
- data/lib/watobo/core/min_class.rb +4 -13
- data/lib/watobo/core/netfilter_queue.rb +170 -179
- data/lib/watobo/core/ott_cache.rb +132 -141
- data/lib/watobo/core/parameter.rb +43 -52
- data/lib/watobo/core/passive_check.rb +103 -102
- data/lib/watobo/core/passive_checks.rb +48 -57
- data/lib/watobo/core/passive_scanner.rb +54 -55
- data/lib/watobo/core/plugin.rb +11 -20
- data/lib/watobo/core/project.rb +3 -9
- data/lib/watobo/core/proxy.rb +43 -52
- data/lib/watobo/core/request.rb +125 -123
- data/lib/watobo/core/response.rb +44 -53
- data/lib/watobo/core/scanner.rb +0 -9
- data/lib/watobo/core/scanner3.rb +405 -414
- data/lib/watobo/core/scope.rb +83 -92
- data/lib/watobo/core/session.rb +1043 -1026
- data/lib/watobo/core/sid_cache.rb +98 -107
- data/lib/watobo/core/subscriber.rb +25 -34
- data/lib/watobo/defaults.rb +21 -30
- data/lib/watobo/external/diff/lcs.rb +0 -9
- data/lib/watobo/external/diff/lcs/array.rb +0 -9
- data/lib/watobo/external/diff/lcs/block.rb +0 -9
- data/lib/watobo/external/diff/lcs/callbacks.rb +0 -9
- data/lib/watobo/external/diff/lcs/change.rb +0 -9
- data/lib/watobo/external/diff/lcs/hunk.rb +0 -9
- data/lib/watobo/external/diff/lcs/ldiff.rb +0 -9
- data/lib/watobo/external/diff/lcs/string.rb +0 -9
- data/lib/watobo/externals.rb +6 -15
- data/lib/watobo/framework.rb +4 -13
- data/lib/watobo/framework/create_project.rb +60 -69
- data/lib/watobo/framework/init.rb +0 -9
- data/lib/watobo/framework/init_modules.rb +0 -9
- data/lib/watobo/framework/license_text.rb +28 -37
- data/lib/watobo/framework/load_chat.rb +13 -22
- data/lib/watobo/gui.rb +132 -123
- data/lib/watobo/gui/about_watobo.rb +0 -9
- data/lib/watobo/gui/browser_preview.rb +0 -9
- data/lib/watobo/gui/certificate_dialog.rb +0 -9
- data/lib/watobo/gui/chat_diff.rb +0 -9
- data/lib/watobo/gui/chatviewer_frame.rb +73 -72
- data/lib/watobo/gui/checkboxtree.rb +0 -9
- data/lib/watobo/gui/checks_policy_frame.rb +0 -9
- data/lib/watobo/gui/client_cert_dialog.rb +96 -87
- data/lib/watobo/gui/confirm_scan_dialog.rb +0 -9
- data/lib/watobo/gui/conversation_table.rb +158 -164
- data/lib/watobo/gui/conversation_table_ctrl.rb +207 -216
- data/lib/watobo/gui/conversation_table_ctrl2.rb +373 -382
- data/lib/watobo/gui/csrf_token_dialog.rb +0 -9
- data/lib/watobo/gui/custom_viewer.rb +374 -383
- data/lib/watobo/gui/dashboard.rb +296 -303
- data/lib/watobo/gui/define_scope_frame.rb +0 -9
- data/lib/watobo/gui/differ_frame.rb +215 -224
- data/lib/watobo/gui/edit_comment.rb +0 -9
- data/lib/watobo/gui/edit_scope_dialog.rb +0 -9
- data/lib/watobo/gui/export_dialog.rb +104 -113
- data/lib/watobo/gui/finding_info.rb +0 -9
- data/lib/watobo/gui/findings_tree.rb +210 -217
- data/lib/watobo/gui/full_scan_dialog.rb +0 -9
- data/lib/watobo/gui/fuzzer_gui.rb +1295 -1313
- data/lib/watobo/gui/fxsave_thread.rb +14 -0
- data/lib/watobo/gui/goto_url_dialog.rb +70 -79
- data/lib/watobo/gui/hex_viewer.rb +0 -9
- data/lib/watobo/gui/html_viewer.rb +287 -296
- data/lib/watobo/gui/intercept_filter_dialog.rb +188 -197
- data/lib/watobo/gui/interceptor_gui.rb +1041 -1051
- data/lib/watobo/gui/interceptor_settings_dialog.rb +0 -9
- data/lib/watobo/gui/json_viewer.rb +287 -0
- data/lib/watobo/gui/list_box.rb +101 -110
- data/lib/watobo/gui/log_file_viewer.rb +32 -41
- data/lib/watobo/gui/log_viewer.rb +83 -88
- data/lib/watobo/gui/login_wizzard.rb +0 -9
- data/lib/watobo/gui/main_window.rb +587 -618
- data/lib/watobo/gui/manual_request_editor.rb +620 -565
- data/lib/watobo/gui/master_pw_dialog.rb +0 -9
- data/lib/watobo/gui/mixins/gui_settings.rb +29 -38
- data/lib/watobo/gui/page_tree.rb +217 -226
- data/lib/watobo/gui/password_policy_dialog.rb +0 -9
- data/lib/watobo/gui/plugin_board.rb +0 -9
- data/lib/watobo/gui/preferences_dialog.rb +0 -9
- data/lib/watobo/gui/progress_window.rb +17 -27
- data/lib/watobo/gui/project_wizzard.rb +0 -9
- data/lib/watobo/gui/proxy_dialog.rb +1 -10
- data/lib/watobo/gui/quick_scan_dialog.rb +0 -9
- data/lib/watobo/gui/request_builder_frame.rb +102 -111
- data/lib/watobo/gui/request_editor.rb +181 -137
- data/lib/watobo/gui/rewrite_filters_dialog.rb +394 -403
- data/lib/watobo/gui/rewrite_rules_dialog.rb +372 -381
- data/lib/watobo/gui/save_chat_dialog.rb +140 -149
- data/lib/watobo/gui/scanner_settings_dialog.rb +0 -9
- data/lib/watobo/gui/select_chat_dialog.rb +0 -9
- data/lib/watobo/gui/session_management_dialog.rb +0 -9
- data/lib/watobo/gui/sites_tree.rb +0 -9
- data/lib/watobo/gui/status_bar.rb +0 -9
- data/lib/watobo/gui/table_editor.rb +0 -9
- data/lib/watobo/gui/tagless_viewer.rb +0 -9
- data/lib/watobo/gui/templates/plugin.rb +0 -9
- data/lib/watobo/gui/templates/plugin2.rb +92 -100
- data/lib/watobo/gui/templates/plugin_base.rb +144 -153
- data/lib/watobo/gui/text_viewer.rb +0 -9
- data/lib/watobo/gui/transcoder_window.rb +0 -9
- data/lib/watobo/gui/utils/gui_utils.rb +0 -9
- data/lib/watobo/gui/utils/init_icons.rb +86 -95
- data/lib/watobo/gui/utils/load_icons.rb +33 -42
- data/lib/watobo/gui/utils/load_plugins.rb +116 -119
- data/lib/watobo/gui/utils/master_password.rb +68 -77
- data/lib/watobo/gui/utils/save_default_settings.rb +113 -122
- data/lib/watobo/gui/utils/save_project_settings.rb +0 -9
- data/lib/watobo/gui/utils/save_proxy_settings.rb +41 -50
- data/lib/watobo/gui/utils/save_scanner_settings.rb +18 -27
- data/lib/watobo/gui/utils/session_history.rb +112 -121
- data/lib/watobo/gui/workspace_dialog.rb +0 -9
- data/lib/watobo/gui/www_auth_dialog.rb +0 -9
- data/lib/watobo/gui/xml_viewer_frame.rb +0 -9
- data/lib/watobo/http.rb +4 -13
- data/lib/watobo/http/cookies/cookies.rb +26 -35
- data/lib/watobo/http/data/data.rb +45 -54
- data/lib/watobo/http/data/json.rb +47 -55
- data/lib/watobo/http/url/url.rb +38 -47
- data/lib/watobo/http/xml/xml.rb +124 -130
- data/lib/watobo/interceptor.rb +3 -12
- data/lib/watobo/interceptor/proxy.rb +742 -739
- data/lib/watobo/interceptor/transparent.rb +22 -24
- data/lib/watobo/mixins.rb +10 -19
- data/lib/watobo/mixins/check_info.rb +27 -36
- data/lib/watobo/mixins/httpparser.rb +613 -637
- data/lib/watobo/mixins/request_parser.rb +88 -97
- data/lib/watobo/mixins/shapers.rb +515 -529
- data/lib/watobo/mixins/transcoders.rb +3 -11
- data/lib/watobo/parser.rb +1 -10
- data/lib/watobo/parser/html.rb +83 -92
- data/lib/watobo/patch_fxruby_setfocus.rb +26 -0
- data/lib/watobo/sockets.rb +3 -12
- data/lib/watobo/sockets/agent.rb +828 -837
- data/lib/watobo/sockets/client_socket.rb +308 -312
- data/lib/watobo/sockets/connection.rb +401 -410
- data/lib/watobo/sockets/http_socket.rb +11 -13
- data/lib/watobo/sockets/ntlm_auth.rb +129 -138
- data/lib/watobo/utils.rb +10 -19
- data/lib/watobo/utils/check_regex.rb +0 -9
- data/lib/watobo/utils/copy_object.rb +0 -9
- data/lib/watobo/utils/crypto.rb +0 -9
- data/lib/watobo/utils/expand_range.rb +23 -32
- data/lib/watobo/utils/export_xml.rb +97 -106
- data/lib/watobo/utils/file_management.rb +9 -11
- data/lib/watobo/utils/hexprint.rb +9 -18
- data/lib/watobo/utils/load_chat.rb +0 -9
- data/lib/watobo/utils/load_icon.rb +0 -9
- data/lib/watobo/utils/ntlm.rb +866 -875
- data/lib/watobo/utils/print_debug.rb +12 -21
- data/lib/watobo/utils/response_builder.rb +90 -99
- data/lib/watobo/utils/response_hash.rb +0 -9
- data/lib/watobo/utils/secure_eval.rb +0 -9
- data/lib/watobo/utils/strings.rb +10 -19
- data/lib/watobo/utils/text2request.rb +0 -9
- data/lib/watobo/utils/url.rb +23 -32
- data/lib/watobo/utils/utf16.rb +11 -20
- data/modules/active/Apache/mod_status.rb +0 -9
- data/modules/active/Apache/multiview.rb +151 -160
- data/modules/active/Flash/crossdomain.rb +0 -9
- data/modules/active/JWT/jwt_oauth2_none.rb +111 -0
- data/modules/active/cq5/cq5_default_selectors.rb +106 -115
- data/modules/active/cq5/cqp_user_enumeration.rb +125 -134
- data/modules/active/directories/dirwalker.rb +0 -9
- data/modules/active/discovery/fileextensions.rb +0 -9
- data/modules/active/discovery/http_methods.rb +0 -9
- data/modules/active/discovery/jsmapfiles.rb +79 -0
- data/modules/active/domino/domino_db.rb +68 -76
- data/modules/active/dotNET/custom_errors.rb +102 -111
- data/modules/active/dotNET/dotnet_files.rb +90 -99
- data/modules/active/fileinclusion/lfi_simple.rb +0 -9
- data/modules/active/jboss/jboss_basic.rb +0 -9
- data/modules/active/sap/business_objects.rb +51 -60
- data/modules/active/sap/its_commands.rb +0 -9
- data/modules/active/sap/its_service_parameter.rb +0 -9
- data/modules/active/sap/its_services.rb +0 -9
- data/modules/active/sap/its_xss.rb +0 -9
- data/modules/active/shell_shock/shell_shock.rb +139 -148
- data/modules/active/siebel/siebel_apps.rb +160 -169
- data/modules/active/sqlinjection/sql_boolean.rb +0 -9
- data/modules/active/sqlinjection/sql_numerical.rb +198 -0
- data/modules/active/sqlinjection/sqli_error.rb +0 -9
- data/modules/active/sqlinjection/sqli_timing.rb +220 -229
- data/modules/active/struts2/default_handler_ognl.rb +106 -115
- data/modules/active/struts2/include_params_ognl.rb +105 -114
- data/modules/active/xml/xml_xxe.rb +112 -123
- data/modules/active/xss/xss_ng.rb +214 -223
- data/modules/active/xss/xss_simple.rb +0 -9
- data/modules/passive/ajax.rb +68 -77
- data/modules/passive/autocomplete.rb +56 -65
- data/modules/passive/cookie_options.rb +0 -9
- data/modules/passive/cookie_xss.rb +0 -9
- data/modules/passive/detect_code.rb +0 -9
- data/modules/passive/detect_fileupload.rb +0 -9
- data/modules/passive/detect_infrastructure.rb +0 -9
- data/modules/passive/detect_one_time_tokens.rb +0 -9
- data/modules/passive/dirindexing.rb +0 -9
- data/modules/passive/disclosure_domino.rb +55 -64
- data/modules/passive/disclosure_emails.rb +0 -9
- data/modules/passive/disclosure_ipaddr.rb +55 -53
- data/modules/passive/filename_as_parameter.rb +0 -9
- data/modules/passive/form_spotter.rb +0 -9
- data/modules/passive/hidden_fields.rb +50 -59
- data/modules/passive/hotspots.rb +0 -9
- data/modules/passive/in_script_parameter.rb +0 -9
- data/modules/passive/json_web_token.rb +93 -0
- data/modules/passive/multiple_server_headers.rb +0 -9
- data/modules/passive/possible_login.rb +0 -9
- data/modules/passive/redirect_url.rb +0 -9
- data/modules/passive/redirectionz.rb +0 -9
- data/modules/passive/sap-headers.rb +56 -65
- data/modules/passive/xss_dom.rb +0 -9
- data/plugins/aem/aem.rb +11 -20
- data/plugins/aem/gui/main.rb +118 -127
- data/plugins/aem/gui/tree_view.rb +171 -180
- data/plugins/aem/lib/agent.rb +130 -138
- data/plugins/aem/lib/dispatcher.rb +45 -51
- data/plugins/aem/lib/engine.rb +177 -186
- data/plugins/catalog/catalog.rb +345 -355
- data/plugins/crawler/crawler.rb +4 -13
- data/plugins/crawler/gui.rb +5 -14
- data/plugins/crawler/gui/auth_frame.rb +270 -279
- data/plugins/crawler/gui/crawler_gui.rb +271 -276
- data/plugins/crawler/gui/general_settings_frame.rb +96 -105
- data/plugins/crawler/gui/hooks_frame.rb +80 -89
- data/plugins/crawler/gui/scope_frame.rb +50 -59
- data/plugins/crawler/gui/settings_tabbook.rb +38 -47
- data/plugins/crawler/gui/status_frame.rb +59 -68
- data/plugins/crawler/lib/bags.rb +18 -27
- data/plugins/crawler/lib/constants.rb +11 -20
- data/plugins/crawler/lib/engine.rb +488 -497
- data/plugins/crawler/lib/grabber.rb +68 -77
- data/plugins/crawler/lib/status.rb +71 -80
- data/plugins/crawler/lib/uri_mp.rb +12 -21
- data/plugins/filefinder/filefinder.rb +326 -333
- data/plugins/sqlmap/bin/test.rb +78 -87
- data/plugins/sqlmap/gui.rb +4 -13
- data/plugins/sqlmap/gui/main.rb +218 -227
- data/plugins/sqlmap/gui/options_frame.rb +97 -106
- data/plugins/sqlmap/lib/sqlmap_ctrl.rb +90 -100
- data/plugins/sqlmap/sqlmap.rb +2 -11
- data/plugins/sslchecker/cli/sslchecker_cli.rb +0 -9
- data/plugins/sslchecker/gui/cipher_table.rb +246 -254
- data/plugins/sslchecker/gui/gui.rb +258 -264
- data/plugins/sslchecker/gui/sslchecker.rb +4 -13
- data/plugins/sslchecker/lib/check.rb +127 -133
- data/plugins/wshell/gui/main.rb +119 -117
- data/plugins/wshell/lib/core.rb +38 -88
- data/plugins/wshell/wshell.rb +11 -20
- metadata +170 -164
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# about_watobo.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
2
|
module Watobo#:nodoc: all
|
|
12
3
|
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# browser_preview.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
2
|
module Watobo#:nodoc: all
|
|
12
3
|
module Gui
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# certificate_dialog.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
2
|
module Watobo#:nodoc: all
|
|
12
3
|
module Gui
|
data/lib/watobo/gui/chat_diff.rb
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# chat_diff.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
2
|
module Watobo#:nodoc: all
|
|
12
3
|
module Gui
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# chatviewer_frame.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
|
|
2
|
+
module Watobo #:nodoc: all
|
|
12
3
|
module Gui
|
|
13
4
|
|
|
14
5
|
SEL_TYPE_GREP = 0
|
|
@@ -16,6 +7,7 @@ module Watobo#:nodoc: all
|
|
|
16
7
|
class TextViewer < FXVerticalFrame
|
|
17
8
|
|
|
18
9
|
attr_accessor :max_len
|
|
10
|
+
|
|
19
11
|
def style=(new_style)
|
|
20
12
|
@simple_text_view.style = new_style
|
|
21
13
|
end
|
|
@@ -25,24 +17,24 @@ module Watobo#:nodoc: all
|
|
|
25
17
|
end
|
|
26
18
|
|
|
27
19
|
def setText(text, prefs={})
|
|
28
|
-
|
|
20
|
+
|
|
29
21
|
normalized_text = text
|
|
30
22
|
if text.is_a? String
|
|
31
|
-
|
|
23
|
+
normalized_text = text.gsub(/[^[:print:]]/, ".")
|
|
32
24
|
elsif text.respond_to? :has_body?
|
|
33
25
|
if text.content_type =~ /(xml)/
|
|
34
26
|
doc = Nokogiri::XML(text.body, &:noblanks)
|
|
35
|
-
fbody = doc.to_xhtml(
|
|
36
|
-
normalized_text = text.headers.map{|h| h.strip }.join("\n")
|
|
27
|
+
fbody = doc.to_xhtml(indent: 3, indent_text: " ")
|
|
28
|
+
normalized_text = text.headers.map { |h| h.strip }.join("\n")
|
|
37
29
|
normalized_text << "\n\n"
|
|
38
30
|
unless fbody.to_s.empty?
|
|
39
|
-
|
|
31
|
+
normalized_text << fbody.to_s
|
|
40
32
|
else
|
|
41
33
|
normalized_text = text
|
|
42
34
|
end
|
|
43
35
|
end
|
|
44
36
|
end
|
|
45
|
-
|
|
37
|
+
|
|
46
38
|
@text = normalized_text
|
|
47
39
|
#@text = text
|
|
48
40
|
@simple_text_view.max_len = @max_len
|
|
@@ -78,7 +70,7 @@ module Watobo#:nodoc: all
|
|
|
78
70
|
@text_dt = FXDataTarget.new('')
|
|
79
71
|
@filter_dt = FXDataTarget.new('')
|
|
80
72
|
|
|
81
|
-
text_view_header = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_BOTTOM|LAYOUT_FIX_HEIGHT
|
|
73
|
+
text_view_header = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_BOTTOM|LAYOUT_FIX_HEIGHT, :height => 24, :padding => 0)
|
|
82
74
|
|
|
83
75
|
#@auto_apply_cbtn.connect(SEL_COMMAND, method(:onInterceptChanged))
|
|
84
76
|
|
|
@@ -94,7 +86,7 @@ module Watobo#:nodoc: all
|
|
|
94
86
|
# :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
95
87
|
|
|
96
88
|
@filter_text = FXComboBox.new(text_view_header, 20, @filter_dt, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
97
|
-
@filter_text.connect(SEL_COMMAND){
|
|
89
|
+
@filter_text.connect(SEL_COMMAND) {
|
|
98
90
|
applyFilter()
|
|
99
91
|
addFilterHistory()
|
|
100
92
|
}
|
|
@@ -104,27 +96,27 @@ module Watobo#:nodoc: all
|
|
|
104
96
|
}
|
|
105
97
|
|
|
106
98
|
menu = FXMenuPane.new(self)
|
|
107
|
-
FXMenuCommand.new(menu, "&Highlight").connect(SEL_COMMAND){
|
|
99
|
+
FXMenuCommand.new(menu, "&Highlight").connect(SEL_COMMAND) {
|
|
108
100
|
@filter_mode = SEL_TYPE_HIGHLIGHT
|
|
109
101
|
applyFilter()
|
|
110
102
|
@mode_btn.text = "Highlight"
|
|
111
|
-
}#, method(:switchMethod))
|
|
112
|
-
FXMenuCommand.new(menu, "&Grep").connect(SEL_COMMAND){
|
|
103
|
+
} #, method(:switchMethod))
|
|
104
|
+
FXMenuCommand.new(menu, "&Grep").connect(SEL_COMMAND) {
|
|
113
105
|
@filter_mode = SEL_TYPE_GREP
|
|
114
106
|
applyFilter()
|
|
115
107
|
@mode_btn.text = "Grep"
|
|
116
|
-
}#, method(:switchMethod))
|
|
108
|
+
} #, method(:switchMethod))
|
|
117
109
|
|
|
118
110
|
@auto_apply_cbtn = FXCheckButton.new(text_view_header, "auto-apply", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP|LAYOUT_RIGHT|LAYOUT_FILL_Y)
|
|
119
111
|
@mode_btn = FXMenuButton.new(text_view_header, "Highlight", nil, menu,
|
|
120
|
-
|
|
112
|
+
:opts => MENUBUTTON_DOWN|FRAME_RAISED|FRAME_THICK|ICON_AFTER_TEXT|LAYOUT_RIGHT|LAYOUT_FILL_Y)
|
|
121
113
|
|
|
122
114
|
reset_button = FXButton.new(text_view_header, "&Reset", nil, nil, 0, FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_Y)
|
|
123
|
-
reset_button.connect(SEL_COMMAND){ resetFilter() }
|
|
115
|
+
reset_button.connect(SEL_COMMAND) { resetFilter() }
|
|
124
116
|
|
|
125
117
|
text_box_frame = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
126
118
|
|
|
127
|
-
@simple_text_view = SimpleTextView.new(text_box_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y
|
|
119
|
+
@simple_text_view = SimpleTextView.new(text_box_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
|
|
128
120
|
@simple_text_view.style = 1
|
|
129
121
|
@simple_text_view.editable = false
|
|
130
122
|
@simple_text_view.textStyle -= TEXT_WORDWRAP
|
|
@@ -144,10 +136,10 @@ module Watobo#:nodoc: all
|
|
|
144
136
|
@match_pos_label.textColor = 'grey'
|
|
145
137
|
return true if pattern == ''
|
|
146
138
|
case @filter_mode
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
139
|
+
when SEL_TYPE_GREP
|
|
140
|
+
grepPattern(pattern)
|
|
141
|
+
when SEL_TYPE_HIGHLIGHT
|
|
142
|
+
highlightPattern(pattern)
|
|
151
143
|
end
|
|
152
144
|
end
|
|
153
145
|
|
|
@@ -197,7 +189,6 @@ module Watobo#:nodoc: all
|
|
|
197
189
|
@simple_text_view.makeMatchVisible(0)
|
|
198
190
|
|
|
199
191
|
@match_pos_label.text = "1/#{@simple_text_view.numMatches()}" if @simple_text_view.numMatches() > 0
|
|
200
|
-
|
|
201
192
|
end
|
|
202
193
|
|
|
203
194
|
def grepPattern(pattern)
|
|
@@ -223,12 +214,12 @@ module Watobo#:nodoc: all
|
|
|
223
214
|
@ctrl_pressed = false
|
|
224
215
|
|
|
225
216
|
widget.connect(SEL_KEYPRESS) { |sender, sel, event|
|
|
226
|
-
|
|
217
|
+
# puts event.code
|
|
227
218
|
@ctrl_pressed = true if event.code == KEY_Control_L or event.code == KEY_Control_R
|
|
228
219
|
# @shift_pressed = true if @ctrl_pressed and ( event.code == KEY_Shift_L or event.code == KEY_Shift_R )
|
|
229
220
|
if event.code == KEY_Return
|
|
230
221
|
highlight(@filter_text.text)
|
|
231
|
-
|
|
222
|
+
true # special handling of KEY_Return, because we don't want a linebreak in textbox.
|
|
232
223
|
end
|
|
233
224
|
|
|
234
225
|
if event.code == KEY_F1
|
|
@@ -237,12 +228,12 @@ module Watobo#:nodoc: all
|
|
|
237
228
|
FXMenuPane.new(self) do |menu_pane|
|
|
238
229
|
FXMenuCaption.new(menu_pane, "Hotkeys:")
|
|
239
230
|
FXMenuSeparator.new(menu_pane)
|
|
240
|
-
[
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
231
|
+
["<ctrl-r> - Reset Filter",
|
|
232
|
+
"<ctrl-g> - Grep",
|
|
233
|
+
"<ctrl-h> - Highlight",
|
|
234
|
+
"<ctrl-n> - Goto Next",
|
|
235
|
+
"<ctrl-shift-n> - Goto Prev",
|
|
236
|
+
"<ctrl-w> - Switch Wordwrap"
|
|
246
237
|
].each do |hk|
|
|
247
238
|
FXMenuCaption.new(menu_pane, hk).backColor = 'yellow'
|
|
248
239
|
end
|
|
@@ -257,26 +248,26 @@ module Watobo#:nodoc: all
|
|
|
257
248
|
|
|
258
249
|
if @ctrl_pressed
|
|
259
250
|
case event.code
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
251
|
+
when KEY_n
|
|
252
|
+
gotoNextMatch()
|
|
253
|
+
addFilterHistory()
|
|
254
|
+
when KEY_N
|
|
255
|
+
gotoPrevMatch()
|
|
256
|
+
addFilterHistory()
|
|
257
|
+
when KEY_w
|
|
258
|
+
@simple_text_view.textbox.textStyle ^= TEXT_WORDWRAP
|
|
259
|
+
when KEY_h
|
|
260
|
+
@mode_btn.text = "Highlight"
|
|
261
|
+
@filter_mode = SEL_TYPE_HIGHLIGHT
|
|
262
|
+
addFilterHistory()
|
|
263
|
+
applyFilter()
|
|
264
|
+
when KEY_g
|
|
265
|
+
@mode_btn.text = "Grep"
|
|
266
|
+
@filter_mode = SEL_TYPE_GREP
|
|
267
|
+
addFilterHistory()
|
|
268
|
+
applyFilter()
|
|
269
|
+
when KEY_r
|
|
270
|
+
resetFilter()
|
|
280
271
|
|
|
281
272
|
end
|
|
282
273
|
end
|
|
@@ -294,6 +285,7 @@ module Watobo#:nodoc: all
|
|
|
294
285
|
class RequestViewer < FXVerticalFrame
|
|
295
286
|
|
|
296
287
|
attr_accessor :max_len
|
|
288
|
+
|
|
297
289
|
def setText(text)
|
|
298
290
|
@text = text
|
|
299
291
|
@textviewer.max_len = @max_len
|
|
@@ -336,7 +328,7 @@ module Watobo#:nodoc: all
|
|
|
336
328
|
}
|
|
337
329
|
textviewer_tab = FXTabItem.new(@tabBook, "Text", nil)
|
|
338
330
|
tab_frame = FXVerticalFrame.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
339
|
-
@textviewer = TextViewer.new(tab_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y
|
|
331
|
+
@textviewer = TextViewer.new(tab_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
|
|
340
332
|
@textviewer.style = 1
|
|
341
333
|
@textviewer.editable = false
|
|
342
334
|
|
|
@@ -346,10 +338,15 @@ module Watobo#:nodoc: all
|
|
|
346
338
|
tab_frame = FXVerticalFrame.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
347
339
|
@hexViewer = HexViewer.new(tab_frame)
|
|
348
340
|
@viewers.push @hexViewer
|
|
349
|
-
|
|
341
|
+
|
|
350
342
|
FXTabItem.new(@tabBook, "Table", nil)
|
|
351
343
|
tab_frame = FXVerticalFrame.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
352
344
|
@viewers << Watobo::Gui::TableEditorFrame.new(tab_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
345
|
+
|
|
346
|
+
FXTabItem.new(@tabBook, "JSON", nil)
|
|
347
|
+
# tab_frame = FXVerticalFrame.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
348
|
+
# @viewers << Watobo::Gui::TableEditorFrame.new(tab_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
349
|
+
@viewers << JsonViewer.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
353
350
|
end
|
|
354
351
|
|
|
355
352
|
end
|
|
@@ -359,15 +356,16 @@ module Watobo#:nodoc: all
|
|
|
359
356
|
include Watobo::Gui::Utils
|
|
360
357
|
|
|
361
358
|
attr_accessor :max_len, :auto_filter
|
|
359
|
+
|
|
362
360
|
def setText(text, prefs={})
|
|
363
|
-
|
|
361
|
+
|
|
364
362
|
@text = text
|
|
365
363
|
@textviewer.max_len = @max_len
|
|
366
364
|
index = @tabBook.current
|
|
367
365
|
|
|
368
366
|
@viewers[index].setText(text)
|
|
369
|
-
|
|
370
|
-
|
|
367
|
+
# @viewers.map{|v| v.setText(text)}
|
|
368
|
+
# @textviewer.applyFilter if cp[:filter] == true
|
|
371
369
|
|
|
372
370
|
end
|
|
373
371
|
|
|
@@ -412,8 +410,8 @@ module Watobo#:nodoc: all
|
|
|
412
410
|
|
|
413
411
|
textviewer_tab = FXTabItem.new(@tabBook, "Text", nil)
|
|
414
412
|
tab_frame = FXVerticalFrame.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
415
|
-
@textviewer = TextViewer.new(
|
|
416
|
-
|
|
413
|
+
@textviewer = TextViewer.new(tab_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
|
|
414
|
+
# @textviewer = TextView2.new( tab_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
|
|
417
415
|
|
|
418
416
|
@textviewer.style = 2
|
|
419
417
|
@textviewer.editable = false
|
|
@@ -424,7 +422,7 @@ module Watobo#:nodoc: all
|
|
|
424
422
|
|
|
425
423
|
taglessviewer_tab = FXTabItem.new(@tabBook, "Tagless", nil)
|
|
426
424
|
tab_frame = FXVerticalFrame.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
427
|
-
tagless_frame = FXVerticalFrame.new(tab_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding=>0)
|
|
425
|
+
tagless_frame = FXVerticalFrame.new(tab_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
428
426
|
#text_view_header = FXHorizontalFrame.new(tagless_frame, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_BOTTOM)
|
|
429
427
|
@taglessviewer = TaglessViewer.new(tagless_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
|
|
430
428
|
@viewers << @taglessviewer
|
|
@@ -433,17 +431,20 @@ module Watobo#:nodoc: all
|
|
|
433
431
|
tab_frame = FXVerticalFrame.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
434
432
|
@hexViewer = HexViewer.new(tab_frame)
|
|
435
433
|
@viewers << @hexViewer
|
|
436
|
-
|
|
437
|
-
FXTabItem.new(@tabBook, "HTML", nil)
|
|
434
|
+
|
|
435
|
+
FXTabItem.new(@tabBook, "HTML", nil)
|
|
438
436
|
@html_viewer = HTMLViewerFrame.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
439
437
|
@viewers << @html_viewer
|
|
440
|
-
|
|
441
|
-
FXTabItem.new(@tabBook, "Custom", nil)
|
|
438
|
+
|
|
439
|
+
FXTabItem.new(@tabBook, "Custom", nil)
|
|
442
440
|
@viewers << CustomViewer.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
443
|
-
|
|
441
|
+
|
|
442
|
+
FXTabItem.new(@tabBook, "JSON", nil)
|
|
443
|
+
@viewers << JsonViewer.new(@tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
444
|
+
|
|
444
445
|
end
|
|
445
446
|
|
|
446
447
|
end
|
|
447
|
-
|
|
448
|
+
###################### end of namespace ############################
|
|
448
449
|
end
|
|
449
450
|
end
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# checkboxtree.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
|
if $0 == __FILE__
|
|
11
2
|
inc_path = File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))
|
|
12
3
|
$: << inc_path
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# checks_policy_frame.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
2
|
module Watobo#:nodoc: all
|
|
12
3
|
module Gui
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# client_cert_dialog.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
|
|
2
|
+
module Watobo #:nodoc: all
|
|
12
3
|
module Gui
|
|
13
4
|
class ClientCertDialog < FXDialogBox
|
|
14
5
|
class PEMFrame < FXVerticalFrame
|
|
@@ -24,6 +15,12 @@ module Watobo#:nodoc: all
|
|
|
24
15
|
client_cert[:ssl_client_key] = OpenSSL::PKey::RSA.new(File.read(@client_key_dt.value), @password_dt.value)
|
|
25
16
|
end
|
|
26
17
|
|
|
18
|
+
client_cert[:password] = @password_dt.value
|
|
19
|
+
|
|
20
|
+
client_cert[:certificate_file] = @client_cert_dt.value
|
|
21
|
+
client_cert[:key_file] = @client_key_dt.value
|
|
22
|
+
client_cert[:type] = :pem
|
|
23
|
+
|
|
27
24
|
return client_cert
|
|
28
25
|
rescue => bang
|
|
29
26
|
puts bang
|
|
@@ -34,30 +31,45 @@ module Watobo#:nodoc: all
|
|
|
34
31
|
|
|
35
32
|
def settings
|
|
36
33
|
s = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
:certificate_file => @client_cert_dt.value,
|
|
35
|
+
:password => @password_dt.value,
|
|
36
|
+
:key_file => @client_key_dt.value
|
|
40
37
|
}
|
|
41
38
|
end
|
|
42
39
|
|
|
40
|
+
def update_fields(c)
|
|
41
|
+
unless c.nil?
|
|
42
|
+
@client_cert_dt.value = c[:certificate_file]
|
|
43
|
+
@cert_path = File.dirname(c[:certificate_file]) + '/'
|
|
44
|
+
@client_key_dt.value = c[:key_file]
|
|
45
|
+
@password_dt.value = c[:password].nil? ? '' : c[:password]
|
|
46
|
+
@retype_dt.value = c[:password].nil? ? '' : c[:password]
|
|
47
|
+
@client_cert_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
48
|
+
@client_key_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
49
|
+
@password_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
50
|
+
@retype_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
43
55
|
def settings_valid?
|
|
44
56
|
unless @password_dt.value.empty?
|
|
45
57
|
puts "* password is set"
|
|
46
58
|
if @password_dt.value != @retype_dt.value
|
|
47
59
|
FXMessageBox.information(self, MBOX_OK, "Passwords", "Passwords don't match!")
|
|
48
|
-
|
|
60
|
+
return false
|
|
49
61
|
end
|
|
50
|
-
|
|
62
|
+
password = @password_dt.value
|
|
51
63
|
end
|
|
52
64
|
|
|
53
65
|
unless File.exist?(@client_cert_dt.value)
|
|
54
66
|
FXMessageBox.information(self, MBOX_OK, "File not found", "#{@client_cert_dt.value} does not exist!")
|
|
55
|
-
|
|
67
|
+
return false
|
|
56
68
|
end
|
|
57
69
|
|
|
58
70
|
unless File.exist?(@client_key_dt.value)
|
|
59
71
|
FXMessageBox.information(self, MBOX_OK, "File not found", "#{@client_key_dt.value} does not exist!")
|
|
60
|
-
|
|
72
|
+
return false
|
|
61
73
|
|
|
62
74
|
end
|
|
63
75
|
# last but not least check if private key can be accessed
|
|
@@ -65,7 +77,7 @@ module Watobo#:nodoc: all
|
|
|
65
77
|
key = OpenSSL::PKey::RSA.new(File.open(@client_key_dt.value), password)
|
|
66
78
|
rescue => bang
|
|
67
79
|
FXMessageBox.information(self, MBOX_OK, "Wrong Password", "Could not open private key file. Wrong password?")
|
|
68
|
-
|
|
80
|
+
return false
|
|
69
81
|
end
|
|
70
82
|
true
|
|
71
83
|
end
|
|
@@ -80,44 +92,44 @@ module Watobo#:nodoc: all
|
|
|
80
92
|
matrix = FXMatrix.new(self, 3, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
81
93
|
|
|
82
94
|
FXLabel.new(matrix, "Certificate File:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
83
|
-
@client_cert_txt = FXTextField.new(matrix,
|
|
84
|
-
|
|
85
|
-
|
|
95
|
+
@client_cert_txt = FXTextField.new(matrix, 25,
|
|
96
|
+
:target => @client_cert_dt, :selector => FXDataTarget::ID_VALUE,
|
|
97
|
+
:opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
|
|
86
98
|
|
|
87
|
-
FXButton.new(matrix, "Select").connect(SEL_COMMAND){ select_cert_file }
|
|
99
|
+
FXButton.new(matrix, "Select").connect(SEL_COMMAND) { select_cert_file }
|
|
88
100
|
|
|
89
101
|
FXLabel.new(matrix, "Key File:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
90
102
|
@client_key_txt = FXTextField.new(matrix, 25,
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
FXButton.new(matrix, "Select").connect(SEL_COMMAND){ select_key_file }
|
|
103
|
+
:target => @client_key_dt, :selector => FXDataTarget::ID_VALUE,
|
|
104
|
+
:opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
|
|
105
|
+
FXButton.new(matrix, "Select").connect(SEL_COMMAND) { select_key_file }
|
|
94
106
|
|
|
95
107
|
# matrix = FXMatrix.new(main_frame, 2, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
96
108
|
FXLabel.new(matrix, "Password:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
97
109
|
@password_txt = FXTextField.new(matrix, 25,
|
|
98
|
-
|
|
99
|
-
|
|
110
|
+
:target => @password_dt, :selector => FXDataTarget::ID_VALUE,
|
|
111
|
+
:opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
|
|
100
112
|
|
|
101
|
-
FXButton.new(matrix, "", :opts=>FRAME_NONE).disable
|
|
113
|
+
FXButton.new(matrix, "", :opts => FRAME_NONE).disable
|
|
102
114
|
|
|
103
115
|
FXLabel.new(matrix, "Retype:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
104
116
|
@retype_txt = FXTextField.new(matrix, 25,
|
|
105
|
-
|
|
106
|
-
|
|
117
|
+
:target => @retype_dt, :selector => FXDataTarget::ID_VALUE,
|
|
118
|
+
:opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
|
|
107
119
|
|
|
108
|
-
FXButton.new(matrix, "", :opts=>FRAME_NONE).disable
|
|
120
|
+
FXButton.new(matrix, "", :opts => FRAME_NONE).disable
|
|
109
121
|
|
|
110
122
|
end
|
|
111
123
|
|
|
112
124
|
private
|
|
113
125
|
|
|
114
126
|
def select_cert_file()
|
|
115
|
-
cert_filename = FXFileDialog.getOpenFilename(self, "Select Certificate File", @cert_path, "*.pem\n*")
|
|
127
|
+
cert_filename = FXFileDialog.getOpenFilename(self, "Select Certificate File", @cert_path, "*.pem,*.cer\n*")
|
|
116
128
|
if cert_filename != "" then
|
|
117
129
|
if File.exists?(cert_filename) then
|
|
118
130
|
@client_cert_dt.value = cert_filename
|
|
119
131
|
@client_cert_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
120
|
-
@cert_path = File.dirname(cert_filename)
|
|
132
|
+
@cert_path = File.dirname(cert_filename) + '/'
|
|
121
133
|
end
|
|
122
134
|
end
|
|
123
135
|
end
|
|
@@ -129,7 +141,7 @@ module Watobo#:nodoc: all
|
|
|
129
141
|
if File.exists?(key_filename) then
|
|
130
142
|
@client_key_dt.value = key_filename
|
|
131
143
|
@client_key_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
132
|
-
@cert_path = File.dirname(key_filename)
|
|
144
|
+
@cert_path = File.dirname(key_filename) + '/'
|
|
133
145
|
end
|
|
134
146
|
end
|
|
135
147
|
end
|
|
@@ -142,17 +154,18 @@ module Watobo#:nodoc: all
|
|
|
142
154
|
password = @password_dt.value
|
|
143
155
|
|
|
144
156
|
begin
|
|
145
|
-
puts "* open certfile: #{@client_cert_dt.value}"
|
|
146
157
|
if File.exist?(@client_cert_dt.value)
|
|
147
158
|
p12_data = nil
|
|
148
|
-
File.open(@client_cert_dt.value, "rb"){|fh|
|
|
159
|
+
File.open(@client_cert_dt.value, "rb") { |fh|
|
|
149
160
|
p12_data = fh.read
|
|
150
161
|
}
|
|
151
|
-
p12 = OpenSSL::PKCS12.new(
|
|
152
|
-
puts p12.certificate
|
|
162
|
+
p12 = OpenSSL::PKCS12.new(p12_data, password)
|
|
153
163
|
client_cert[:ssl_client_cert] = p12.certificate
|
|
154
164
|
client_cert[:ssl_client_key] = p12.key
|
|
155
|
-
client_cert[:extra_chain_certs] =
|
|
165
|
+
client_cert[:extra_chain_certs] = p12.ca_certs
|
|
166
|
+
client_cert[:certificate_file] = @client_cert_dt.value
|
|
167
|
+
client_cert[:password] = password
|
|
168
|
+
client_cert[:type] = :pkcs12
|
|
156
169
|
|
|
157
170
|
end
|
|
158
171
|
|
|
@@ -164,19 +177,31 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
164
177
|
return nil
|
|
165
178
|
end
|
|
166
179
|
|
|
180
|
+
def update_fields(c)
|
|
181
|
+
unless c.nil?
|
|
182
|
+
@client_cert_dt.value = c[:certificate_file]
|
|
183
|
+
@cert_path = File.dirname(c[:certificate_file]) + '/'
|
|
184
|
+
@password_dt.value = c[:password].nil? ? '' : c[:password]
|
|
185
|
+
@retype_dt.value = c[:password].nil? ? '' : c[:password]
|
|
186
|
+
@client_cert_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
187
|
+
@password_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
188
|
+
@retype_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
167
192
|
def settings_valid?
|
|
168
193
|
unless @password_dt.value.empty?
|
|
169
194
|
puts "* password is set"
|
|
170
195
|
if @password_dt.value != @retype_dt.value
|
|
171
196
|
FXMessageBox.information(self, MBOX_OK, "Passwords", "Passwords don't match!")
|
|
172
|
-
|
|
197
|
+
return false
|
|
173
198
|
end
|
|
174
|
-
|
|
199
|
+
password = @password_dt.value
|
|
175
200
|
end
|
|
176
201
|
|
|
177
202
|
unless File.exist?(@client_cert_dt.value)
|
|
178
203
|
FXMessageBox.information(self, MBOX_OK, "File not found", "#{@client_cert_dt.value} does not exist!")
|
|
179
|
-
|
|
204
|
+
return false
|
|
180
205
|
end
|
|
181
206
|
|
|
182
207
|
true
|
|
@@ -184,8 +209,8 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
184
209
|
|
|
185
210
|
def settings
|
|
186
211
|
s = {
|
|
187
|
-
|
|
188
|
-
|
|
212
|
+
:certificate_file => @client_cert_dt.value,
|
|
213
|
+
:password => @password_dt.value
|
|
189
214
|
}
|
|
190
215
|
end
|
|
191
216
|
|
|
@@ -199,25 +224,25 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
199
224
|
matrix = FXMatrix.new(self, 3, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
200
225
|
|
|
201
226
|
FXLabel.new(matrix, "PKCS12 File:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
202
|
-
@client_cert_txt = FXTextField.new(matrix,
|
|
203
|
-
|
|
204
|
-
|
|
227
|
+
@client_cert_txt = FXTextField.new(matrix, 25,
|
|
228
|
+
:target => @client_cert_dt, :selector => FXDataTarget::ID_VALUE,
|
|
229
|
+
:opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
|
|
205
230
|
|
|
206
|
-
FXButton.new(matrix, "Select").connect(SEL_COMMAND){ select_cert_file }
|
|
231
|
+
FXButton.new(matrix, "Select").connect(SEL_COMMAND) { select_cert_file }
|
|
207
232
|
|
|
208
233
|
FXLabel.new(matrix, "Password:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
209
234
|
@password_txt = FXTextField.new(matrix, 25,
|
|
210
|
-
|
|
211
|
-
|
|
235
|
+
:target => @password_dt, :selector => FXDataTarget::ID_VALUE,
|
|
236
|
+
:opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
|
|
212
237
|
|
|
213
|
-
FXButton.new(matrix, "", :opts=>FRAME_NONE).disable
|
|
238
|
+
FXButton.new(matrix, "", :opts => FRAME_NONE).disable
|
|
214
239
|
|
|
215
240
|
FXLabel.new(matrix, "Retype:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
216
241
|
@retype_txt = FXTextField.new(matrix, 25,
|
|
217
|
-
|
|
218
|
-
|
|
242
|
+
:target => @retype_dt, :selector => FXDataTarget::ID_VALUE,
|
|
243
|
+
:opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
|
|
219
244
|
|
|
220
|
-
FXButton.new(matrix, "", :opts=>FRAME_NONE).disable
|
|
245
|
+
FXButton.new(matrix, "", :opts => FRAME_NONE).disable
|
|
221
246
|
|
|
222
247
|
end
|
|
223
248
|
|
|
@@ -246,7 +271,7 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
246
271
|
|
|
247
272
|
def savePasswords?()
|
|
248
273
|
return false
|
|
249
|
-
|
|
274
|
+
#@save_pws_cbt.checked?
|
|
250
275
|
end
|
|
251
276
|
|
|
252
277
|
include Responder
|
|
@@ -257,15 +282,12 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
257
282
|
FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
|
|
258
283
|
|
|
259
284
|
@password_policy = {
|
|
260
|
-
|
|
285
|
+
:save_passwords => false
|
|
261
286
|
}
|
|
262
287
|
|
|
263
288
|
@cert_path = nil
|
|
264
289
|
@client_certificates = {}
|
|
265
290
|
|
|
266
|
-
current_certs = Watobo.project.getClientCertificates
|
|
267
|
-
@client_certificates = current_certs unless current_certs.nil?
|
|
268
|
-
|
|
269
291
|
@password_policy.update prefs[:password_policy] if prefs.has_key? :password_policy
|
|
270
292
|
|
|
271
293
|
@site_dt = FXDataTarget.new('')
|
|
@@ -279,8 +301,8 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
279
301
|
|
|
280
302
|
@scope_only_cb.connect(SEL_COMMAND) { updateSitesCombo() }
|
|
281
303
|
|
|
282
|
-
@sites_combo = FXComboBox.new(frame, 5,
|
|
283
|
-
|
|
304
|
+
@sites_combo = FXComboBox.new(frame, 5, @site_dt, FXDataTarget::ID_VALUE,
|
|
305
|
+
COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
284
306
|
|
|
285
307
|
@sites_combo.numVisible = @sites_combo.numItems >= 20 ? 20 : @sites_combo.numItems
|
|
286
308
|
@sites_combo.numColumns = 25
|
|
@@ -302,14 +324,14 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
302
324
|
@cert_settings << PKCS12Frame.new(@tabBook)
|
|
303
325
|
|
|
304
326
|
buttons = FXHorizontalFrame.new(main_frame, :opts => LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,
|
|
305
|
-
|
|
327
|
+
:padLeft => 40, :padRight => 40, :padTop => 20, :padBottom => 20)
|
|
306
328
|
|
|
307
329
|
accept = FXButton.new(buttons, "&Accept", nil, self, ID_ACCEPT,
|
|
308
|
-
|
|
330
|
+
FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
|
|
309
331
|
accept.enable
|
|
310
332
|
# Cancel
|
|
311
333
|
FXButton.new(buttons, "&Cancel", nil, self, ID_CANCEL,
|
|
312
|
-
|
|
334
|
+
FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
|
|
313
335
|
end
|
|
314
336
|
|
|
315
337
|
private
|
|
@@ -318,8 +340,8 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
318
340
|
@sites_combo.clearItems
|
|
319
341
|
@sites_combo.appendItem(NO_SELECTION, nil)
|
|
320
342
|
@site_dt.value = NO_SELECTION
|
|
321
|
-
Watobo::Chats.sites(:in_scope => @scope_only_cb.checked?
|
|
322
|
-
|
|
343
|
+
Watobo::Chats.sites(:in_scope => @scope_only_cb.checked?) { |site|
|
|
344
|
+
#puts "Site: #{site}"
|
|
323
345
|
@sites_combo.appendItem(site, site)
|
|
324
346
|
}
|
|
325
347
|
@sites_combo.numVisible = @sites_combo.numItems >= 20 ? 20 : @sites_combo.numItems
|
|
@@ -339,40 +361,27 @@ puts "* open certfile: #{@client_cert_dt.value}"
|
|
|
339
361
|
end
|
|
340
362
|
end
|
|
341
363
|
|
|
342
|
-
def updateFields()
|
|
343
|
-
# @sites_combo.handle(self, FXSEL(SEL_UPDATE, 1), nil)
|
|
344
|
-
@client_cert_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
345
|
-
@client_key_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
346
|
-
end
|
|
347
|
-
|
|
348
364
|
def update_fields(sender, sel, item)
|
|
349
365
|
@site_dt.value = item
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
# @retype_dt.value = c[:password]
|
|
357
|
-
# @client_cert_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
358
|
-
# @client_key_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
359
|
-
# @password_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
360
|
-
# @retype_txt.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
361
|
-
end
|
|
366
|
+
c = Watobo::ClientCertStore.get(item)
|
|
367
|
+
return false if c.nil?
|
|
368
|
+
i = c[:type] == :pem ? 0 : 1
|
|
369
|
+
@tabBook.current = i
|
|
370
|
+
@cert_settings[i].update_fields c
|
|
371
|
+
|
|
362
372
|
end
|
|
363
373
|
|
|
364
374
|
def onAccept(sender, sel, event)
|
|
365
|
-
|
|
366
375
|
password = nil
|
|
367
376
|
if @site_dt.value.empty? or @site_dt.value == NO_SELECTION
|
|
368
377
|
FXMessageBox.information(self, MBOX_OK, "No Site Selected", "You must select a site from the drop down list.")
|
|
369
|
-
|
|
378
|
+
return 0
|
|
370
379
|
end
|
|
371
380
|
|
|
372
381
|
index = @tabBook.current
|
|
373
382
|
unless @cert_settings[index].settings_valid?
|
|
374
383
|
puts "Wrong settings"
|
|
375
|
-
|
|
384
|
+
return 0
|
|
376
385
|
end
|
|
377
386
|
|
|
378
387
|
Watobo::ClientCertStore.set(@site_dt.value, @cert_settings[index].cert)
|