diff --git a/src/utils/zcl_abapgit_login_manager.clas.abap b/src/utils/zcl_abapgit_login_manager.clas.abap new file mode 100644 index 000000000..5c8af4e9d --- /dev/null +++ b/src/utils/zcl_abapgit_login_manager.clas.abap @@ -0,0 +1,139 @@ +CLASS zcl_abapgit_login_manager DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + CLASS-METHODS: + load + IMPORTING + !iv_uri TYPE string + !ii_client TYPE REF TO if_http_client OPTIONAL + RETURNING + VALUE(rv_authorization) TYPE string + RAISING + zcx_abapgit_exception, + + save + IMPORTING + !iv_uri TYPE string + !ii_client TYPE REF TO if_http_client + RAISING + zcx_abapgit_exception, + + clear, + + set + IMPORTING + !iv_uri TYPE string + !iv_username TYPE string + !iv_password TYPE string + RETURNING + VALUE(rv_auth) TYPE string + RAISING + zcx_abapgit_exception . + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_auth, + uri TYPE string, + authorization TYPE string, + END OF ty_auth . + + CLASS-DATA: + gt_auth TYPE TABLE OF ty_auth WITH DEFAULT KEY. + + CLASS-METHODS: + append + IMPORTING + !iv_uri TYPE string + !iv_auth TYPE string + RAISING + zcx_abapgit_exception. + +ENDCLASS. + + + +CLASS zcl_abapgit_login_manager IMPLEMENTATION. + + METHOD append. + + FIELD-SYMBOLS: LIKE LINE OF gt_auth. + + READ TABLE gt_auth WITH KEY uri = zcl_abapgit_url=>host( iv_uri ) + TRANSPORTING NO FIELDS. + IF sy-subrc <> 0. + APPEND INITIAL LINE TO gt_auth ASSIGNING . + -uri = zcl_abapgit_url=>host( iv_uri ). + -authorization = iv_auth. + ENDIF. + + ENDMETHOD. + + + METHOD clear. + + CLEAR gt_auth. + + ENDMETHOD. + + + METHOD load. + + DATA: ls_auth LIKE LINE OF gt_auth. + + READ TABLE gt_auth INTO ls_auth WITH KEY uri = zcl_abapgit_url=>host( iv_uri ). + IF sy-subrc = 0. + rv_authorization = ls_auth-authorization. + + IF NOT ii_client IS INITIAL. + ii_client->request->set_header_field( + name = 'authorization' + value = ls_auth-authorization ). "#EC NOTEXT + ii_client->propertytype_logon_popup = ii_client->co_disabled. + ENDIF. + ENDIF. + + ENDMETHOD. + + + METHOD save. + + DATA: lv_auth TYPE string. + + lv_auth = ii_client->request->get_header_field( 'authorization' ). "#EC NOTEXT + + IF NOT lv_auth IS INITIAL. + append( iv_uri = iv_uri + iv_auth = lv_auth ). + ENDIF. + + ENDMETHOD. + + + METHOD set. + + DATA: lv_concat TYPE string. + + ASSERT NOT iv_uri IS INITIAL. + + IF iv_username IS INITIAL OR iv_password IS INITIAL. + RETURN. + ENDIF. + + CONCATENATE iv_username ':' iv_password INTO lv_concat. + + rv_auth = cl_http_utility=>if_http_utility~encode_base64( lv_concat ). + + CONCATENATE 'Basic' rv_auth INTO rv_auth + SEPARATED BY space ##NO_TEXT. + + append( iv_uri = iv_uri + iv_auth = rv_auth ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/utils/zcl_abapgit_login_manager.clas.xml b/src/utils/zcl_abapgit_login_manager.clas.xml new file mode 100644 index 000000000..33d9a7cf0 --- /dev/null +++ b/src/utils/zcl_abapgit_login_manager.clas.xml @@ -0,0 +1,27 @@ + + + + + + ZCL_ABAPGIT_LOGIN_MANAGER + 1 + E + Login Manager + 2 + 1 + X + X + X + X + + + + ZCL_ABAPGIT_LOGIN_MANAGER + TY_AUTH + E + TY_AUTH + + + + + diff --git a/src/zabapgit_background.prog.abap b/src/zabapgit_background.prog.abap index 5337e440d..55d6768b9 100644 --- a/src/zabapgit_background.prog.abap +++ b/src/zabapgit_background.prog.abap @@ -221,7 +221,7 @@ CLASS lcl_background IMPLEMENTATION. lv_repo_name = lo_repo->get_name( ). WRITE: / -method, lv_repo_name. - lcl_login_manager=>set( + zcl_abapgit_login_manager=>set( iv_uri = lo_repo->get_url( ) iv_username = -username iv_password = -password ). diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index c4475a7b7..4080db356 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -480,7 +480,7 @@ CLASS lcl_http IMPLEMENTATION. " Disable internal auth dialog (due to its unclarity) li_client->propertytype_logon_popup = if_http_client=>co_disabled. - lcl_login_manager=>load( iv_uri = iv_url + zcl_abapgit_login_manager=>load( iv_uri = iv_url ii_client = li_client ). ro_client->send_receive( ). @@ -493,7 +493,7 @@ CLASS lcl_http IMPLEMENTATION. ro_client->check_http_200( ). IF lv_scheme <> gc_scheme-digest. - lcl_login_manager=>save( iv_uri = iv_url + zcl_abapgit_login_manager=>save( iv_uri = iv_url ii_client = li_client ). ENDIF. diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index d592a3219..6bb6e0e12 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -1149,18 +1149,18 @@ ENDCLASS. CLASS ltcl_login_manager IMPLEMENTATION. METHOD setup. - lcl_login_manager=>clear( ). + zcl_abapgit_login_manager=>clear( ). ENDMETHOD. METHOD teardown. - lcl_login_manager=>clear( ). + zcl_abapgit_login_manager=>clear( ). ENDMETHOD. METHOD encoding. DATA: lv_auth TYPE string. - lv_auth = lcl_login_manager=>set( + lv_auth = zcl_abapgit_login_manager=>set( iv_uri = 'https://github.com/larshp/abapGit.git' iv_username = c_username iv_password = c_password ). @@ -1180,13 +1180,13 @@ CLASS ltcl_login_manager IMPLEMENTATION. lv_auth2 TYPE string. - lcl_login_manager=>set( + zcl_abapgit_login_manager=>set( iv_uri = lc_github1 iv_username = c_username iv_password = c_password ). - lv_auth1 = lcl_login_manager=>load( lc_github1 ). - lv_auth2 = lcl_login_manager=>load( lc_github2 ). + lv_auth1 = zcl_abapgit_login_manager=>load( lc_github1 ). + lv_auth2 = zcl_abapgit_login_manager=>load( lc_github2 ). cl_abap_unit_assert=>assert_equals( act = lv_auth1 diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 35bc1ebac..9414be9e7 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -2,122 +2,6 @@ *& Include ZABAPGIT_UTIL *&---------------------------------------------------------------------* -CLASS lcl_login_manager DEFINITION FINAL. - - PUBLIC SECTION. - CLASS-METHODS: - load - IMPORTING iv_uri TYPE string - ii_client TYPE REF TO if_http_client OPTIONAL - RETURNING VALUE(rv_authorization) TYPE string - RAISING zcx_abapgit_exception, - save - IMPORTING iv_uri TYPE string - ii_client TYPE REF TO if_http_client - RAISING zcx_abapgit_exception, - clear, - set - IMPORTING iv_uri TYPE string - iv_username TYPE string - iv_password TYPE string - RETURNING VALUE(rv_auth) TYPE string - RAISING zcx_abapgit_exception. - - PRIVATE SECTION. - TYPES: BEGIN OF ty_auth, - uri TYPE string, - authorization TYPE string, - END OF ty_auth. - - CLASS-DATA: gt_auth TYPE TABLE OF ty_auth WITH DEFAULT KEY. - - CLASS-METHODS: - append - IMPORTING iv_uri TYPE string - iv_auth TYPE string - RAISING zcx_abapgit_exception. - -ENDCLASS. - -CLASS lcl_login_manager IMPLEMENTATION. - - METHOD clear. - CLEAR gt_auth. - ENDMETHOD. - - METHOD set. - - DATA: lv_concat TYPE string. - - - ASSERT NOT iv_uri IS INITIAL. - - IF iv_username IS INITIAL OR iv_password IS INITIAL. - RETURN. - ENDIF. - - CONCATENATE iv_username ':' iv_password INTO lv_concat. - - rv_auth = cl_http_utility=>if_http_utility~encode_base64( lv_concat ). - - CONCATENATE 'Basic' rv_auth INTO rv_auth - SEPARATED BY space ##NO_TEXT. - - append( iv_uri = iv_uri - iv_auth = rv_auth ). - - ENDMETHOD. - - METHOD load. - - DATA: ls_auth LIKE LINE OF gt_auth. - - - READ TABLE gt_auth INTO ls_auth WITH KEY uri = zcl_abapgit_url=>host( iv_uri ). - IF sy-subrc = 0. - rv_authorization = ls_auth-authorization. - - IF NOT ii_client IS INITIAL. - ii_client->request->set_header_field( - name = 'authorization' - value = ls_auth-authorization ). "#EC NOTEXT - ii_client->propertytype_logon_popup = ii_client->co_disabled. - ENDIF. - ENDIF. - - ENDMETHOD. - - METHOD save. - - DATA: lv_auth TYPE string. - - - lv_auth = ii_client->request->get_header_field( 'authorization' ). "#EC NOTEXT - - IF NOT lv_auth IS INITIAL. - append( iv_uri = iv_uri - iv_auth = lv_auth ). - ENDIF. - - ENDMETHOD. - - METHOD append. - - FIELD-SYMBOLS: LIKE LINE OF gt_auth. - - - READ TABLE gt_auth WITH KEY uri = zcl_abapgit_url=>host( iv_uri ) - TRANSPORTING NO FIELDS. - IF sy-subrc <> 0. - APPEND INITIAL LINE TO gt_auth ASSIGNING . - -uri = zcl_abapgit_url=>host( iv_uri ). - -authorization = iv_auth. - ENDIF. - - ENDMETHOD. - -ENDCLASS. - CLASS lcl_progress DEFINITION FINAL. PUBLIC SECTION.