Introduce separate proxy configuration class

Introduce separate proxy configuration class and userexit to manipulate proxy settings
This commit is contained in:
Christian Günter 2017-10-25 16:45:56 +00:00
parent a228f701a6
commit a435191564
9 changed files with 165 additions and 18 deletions

View File

@ -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.

View File

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

View File

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

View File

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

View File

@ -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.

View File

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

View File

@ -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.

View File

@ -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.

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZABAPGIT_PROXY</NAME>
<STATE>A</STATE>
<VARCL>X</VARCL>
<DBAPL>S</DBAPL>
<DBNA>D$</DBNA>
<SUBC>I</SUBC>
<FIXPT>X</FIXPT>
<LDBNAME>D$S</LDBNAME>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<TPOOL>
<item>
<ID>R</ID>
<ENTRY>ZABAPGIT_PROXY</ENTRY>
<LENGTH>14</LENGTH>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>