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 + + + + +