From a43519156430d11966af40f47240db5b0fd6b2cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 25 Oct 2017 16:45:56 +0000 Subject: [PATCH 1/3] Introduce separate proxy configuration class Introduce separate proxy configuration class and userexit to manipulate proxy settings --- src/zabapgit.prog.abap | 1 + src/zabapgit_2fa.prog.abap | 11 ++-- src/zabapgit_app.prog.abap | 7 ++- src/zabapgit_app_impl.prog.abap | 7 +++ src/zabapgit_exit.prog.abap | 28 ++++++++++- src/zabapgit_http.prog.abap | 21 ++++---- src/zabapgit_persistence.prog.abap | 2 + src/zabapgit_proxy.prog.abap | 81 ++++++++++++++++++++++++++++++ src/zabapgit_proxy.prog.xml | 25 +++++++++ 9 files changed, 165 insertions(+), 18 deletions(-) create mode 100644 src/zabapgit_proxy.prog.abap create mode 100644 src/zabapgit_proxy.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 72a70665d..1dadab374 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -48,6 +48,7 @@ INCLUDE zabapgit_folder_logic. INCLUDE zabapgit_requirements. INCLUDE zabapgit_authorizations. INCLUDE zabapgit_exit. +INCLUDE zabapgit_proxy. INCLUDE zabapgit_stage. INCLUDE zabapgit_git_helpers. diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index b7c0a38e3..1422f89b0 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -446,17 +446,18 @@ CLASS lcl_2fa_github_auth IMPLEMENTATION. ENDMETHOD. METHOD is_2fa_required. - DATA: li_client TYPE REF TO if_http_client, - lo_settings TYPE REF TO lcl_settings. - lo_settings = lcl_app=>settings( )->read( ). + DATA: li_client TYPE REF TO if_http_client, + lo_proxy TYPE REF TO lcl_proxy_configuration. + + lo_proxy = lcl_app=>proxy( ). cl_http_client=>create_by_url( EXPORTING url = gc_github_api_url ssl_id = 'ANONYM' - proxy_host = lo_settings->get_proxy_url( ) - proxy_service = lo_settings->get_proxy_port( ) + proxy_host = lo_proxy->get_proxy_url( ) + proxy_service = lo_proxy->get_proxy_port( ) IMPORTING client = li_client EXCEPTIONS diff --git a/src/zabapgit_app.prog.abap b/src/zabapgit_app.prog.abap index 303a501b7..a11fe7f18 100644 --- a/src/zabapgit_app.prog.abap +++ b/src/zabapgit_app.prog.abap @@ -7,6 +7,7 @@ CLASS lcl_persistence_user DEFINITION DEFERRED. CLASS lcl_repo_srv DEFINITION DEFERRED. CLASS lcl_persistence_db DEFINITION DEFERRED. CLASS lcl_persist_settings DEFINITION DEFERRED. +CLASS lcl_proxy_configuration DEFINITION DEFERRED. *----------------------------------------------------------------------* * CLASS lcl_app DEFINITION @@ -32,11 +33,15 @@ CLASS lcl_app DEFINITION FINAL. CLASS-METHODS settings RETURNING VALUE(ro_settings) TYPE REF TO lcl_persist_settings. + CLASS-METHODS proxy + RETURNING VALUE(ro_proxy) TYPE REF TO lcl_proxy_configuration. + PRIVATE SECTION. CLASS-DATA: go_gui TYPE REF TO lcl_gui, go_current_user TYPE REF TO lcl_persistence_user, go_db TYPE REF TO lcl_persistence_db, go_repo_srv TYPE REF TO lcl_repo_srv, - go_settings TYPE REF TO lcl_persist_settings. + go_settings TYPE REF TO lcl_persist_settings, + go_proxy TYPE REF TO lcl_proxy_configuration. ENDCLASS. "lcl_app diff --git a/src/zabapgit_app_impl.prog.abap b/src/zabapgit_app_impl.prog.abap index 831819ced..a23407dd9 100644 --- a/src/zabapgit_app_impl.prog.abap +++ b/src/zabapgit_app_impl.prog.abap @@ -56,4 +56,11 @@ CLASS lcl_app IMPLEMENTATION. ro_settings = go_settings. ENDMETHOD. + METHOD proxy. + IF go_proxy IS NOT BOUND. + CREATE OBJECT go_proxy. + ENDIF. + ro_proxy = go_proxy. + ENDMETHOD. + ENDCLASS. "lcl_app diff --git a/src/zabapgit_exit.prog.abap b/src/zabapgit_exit.prog.abap index a07136ed7..5481c3181 100644 --- a/src/zabapgit_exit.prog.abap +++ b/src/zabapgit_exit.prog.abap @@ -8,7 +8,17 @@ INTERFACE lif_exit. change_local_host CHANGING ct_hosts TYPE zif_abapgit_definitions=>ty_icm_sinfo2_tt, allow_sap_objects - RETURNING VALUE(rv_allowed) TYPE abap_bool. + RETURNING VALUE(rv_allowed) TYPE abap_bool, + change_proxy_url + IMPORTING iv_repo_url TYPE csequence + CHANGING c_proxy_url TYPE string, + change_proxy_port + IMPORTING iv_repo_url TYPE csequence + CHANGING c_proxy_port TYPE string, + change_proxy_authentication + IMPORTING iv_repo_url TYPE csequence + CHANGING c_proxy_authentication TYPE abap_bool. + ENDINTERFACE. @@ -48,4 +58,20 @@ CLASS lcl_exit IMPLEMENTATION. rv_allowed = abap_false. ENDMETHOD. + + METHOD lif_exit~change_proxy_url. +* default behavior change nothing + RETURN. + ENDMETHOD. + + METHOD lif_exit~change_proxy_port. +* default behavior change nothing + RETURN. + ENDMETHOD. + + METHOD lif_exit~change_proxy_authentication. +* default behavior change nothing + RETURN. + ENDMETHOD. + ENDCLASS. diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index 0420e0a1e..f2cfdc226 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -414,21 +414,20 @@ CLASS lcl_http IMPLEMENTATION. METHOD create_by_url. - DATA: lv_uri TYPE string, - lv_scheme TYPE string, - li_client TYPE REF TO if_http_client, - lo_settings TYPE REF TO lcl_settings, - lv_text TYPE string. + DATA: lv_uri TYPE string, + lv_scheme TYPE string, + li_client TYPE REF TO if_http_client, + lo_proxy_configuration TYPE REF TO lcl_proxy_configuration, + lv_text TYPE string. - - lo_settings = lcl_app=>settings( )->read( ). + lo_proxy_configuration = lcl_app=>proxy( ). cl_http_client=>create_by_url( EXPORTING url = lcl_url=>host( iv_url ) ssl_id = 'ANONYM' - proxy_host = lo_settings->get_proxy_url( ) - proxy_service = lo_settings->get_proxy_port( ) + proxy_host = lo_proxy_configuration->get_proxy_url( iv_url ) + proxy_service = lo_proxy_configuration->get_proxy_port( iv_url ) IMPORTING client = li_client EXCEPTIONS @@ -449,7 +448,7 @@ CLASS lcl_http IMPLEMENTATION. zcx_abapgit_exception=>raise( lv_text ). ENDIF. - IF lo_settings->get_proxy_authentication( ) = abap_true. + IF lo_proxy_configuration->get_proxy_authentication( iv_url ) = abap_true. lcl_proxy_auth=>run( li_client ). ENDIF. @@ -502,7 +501,7 @@ CLASS lcl_http IMPLEMENTATION. DATA: lv_host TYPE string, lt_list TYPE zif_abapgit_definitions=>ty_icm_sinfo2_tt, - li_exit TYPE ref to lif_exit. + li_exit TYPE REF TO lif_exit. CALL FUNCTION 'ICM_GET_INFO2' TABLES diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 144784bb0..70cc5b3e4 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -2,7 +2,9 @@ *& Include ZABAPGIT_PERSISTENCE *&---------------------------------------------------------------------* +INTERFACE lif_exit DEFERRED. CLASS lcl_settings DEFINITION DEFERRED. +CLASS lcl_exit DEFINITION DEFERRED. CLASS lcl_persist_migrate DEFINITION FINAL. diff --git a/src/zabapgit_proxy.prog.abap b/src/zabapgit_proxy.prog.abap new file mode 100644 index 000000000..9ec8712a8 --- /dev/null +++ b/src/zabapgit_proxy.prog.abap @@ -0,0 +1,81 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_proxy +*&---------------------------------------------------------------------* + +CLASS lcl_proxy_configuration DEFINITION CREATE PUBLIC. + + PUBLIC SECTION. + METHODS: + constructor, + + get_proxy_url + IMPORTING + iv_repo_url TYPE csequence OPTIONAL + RETURNING + VALUE(rv_proxy_url) TYPE string, + + get_proxy_port + IMPORTING + iv_repo_url TYPE csequence OPTIONAL + RETURNING + VALUE(rv_port) TYPE string, + + get_proxy_authentication + IMPORTING + iv_repo_url TYPE csequence OPTIONAL + RETURNING + VALUE(rv_auth) TYPE abap_bool. + + PRIVATE SECTION. + DATA: mo_settings TYPE REF TO lcl_settings, + mi_exit TYPE REF TO lif_exit. + +ENDCLASS. + +CLASS lcl_proxy_configuration IMPLEMENTATION. + + METHOD constructor. + + mo_settings = lcl_app=>settings( )->read( ). + + mi_exit = lcl_exit=>get_instance( ). + + ENDMETHOD. + + METHOD get_proxy_url. + + rv_proxy_url = mo_settings->get_proxy_url( ). + + mi_exit->change_proxy_url( + EXPORTING + iv_repo_url = iv_repo_url + CHANGING + c_proxy_url = rv_proxy_url ). + + ENDMETHOD. + + METHOD get_proxy_port. + + rv_port = mo_settings->get_proxy_port( ). + + mi_exit->change_proxy_port( + EXPORTING + iv_repo_url = iv_repo_url + CHANGING + c_proxy_port = rv_port ). + + ENDMETHOD. + + METHOD get_proxy_authentication. + + rv_auth = mo_settings->get_proxy_authentication( ). + + mi_exit->change_proxy_authentication( + EXPORTING + iv_repo_url = iv_repo_url + CHANGING + c_proxy_authentication = rv_auth ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_proxy.prog.xml b/src/zabapgit_proxy.prog.xml new file mode 100644 index 000000000..e930aac14 --- /dev/null +++ b/src/zabapgit_proxy.prog.xml @@ -0,0 +1,25 @@ + + + + + + ZABAPGIT_PROXY + A + X + S + D$ + I + X + D$S + X + + + + R + ZABAPGIT_PROXY + 14 + + + + + From 97791b9ead956bdcd1956afa0e35dd7eba5dd154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 25 Oct 2017 16:57:14 +0000 Subject: [PATCH 2/3] Fix linter errors --- src/zabapgit_app_impl.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_app_impl.prog.abap b/src/zabapgit_app_impl.prog.abap index a23407dd9..9d1c979cb 100644 --- a/src/zabapgit_app_impl.prog.abap +++ b/src/zabapgit_app_impl.prog.abap @@ -57,7 +57,7 @@ CLASS lcl_app IMPLEMENTATION. ENDMETHOD. METHOD proxy. - IF go_proxy IS NOT BOUND. + IF go_proxy IS NOT BOUND. CREATE OBJECT go_proxy. ENDIF. ro_proxy = go_proxy. From f4d8f3ff0c816d9715a50d8da282602762b070cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 25 Oct 2017 17:39:19 +0000 Subject: [PATCH 3/3] Remove superfluous deferred declarations --- src/zabapgit_persistence.prog.abap | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 70cc5b3e4..144784bb0 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -2,9 +2,7 @@ *& Include ZABAPGIT_PERSISTENCE *&---------------------------------------------------------------------* -INTERFACE lif_exit DEFERRED. CLASS lcl_settings DEFINITION DEFERRED. -CLASS lcl_exit DEFINITION DEFERRED. CLASS lcl_persist_migrate DEFINITION FINAL.