mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00
more refactoring, new lcl_http_client class
This commit is contained in:
parent
a9549aaa2c
commit
42a918609e
|
@ -34,9 +34,6 @@ CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
RETURNING VALUE(ro_branch_list) TYPE REF TO lcl_git_branch_list
|
RETURNING VALUE(ro_branch_list) TYPE REF TO lcl_git_branch_list
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
* CLASS-METHODS class_constructor.
|
|
||||||
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
CONSTANTS: BEGIN OF c_service,
|
CONSTANTS: BEGIN OF c_service,
|
||||||
receive TYPE string VALUE 'receive', "#EC NOTEXT
|
receive TYPE string VALUE 'receive', "#EC NOTEXT
|
||||||
|
@ -46,7 +43,7 @@ CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
CLASS-METHODS branch_list
|
CLASS-METHODS branch_list
|
||||||
IMPORTING iv_url TYPE string
|
IMPORTING iv_url TYPE string
|
||||||
iv_service TYPE string
|
iv_service TYPE string
|
||||||
EXPORTING ei_client TYPE REF TO if_http_client
|
EXPORTING eo_client TYPE REF TO lcl_http_client
|
||||||
eo_branch_list TYPE REF TO lcl_git_branch_list
|
eo_branch_list TYPE REF TO lcl_git_branch_list
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
@ -54,7 +51,7 @@ CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
IMPORTING iv_url TYPE string
|
IMPORTING iv_url TYPE string
|
||||||
iv_service TYPE string
|
iv_service TYPE string
|
||||||
iv_branch_name TYPE string
|
iv_branch_name TYPE string
|
||||||
EXPORTING ei_client TYPE REF TO if_http_client
|
EXPORTING eo_client TYPE REF TO lcl_http_client
|
||||||
ev_branch TYPE ty_sha1
|
ev_branch TYPE ty_sha1
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
@ -63,12 +60,6 @@ CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
CHANGING cv_data TYPE xstring
|
CHANGING cv_data TYPE xstring
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS set_headers
|
|
||||||
IMPORTING iv_url TYPE string
|
|
||||||
iv_service TYPE string
|
|
||||||
ii_client TYPE REF TO if_http_client
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
ENDCLASS. "lcl_transport DEFINITION
|
ENDCLASS. "lcl_transport DEFINITION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
@ -169,37 +160,6 @@ ENDCLASS. "lcl_pack DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_git_transport IMPLEMENTATION.
|
CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD set_headers.
|
|
||||||
|
|
||||||
DATA: lv_value TYPE string.
|
|
||||||
|
|
||||||
|
|
||||||
ii_client->request->set_header_field(
|
|
||||||
name = '~request_method'
|
|
||||||
value = 'POST' ).
|
|
||||||
|
|
||||||
lv_value = lcl_url=>path_name( iv_url ) &&
|
|
||||||
'/git-' &&
|
|
||||||
iv_service &&
|
|
||||||
'-pack'.
|
|
||||||
ii_client->request->set_header_field(
|
|
||||||
name = '~request_uri'
|
|
||||||
value = lv_value ).
|
|
||||||
|
|
||||||
lv_value = 'application/x-git-'
|
|
||||||
&& iv_service && '-pack-request'. "#EC NOTEXT
|
|
||||||
ii_client->request->set_header_field(
|
|
||||||
name = 'Content-Type'
|
|
||||||
value = lv_value ). "#EC NOTEXT
|
|
||||||
|
|
||||||
lv_value = 'application/x-git-'
|
|
||||||
&& iv_service && '-pack-result'. "#EC NOTEXT
|
|
||||||
ii_client->request->set_header_field(
|
|
||||||
name = 'Accept'
|
|
||||||
value = lv_value ). "#EC NOTEXT
|
|
||||||
|
|
||||||
ENDMETHOD. "set_headers
|
|
||||||
|
|
||||||
METHOD find_branch.
|
METHOD find_branch.
|
||||||
|
|
||||||
DATA: lo_branch_list TYPE REF TO lcl_git_branch_list.
|
DATA: lo_branch_list TYPE REF TO lcl_git_branch_list.
|
||||||
|
@ -209,7 +169,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
iv_url = iv_url
|
iv_url = iv_url
|
||||||
iv_service = iv_service
|
iv_service = iv_service
|
||||||
IMPORTING
|
IMPORTING
|
||||||
ei_client = ei_client
|
eo_client = eo_client
|
||||||
eo_branch_list = lo_branch_list ).
|
eo_branch_list = lo_branch_list ).
|
||||||
|
|
||||||
IF ev_branch IS SUPPLIED.
|
IF ev_branch IS SUPPLIED.
|
||||||
|
@ -220,7 +180,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD branches.
|
METHOD branches.
|
||||||
|
|
||||||
DATA: li_client TYPE REF TO if_http_client.
|
DATA: lo_client TYPE REF TO lcl_http_client.
|
||||||
|
|
||||||
|
|
||||||
lcl_git_transport=>branch_list(
|
lcl_git_transport=>branch_list(
|
||||||
|
@ -228,10 +188,10 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
iv_url = iv_url
|
iv_url = iv_url
|
||||||
iv_service = c_service-upload
|
iv_service = c_service-upload
|
||||||
IMPORTING
|
IMPORTING
|
||||||
ei_client = li_client
|
eo_client = lo_client
|
||||||
eo_branch_list = ro_branch_list ).
|
eo_branch_list = ro_branch_list ).
|
||||||
|
|
||||||
li_client->close( ).
|
lo_client->close( ).
|
||||||
|
|
||||||
ENDMETHOD. "branches
|
ENDMETHOD. "branches
|
||||||
|
|
||||||
|
@ -240,11 +200,11 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
DATA: lv_data TYPE string.
|
DATA: lv_data TYPE string.
|
||||||
|
|
||||||
|
|
||||||
ei_client = lcl_http=>create_by_url(
|
eo_client = lcl_http=>create_by_url(
|
||||||
iv_url = iv_url
|
iv_url = iv_url
|
||||||
iv_service = iv_service ).
|
iv_service = iv_service ).
|
||||||
|
|
||||||
lv_data = ei_client->response->get_cdata( ).
|
lv_data = eo_client->get_cdata( ).
|
||||||
|
|
||||||
CREATE OBJECT eo_branch_list
|
CREATE OBJECT eo_branch_list
|
||||||
EXPORTING
|
EXPORTING
|
||||||
|
@ -254,7 +214,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD receive_pack.
|
METHOD receive_pack.
|
||||||
|
|
||||||
DATA: li_client TYPE REF TO if_http_client,
|
DATA: lo_client TYPE REF TO lcl_http_client,
|
||||||
lv_cmd_pkt TYPE string,
|
lv_cmd_pkt TYPE string,
|
||||||
lv_line TYPE string,
|
lv_line TYPE string,
|
||||||
lv_tmp TYPE xstring,
|
lv_tmp TYPE xstring,
|
||||||
|
@ -270,12 +230,11 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
iv_service = c_service-receive
|
iv_service = c_service-receive
|
||||||
iv_branch_name = iv_branch_name
|
iv_branch_name = iv_branch_name
|
||||||
IMPORTING
|
IMPORTING
|
||||||
ei_client = li_client ).
|
eo_client = lo_client ).
|
||||||
|
|
||||||
set_headers(
|
lo_client->set_headers(
|
||||||
iv_url = iv_url
|
iv_url = iv_url
|
||||||
iv_service = c_service-receive
|
iv_service = c_service-receive ).
|
||||||
ii_client = li_client ).
|
|
||||||
|
|
||||||
lv_cap_list = 'report-status agent=' && lcl_http=>get_agent( ) ##NO_TEXT.
|
lv_cap_list = 'report-status agent=' && lcl_http=>get_agent( ) ##NO_TEXT.
|
||||||
|
|
||||||
|
@ -295,13 +254,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
CONCATENATE lv_tmp iv_pack INTO lv_xstring IN BYTE MODE.
|
CONCATENATE lv_tmp iv_pack INTO lv_xstring IN BYTE MODE.
|
||||||
|
|
||||||
li_client->request->set_data( lv_xstring ).
|
lv_xstring = lo_client->send_receive_close( lv_xstring ).
|
||||||
|
|
||||||
lcl_http=>send_receive( li_client ).
|
|
||||||
lcl_http=>check_http_200( li_client ).
|
|
||||||
|
|
||||||
lv_xstring = li_client->response->get_data( ).
|
|
||||||
li_client->close( ).
|
|
||||||
|
|
||||||
lv_string = lcl_convert=>xstring_to_string_utf8( lv_xstring ).
|
lv_string = lcl_convert=>xstring_to_string_utf8( lv_xstring ).
|
||||||
IF NOT lv_string CP '*unpack ok*'.
|
IF NOT lv_string CP '*unpack ok*'.
|
||||||
|
@ -350,7 +303,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD upload_pack.
|
METHOD upload_pack.
|
||||||
|
|
||||||
DATA: li_client TYPE REF TO if_http_client,
|
DATA: lo_client TYPE REF TO lcl_http_client,
|
||||||
lv_buffer TYPE string,
|
lv_buffer TYPE string,
|
||||||
lv_xstring TYPE xstring,
|
lv_xstring TYPE xstring,
|
||||||
lv_line TYPE string,
|
lv_line TYPE string,
|
||||||
|
@ -369,7 +322,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
iv_service = c_service-upload
|
iv_service = c_service-upload
|
||||||
iv_branch_name = io_repo->get_branch_name( )
|
iv_branch_name = io_repo->get_branch_name( )
|
||||||
IMPORTING
|
IMPORTING
|
||||||
ei_client = li_client
|
eo_client = lo_client
|
||||||
ev_branch = ev_branch ).
|
ev_branch = ev_branch ).
|
||||||
|
|
||||||
IF it_branches IS INITIAL.
|
IF it_branches IS INITIAL.
|
||||||
|
@ -379,9 +332,8 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
lt_branches = it_branches.
|
lt_branches = it_branches.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
set_headers( iv_url = io_repo->get_url( )
|
lo_client->set_headers( iv_url = io_repo->get_url( )
|
||||||
iv_service = c_service-upload
|
iv_service = c_service-upload ).
|
||||||
ii_client = li_client ).
|
|
||||||
|
|
||||||
LOOP AT lt_branches FROM 1 ASSIGNING <ls_branch>.
|
LOOP AT lt_branches FROM 1 ASSIGNING <ls_branch>.
|
||||||
IF sy-tabix = 1.
|
IF sy-tabix = 1.
|
||||||
|
@ -403,12 +355,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
&& '0000'
|
&& '0000'
|
||||||
&& '0009done' && gc_newline.
|
&& '0009done' && gc_newline.
|
||||||
|
|
||||||
* do not use set_cdata as it modifies the Content-Type header field
|
lv_xstring = lo_client->send_receive_close( lcl_convert=>string_to_xstring_utf8( lv_buffer ) ).
|
||||||
li_client->request->set_data( lcl_convert=>string_to_xstring_utf8( lv_buffer ) ).
|
|
||||||
lcl_http=>send_receive( li_client ).
|
|
||||||
lcl_http=>check_http_200( li_client ).
|
|
||||||
lv_xstring = li_client->response->get_data( ).
|
|
||||||
li_client->close( ).
|
|
||||||
|
|
||||||
parse( IMPORTING ev_pack = lv_pack
|
parse( IMPORTING ev_pack = lv_pack
|
||||||
CHANGING cv_data = lv_xstring ).
|
CHANGING cv_data = lv_xstring ).
|
||||||
|
|
|
@ -2,6 +2,153 @@
|
||||||
*& Include ZABAPGIT_HTTP
|
*& Include ZABAPGIT_HTTP
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
CLASS lcl_http_client DEFINITION FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS:
|
||||||
|
constructor
|
||||||
|
IMPORTING ii_client TYPE REF TO if_http_client,
|
||||||
|
close,
|
||||||
|
send_receive_close
|
||||||
|
IMPORTING
|
||||||
|
iv_data TYPE xstring
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_data) TYPE xstring
|
||||||
|
RAISING lcx_exception,
|
||||||
|
get_cdata
|
||||||
|
RETURNING VALUE(rv_value) TYPE string,
|
||||||
|
check_http_200
|
||||||
|
RAISING lcx_exception,
|
||||||
|
send_receive
|
||||||
|
RAISING lcx_exception,
|
||||||
|
set_headers
|
||||||
|
IMPORTING iv_url TYPE string
|
||||||
|
iv_service TYPE string
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
PROTECTED SECTION.
|
||||||
|
DATA: mi_client TYPE REF TO if_http_client.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_http_client IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD constructor.
|
||||||
|
mi_client = ii_client.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD send_receive_close.
|
||||||
|
|
||||||
|
* do not use set_cdata as it modifies the Content-Type header field
|
||||||
|
mi_client->request->set_data( iv_data ).
|
||||||
|
send_receive( ).
|
||||||
|
check_http_200( ).
|
||||||
|
rv_data = mi_client->response->get_data( ).
|
||||||
|
mi_client->close( ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_cdata.
|
||||||
|
rv_value = mi_client->response->get_cdata( ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD close.
|
||||||
|
mi_client->close( ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD set_headers.
|
||||||
|
|
||||||
|
DATA: lv_value TYPE string.
|
||||||
|
|
||||||
|
|
||||||
|
mi_client->request->set_header_field(
|
||||||
|
name = '~request_method'
|
||||||
|
value = 'POST' ).
|
||||||
|
|
||||||
|
lv_value = lcl_url=>path_name( iv_url ) &&
|
||||||
|
'/git-' &&
|
||||||
|
iv_service &&
|
||||||
|
'-pack'.
|
||||||
|
mi_client->request->set_header_field(
|
||||||
|
name = '~request_uri'
|
||||||
|
value = lv_value ).
|
||||||
|
|
||||||
|
lv_value = 'application/x-git-'
|
||||||
|
&& iv_service && '-pack-request'. "#EC NOTEXT
|
||||||
|
mi_client->request->set_header_field(
|
||||||
|
name = 'Content-Type'
|
||||||
|
value = lv_value ). "#EC NOTEXT
|
||||||
|
|
||||||
|
lv_value = 'application/x-git-'
|
||||||
|
&& iv_service && '-pack-result'. "#EC NOTEXT
|
||||||
|
mi_client->request->set_header_field(
|
||||||
|
name = 'Accept'
|
||||||
|
value = lv_value ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDMETHOD. "set_headers
|
||||||
|
|
||||||
|
METHOD send_receive.
|
||||||
|
|
||||||
|
DATA lv_text TYPE string.
|
||||||
|
|
||||||
|
mi_client->send( ).
|
||||||
|
mi_client->receive(
|
||||||
|
EXCEPTIONS
|
||||||
|
http_communication_failure = 1
|
||||||
|
http_invalid_state = 2
|
||||||
|
http_processing_failed = 3
|
||||||
|
OTHERS = 4 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
CASE sy-subrc.
|
||||||
|
WHEN 1.
|
||||||
|
" make sure:
|
||||||
|
" a) SSL is setup properly in STRUST
|
||||||
|
" b) no firewalls
|
||||||
|
" check trace file in transaction SMICM
|
||||||
|
lv_text = 'HTTP Communication Failure'. "#EC NOTEXT
|
||||||
|
WHEN 2.
|
||||||
|
lv_text = 'HTTP Invalid State'. "#EC NOTEXT
|
||||||
|
WHEN 3.
|
||||||
|
lv_text = 'HTTP Processing failed'. "#EC NOTEXT
|
||||||
|
WHEN OTHERS.
|
||||||
|
lv_text = 'Another error occured'. "#EC NOTEXT
|
||||||
|
ENDCASE.
|
||||||
|
lcx_exception=>raise( lv_text ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "send_receive
|
||||||
|
|
||||||
|
METHOD check_http_200.
|
||||||
|
|
||||||
|
DATA: lv_code TYPE i,
|
||||||
|
lv_text TYPE string.
|
||||||
|
|
||||||
|
|
||||||
|
mi_client->response->get_status(
|
||||||
|
IMPORTING
|
||||||
|
code = lv_code ).
|
||||||
|
CASE lv_code.
|
||||||
|
WHEN 200.
|
||||||
|
RETURN.
|
||||||
|
WHEN 302.
|
||||||
|
lcx_exception=>raise( 'HTTP redirect, check URL' ).
|
||||||
|
WHEN 401.
|
||||||
|
lcx_exception=>raise( 'HTTP 401, unauthorized' ).
|
||||||
|
WHEN 403.
|
||||||
|
lcx_exception=>raise( 'HTTP 403, forbidden' ).
|
||||||
|
WHEN 404.
|
||||||
|
lcx_exception=>raise( 'HTTP 404, not found' ).
|
||||||
|
WHEN 415.
|
||||||
|
lcx_exception=>raise( 'HTTP 415, unsupported media type' ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
lv_text = mi_client->response->get_cdata( ).
|
||||||
|
lcx_exception=>raise( |HTTP error code: { lv_code }, { lv_text }| ).
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ENDMETHOD. "http_200
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
CLASS lcl_http_digest DEFINITION FINAL.
|
CLASS lcl_http_digest DEFINITION FINAL.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
@ -95,14 +242,14 @@ CLASS lcl_http_digest IMPLEMENTATION.
|
||||||
iv_qop = lv_qop
|
iv_qop = lv_qop
|
||||||
iv_realm = lv_realm
|
iv_realm = lv_realm
|
||||||
iv_nonce = lv_nonce
|
iv_nonce = lv_nonce
|
||||||
iv_username = p_user
|
iv_username = iv_username
|
||||||
iv_uri = lv_uri
|
iv_uri = lv_uri
|
||||||
iv_method = lv_method
|
iv_method = lv_method
|
||||||
iv_cnonse = lv_cnonce
|
iv_cnonse = lv_cnonce
|
||||||
iv_password = p_pass ).
|
iv_password = iv_password ).
|
||||||
|
|
||||||
* client response
|
* client response
|
||||||
lv_auth = |Digest username="{ p_user
|
lv_auth = |Digest username="{ iv_username
|
||||||
}", realm="{ lv_realm
|
}", realm="{ lv_realm
|
||||||
}", nonce="{ lv_nonce
|
}", nonce="{ lv_nonce
|
||||||
}", uri="{ lv_uri
|
}", uri="{ lv_uri
|
||||||
|
@ -165,18 +312,12 @@ CLASS lcl_http DEFINITION FINAL.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
CLASS-METHODS:
|
CLASS-METHODS:
|
||||||
check_http_200
|
|
||||||
IMPORTING ii_client TYPE REF TO if_http_client
|
|
||||||
RAISING lcx_exception,
|
|
||||||
send_receive
|
|
||||||
IMPORTING ii_client TYPE REF TO if_http_client
|
|
||||||
RAISING lcx_exception,
|
|
||||||
get_agent
|
get_agent
|
||||||
RETURNING VALUE(rv_agent) TYPE string,
|
RETURNING VALUE(rv_agent) TYPE string,
|
||||||
create_by_url
|
create_by_url
|
||||||
IMPORTING iv_url TYPE string
|
IMPORTING iv_url TYPE string
|
||||||
iv_service TYPE string
|
iv_service TYPE string
|
||||||
RETURNING VALUE(ri_client) TYPE REF TO if_http_client
|
RETURNING VALUE(ro_client) TYPE REF TO lcl_http_client
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
@ -208,6 +349,7 @@ CLASS lcl_http IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: lv_uri TYPE string,
|
DATA: lv_uri TYPE string,
|
||||||
lv_expect_potentual_auth TYPE abap_bool,
|
lv_expect_potentual_auth TYPE abap_bool,
|
||||||
|
li_client TYPE REF TO if_http_client,
|
||||||
lo_settings TYPE REF TO lcl_settings.
|
lo_settings TYPE REF TO lcl_settings.
|
||||||
|
|
||||||
|
|
||||||
|
@ -220,43 +362,47 @@ CLASS lcl_http IMPLEMENTATION.
|
||||||
proxy_host = lo_settings->get_proxy_url( )
|
proxy_host = lo_settings->get_proxy_url( )
|
||||||
proxy_service = lo_settings->get_proxy_port( )
|
proxy_service = lo_settings->get_proxy_port( )
|
||||||
IMPORTING
|
IMPORTING
|
||||||
client = ri_client ).
|
client = li_client ).
|
||||||
|
|
||||||
|
CREATE OBJECT ro_client
|
||||||
|
EXPORTING
|
||||||
|
ii_client = li_client.
|
||||||
|
|
||||||
IF is_local_system( iv_url ) = abap_true.
|
IF is_local_system( iv_url ) = abap_true.
|
||||||
ri_client->send_sap_logon_ticket( ).
|
li_client->send_sap_logon_ticket( ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ri_client->request->set_cdata( '' ).
|
li_client->request->set_cdata( '' ).
|
||||||
ri_client->request->set_header_field(
|
li_client->request->set_header_field(
|
||||||
name = '~request_method'
|
name = '~request_method'
|
||||||
value = 'GET' ).
|
value = 'GET' ).
|
||||||
ri_client->request->set_header_field(
|
li_client->request->set_header_field(
|
||||||
name = 'user-agent'
|
name = 'user-agent'
|
||||||
value = get_agent( ) ). "#EC NOTEXT
|
value = get_agent( ) ). "#EC NOTEXT
|
||||||
lv_uri = lcl_url=>path_name( iv_url ) &&
|
lv_uri = lcl_url=>path_name( iv_url ) &&
|
||||||
'/info/refs?service=git-' &&
|
'/info/refs?service=git-' &&
|
||||||
iv_service &&
|
iv_service &&
|
||||||
'-pack'.
|
'-pack'.
|
||||||
ri_client->request->set_header_field(
|
li_client->request->set_header_field(
|
||||||
name = '~request_uri'
|
name = '~request_uri'
|
||||||
value = lv_uri ).
|
value = lv_uri ).
|
||||||
|
|
||||||
" Disable internal auth dialog (due to its unclarity)
|
" Disable internal auth dialog (due to its unclarity)
|
||||||
ri_client->propertytype_logon_popup = if_http_client=>co_disabled.
|
li_client->propertytype_logon_popup = if_http_client=>co_disabled.
|
||||||
|
|
||||||
lcl_login_manager=>load( iv_uri = iv_url
|
lcl_login_manager=>load( iv_uri = iv_url
|
||||||
ii_client = ri_client ).
|
ii_client = li_client ).
|
||||||
|
|
||||||
send_receive( ri_client ).
|
ro_client->send_receive( ).
|
||||||
IF check_auth_requested( ri_client ) = abap_true.
|
IF check_auth_requested( li_client ) = abap_true.
|
||||||
acquire_login_details( ii_client = ri_client
|
acquire_login_details( ii_client = li_client
|
||||||
iv_url = iv_url ).
|
iv_url = iv_url ).
|
||||||
send_receive( ri_client ).
|
ro_client->send_receive( ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
check_http_200( ri_client ).
|
ro_client->check_http_200( ).
|
||||||
|
|
||||||
lcl_login_manager=>save( iv_uri = iv_url
|
lcl_login_manager=>save( iv_uri = iv_url
|
||||||
ii_client = ri_client ).
|
ii_client = li_client ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -286,37 +432,6 @@ CLASS lcl_http IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD send_receive.
|
|
||||||
|
|
||||||
DATA lv_text TYPE string.
|
|
||||||
|
|
||||||
ii_client->send( ).
|
|
||||||
ii_client->receive(
|
|
||||||
EXCEPTIONS
|
|
||||||
http_communication_failure = 1
|
|
||||||
http_invalid_state = 2
|
|
||||||
http_processing_failed = 3
|
|
||||||
OTHERS = 4 ).
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
CASE sy-subrc.
|
|
||||||
WHEN 1.
|
|
||||||
" make sure:
|
|
||||||
" a) SSL is setup properly in STRUST
|
|
||||||
" b) no firewalls
|
|
||||||
" check trace file in transaction SMICM
|
|
||||||
lv_text = 'HTTP Communication Failure'. "#EC NOTEXT
|
|
||||||
WHEN 2.
|
|
||||||
lv_text = 'HTTP Invalid State'. "#EC NOTEXT
|
|
||||||
WHEN 3.
|
|
||||||
lv_text = 'HTTP Processing failed'. "#EC NOTEXT
|
|
||||||
WHEN OTHERS.
|
|
||||||
lv_text = 'Another error occured'. "#EC NOTEXT
|
|
||||||
ENDCASE.
|
|
||||||
lcx_exception=>raise( lv_text ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "send_receive
|
|
||||||
|
|
||||||
METHOD check_auth_requested.
|
METHOD check_auth_requested.
|
||||||
|
|
||||||
DATA: lv_code TYPE i.
|
DATA: lv_code TYPE i.
|
||||||
|
@ -377,33 +492,4 @@ CLASS lcl_http IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "acquire_login_details
|
ENDMETHOD. "acquire_login_details
|
||||||
|
|
||||||
METHOD check_http_200.
|
|
||||||
|
|
||||||
DATA: lv_code TYPE i,
|
|
||||||
lv_text TYPE string.
|
|
||||||
|
|
||||||
|
|
||||||
ii_client->response->get_status(
|
|
||||||
IMPORTING
|
|
||||||
code = lv_code ).
|
|
||||||
CASE lv_code.
|
|
||||||
WHEN 200.
|
|
||||||
RETURN.
|
|
||||||
WHEN 302.
|
|
||||||
lcx_exception=>raise( 'HTTP redirect, check URL' ).
|
|
||||||
WHEN 401.
|
|
||||||
lcx_exception=>raise( 'HTTP 401, unauthorized' ).
|
|
||||||
WHEN 403.
|
|
||||||
lcx_exception=>raise( 'HTTP 403, forbidden' ).
|
|
||||||
WHEN 404.
|
|
||||||
lcx_exception=>raise( 'HTTP 404, not found' ).
|
|
||||||
WHEN 415.
|
|
||||||
lcx_exception=>raise( 'HTTP 415, unsupported media type' ).
|
|
||||||
WHEN OTHERS.
|
|
||||||
lv_text = ii_client->response->get_cdata( ).
|
|
||||||
lcx_exception=>raise( |HTTP error code: { lv_code }, { lv_text }| ).
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
ENDMETHOD. "http_200
|
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
Loading…
Reference in New Issue
Block a user