From eb10fae8efd70cc979fee868cab6abc86a2dc8fd Mon Sep 17 00:00:00 2001 From: Daniel Wegner Date: Mon, 2 Mar 2020 15:30:23 +0100 Subject: [PATCH] Proxy bypass (#3221) * add proxy bypass option in settings * add proxy bypass popup and persist settings * add proxy bypass to proxy config class * Fix Proxy Bypass Button HTML * Fix indentation * Implement Method popup_proxy_bypass * Fix behaviour in case of empty range tab * Fix behaviour in case of empty range tab 2 --- src/http/zcl_abapgit_proxy_config.clas.abap | 36 ++++++++++++++++--- .../zcl_abapgit_gui_page_settings.clas.abap | 26 ++++++++++---- src/ui/zcl_abapgit_popups.clas.abap | 32 +++++++++++++++-- ..._abapgit_ui_injector.clas.testclasses.abap | 4 +++ src/ui/zif_abapgit_popups.intf.abap | 11 ++++-- src/zcl_abapgit_settings.clas.abap | 22 ++++++++++-- src/zif_abapgit_definitions.intf.abap | 4 +++ 7 files changed, 118 insertions(+), 17 deletions(-) diff --git a/src/http/zcl_abapgit_proxy_config.clas.abap b/src/http/zcl_abapgit_proxy_config.clas.abap index d327266b1..0ef5e928b 100644 --- a/src/http/zcl_abapgit_proxy_config.clas.abap +++ b/src/http/zcl_abapgit_proxy_config.clas.abap @@ -26,11 +26,18 @@ CLASS zcl_abapgit_proxy_config DEFINITION PUBLIC FINAL CREATE PUBLIC. DATA: mo_settings TYPE REF TO zcl_abapgit_settings, mi_exit TYPE REF TO zif_abapgit_exit. + METHODS: + bypass_proxy + IMPORTING + iv_repo_url TYPE csequence OPTIONAL + RETURNING + VALUE(rv_bypass_proxy) TYPE abap_bool. + ENDCLASS. -CLASS ZCL_ABAPGIT_PROXY_CONFIG IMPLEMENTATION. +CLASS zcl_abapgit_proxy_config IMPLEMENTATION. METHOD constructor. @@ -44,7 +51,9 @@ CLASS ZCL_ABAPGIT_PROXY_CONFIG IMPLEMENTATION. METHOD get_proxy_authentication. - rv_auth = mo_settings->get_proxy_authentication( ). + IF bypass_proxy( iv_repo_url ) = abap_false. + rv_auth = mo_settings->get_proxy_authentication( ). + ENDIF. mi_exit->change_proxy_authentication( EXPORTING @@ -57,7 +66,9 @@ CLASS ZCL_ABAPGIT_PROXY_CONFIG IMPLEMENTATION. METHOD get_proxy_port. - rv_port = mo_settings->get_proxy_port( ). + IF bypass_proxy( iv_repo_url ) = abap_false. + rv_port = mo_settings->get_proxy_port( ). + ENDIF. mi_exit->change_proxy_port( EXPORTING @@ -72,7 +83,9 @@ CLASS ZCL_ABAPGIT_PROXY_CONFIG IMPLEMENTATION. METHOD get_proxy_url. - rv_proxy_url = mo_settings->get_proxy_url( ). + IF bypass_proxy( iv_repo_url ) = abap_false. + rv_proxy_url = mo_settings->get_proxy_url( ). + ENDIF. mi_exit->change_proxy_url( EXPORTING @@ -81,4 +94,19 @@ CLASS ZCL_ABAPGIT_PROXY_CONFIG IMPLEMENTATION. cv_proxy_url = rv_proxy_url ). ENDMETHOD. + + + METHOD bypass_proxy. + + DATA lt_proxy_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url. + + lt_proxy_bypass = mo_settings->get_proxy_bypass( ). + + IF lt_proxy_bypass IS NOT INITIAL + AND iv_repo_url IN lt_proxy_bypass. + rv_bypass_proxy = abap_true. + ENDIF. + + ENDMETHOD. + ENDCLASS. diff --git a/src/ui/zcl_abapgit_gui_page_settings.clas.abap b/src/ui/zcl_abapgit_gui_page_settings.clas.abap index d9a3d7e4e..ecc81a5d8 100644 --- a/src/ui/zcl_abapgit_gui_page_settings.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_settings.clas.abap @@ -8,7 +8,8 @@ CLASS zcl_abapgit_gui_page_settings DEFINITION CONSTANTS: BEGIN OF c_action, - save_settings TYPE string VALUE 'save_settings', + save_settings TYPE string VALUE 'save_settings', + change_proxy_bypass TYPE string VALUE 'change_proxy_bypass', END OF c_action. METHODS constructor. @@ -22,6 +23,7 @@ CLASS zcl_abapgit_gui_page_settings DEFINITION DATA mo_settings TYPE REF TO zcl_abapgit_settings . DATA mv_error TYPE abap_bool . DATA mt_post_fields TYPE tihttpnvp . + DATA mt_proxy_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url. METHODS post_commit_msg . METHODS post_development_internals . @@ -111,7 +113,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_settings IMPLEMENTATION. METHOD constructor. @@ -359,6 +361,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. mo_settings->set_proxy_authentication( abap_false ). ENDIF. + mo_settings->set_proxy_bypass( mt_proxy_bypass ). + ENDMETHOD. @@ -594,8 +598,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. METHOD render_link_hints. - DATA: lv_checked TYPE string, - lv_link_hint_key TYPE char01. + DATA: lv_checked TYPE string, + lv_link_hint_key TYPE char01. IF mo_settings->get_link_hints_enabled( ) = abap_true. lv_checked = 'checked'. @@ -669,6 +673,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. ro_html->add( `` ). ENDIF. ro_html->add( |
| ). + ro_html->add( |
| ). + ro_html->add( || ). + ro_html->add( |
| ). + ro_html->add( || ). + ro_html->add( |
| ). ro_html->add( |
| ). @@ -718,8 +728,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. DATA: BEGIN OF ls_sel, default TYPE string, - dark TYPE string, - belize TYPE string, + dark TYPE string, + belize TYPE string, END OF ls_sel. CASE mo_settings->get_ui_theme( ). @@ -781,6 +791,10 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. ENDIF. ev_state = zcl_abapgit_gui=>c_event_state-go_back. + WHEN c_action-change_proxy_bypass. + mt_proxy_bypass = zcl_abapgit_ui_factory=>get_popups( )->popup_proxy_bypass( mo_settings->get_proxy_bypass( ) ). + + ev_state = zcl_abapgit_gui=>c_event_state-no_more_act. ENDCASE. ENDMETHOD. diff --git a/src/ui/zcl_abapgit_popups.clas.abap b/src/ui/zcl_abapgit_popups.clas.abap index cc2bb3ad1..e31ebfac9 100644 --- a/src/ui/zcl_abapgit_popups.clas.abap +++ b/src/ui/zcl_abapgit_popups.clas.abap @@ -24,7 +24,8 @@ CLASS zcl_abapgit_popups DEFINITION popup_to_select_from_list FOR zif_abapgit_popups~popup_to_select_from_list, branch_popup_callback FOR zif_abapgit_popups~branch_popup_callback, package_popup_callback FOR zif_abapgit_popups~package_popup_callback, - popup_transport_request FOR zif_abapgit_popups~popup_transport_request. + popup_transport_request FOR zif_abapgit_popups~popup_transport_request, + popup_proxy_bypass FOR zif_abapgit_popups~popup_proxy_bypass. PROTECTED SECTION. PRIVATE SECTION. @@ -94,7 +95,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. +CLASS zcl_abapgit_popups IMPLEMENTATION. METHOD add_field. @@ -1198,6 +1199,32 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_popups~popup_proxy_bypass. + rt_proxy_bypass = it_proxy_bypass. + CALL FUNCTION 'COMPLEX_SELECTIONS_DIALOG' + EXPORTING + title = 'Bypass proxy settings for these Hosts & Domains' + signed = abap_false + lower_case = abap_true + no_interval_check = abap_true + TABLES + range = rt_proxy_bypass + EXCEPTIONS + no_range_tab = 1 + cancelled = 2 + internal_error = 3 + invalid_fieldname = 4 + OTHERS = 5. + CASE sy-subrc. + WHEN 0. + WHEN 2. + RAISE EXCEPTION TYPE zcx_abapgit_cancel. + WHEN OTHERS. + zcx_abapgit_exception=>raise( 'Error from COMPLEX_SELECTIONS_DIALOG' ). + ENDCASE. + ENDMETHOD. + + METHOD _popup_3_get_values. DATA lv_answer TYPE c LENGTH 1. @@ -1240,4 +1267,5 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDIF. ENDMETHOD. + ENDCLASS. diff --git a/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap b/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap index 7da30a73a..a3e39b75c 100644 --- a/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap +++ b/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap @@ -96,6 +96,10 @@ CLASS ltcl_abapgit_popups_mock IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_popups~popup_proxy_bypass. + + ENDMETHOD. + ENDCLASS. CLASS ltcl_no_dependency_injection IMPLEMENTATION. diff --git a/src/ui/zif_abapgit_popups.intf.abap b/src/ui/zif_abapgit_popups.intf.abap index 813ae6408..44ddcc6f0 100644 --- a/src/ui/zif_abapgit_popups.intf.abap +++ b/src/ui/zif_abapgit_popups.intf.abap @@ -17,8 +17,8 @@ INTERFACE zif_abapgit_popups METHODS popup_package_export EXPORTING - !ev_package TYPE devclass - !ev_folder_logic TYPE string + !ev_package TYPE devclass + !ev_folder_logic TYPE string !ev_serialize_master_lang_only TYPE abap_bool RAISING zcx_abapgit_exception . @@ -144,4 +144,11 @@ INTERFACE zif_abapgit_popups VALUE(rv_transport) TYPE trkorr RAISING zcx_abapgit_exception. + METHODS popup_proxy_bypass + IMPORTING + !it_proxy_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url + RETURNING + VALUE(rt_proxy_bypass) TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url + RAISING + zcx_abapgit_exception. ENDINTERFACE. diff --git a/src/zcl_abapgit_settings.clas.abap b/src/zcl_abapgit_settings.clas.abap index b5d7ad07c..062bd5ba2 100644 --- a/src/zcl_abapgit_settings.clas.abap +++ b/src/zcl_abapgit_settings.clas.abap @@ -13,8 +13,8 @@ CLASS zcl_abapgit_settings DEFINITION PUBLIC CREATE PUBLIC. CONSTANTS: BEGIN OF c_ui_theme, default TYPE string VALUE 'default', - dark TYPE string VALUE 'dark', - belize TYPE string VALUE 'belize', + dark TYPE string VALUE 'dark', + belize TYPE string VALUE 'belize', END OF c_ui_theme. METHODS: @@ -27,6 +27,9 @@ CLASS zcl_abapgit_settings DEFINITION PUBLIC CREATE PUBLIC. set_proxy_authentication IMPORTING iv_auth TYPE abap_bool, + set_proxy_bypass + IMPORTING + it_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url OPTIONAL, get_proxy_url RETURNING VALUE(rv_proxy_url) TYPE string, @@ -36,6 +39,8 @@ CLASS zcl_abapgit_settings DEFINITION PUBLIC CREATE PUBLIC. get_proxy_authentication RETURNING VALUE(rv_auth) TYPE abap_bool, + get_proxy_bypass + RETURNING VALUE(rt_bypass) TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url, set_run_critical_tests IMPORTING iv_run TYPE abap_bool, @@ -142,6 +147,7 @@ CLASS zcl_abapgit_settings DEFINITION PUBLIC CREATE PUBLIC. proxy_url TYPE string, proxy_port TYPE string, proxy_auth TYPE string, + proxy_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url, run_critical_tests TYPE abap_bool, experimental_features TYPE abap_bool, commitmsg_comment_length TYPE i, @@ -158,7 +164,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. +CLASS zcl_abapgit_settings IMPLEMENTATION. METHOD get_adt_jump_enabled. @@ -226,6 +232,11 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. ENDMETHOD. + METHOD get_proxy_bypass. + rt_bypass = ms_settings-proxy_bypass. + ENDMETHOD. + + METHOD get_run_critical_tests. rv_run = ms_settings-run_critical_tests. ENDMETHOD. @@ -352,6 +363,10 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. ENDMETHOD. + METHOD set_proxy_bypass. + ms_settings-proxy_bypass = it_bypass. + ENDMETHOD. + METHOD set_run_critical_tests. ms_settings-run_critical_tests = iv_run. ENDMETHOD. @@ -398,4 +413,5 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. cg_data = ms_settings ). ENDMETHOD. + ENDCLASS. diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index 78bc31d8b..8dcf44788 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -364,6 +364,10 @@ INTERFACE zif_abapgit_definitions tty_col_spec TYPE STANDARD TABLE OF ty_col_spec WITH NON-UNIQUE KEY tech_name. + TYPES: + ty_proxy_bypass_url TYPE c LENGTH 255, + ty_range_proxy_bypass_url TYPE RANGE OF ty_proxy_bypass_url. + CONSTANTS: BEGIN OF c_git_branch_type, branch TYPE ty_git_branch_type VALUE 'HD',