diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index a903ad17e..91ba955f2 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -307,8 +307,12 @@ CLASS lcl_git_transport IMPLEMENTATION. METHOD acquire_login_details. DATA: - lv_user TYPE string, - lv_pass TYPE string. + lv_default_user TYPE string, + lv_user TYPE string, + lv_pass TYPE string. + + lv_default_user = lcl_app=>user( )->get_repo_username( iv_url = iv_url ). + lv_user = lv_default_user. lcl_password_dialog=>popup( EXPORTING @@ -321,6 +325,10 @@ CLASS lcl_git_transport IMPLEMENTATION. lcx_exception=>raise( 'HTTP 401, unauthorized' ). ENDIF. + IF lv_user <> lv_default_user. + lcl_app=>user( )->set_repo_username( iv_url = iv_url iv_username = lv_user ). + ENDIF. + ii_client->authenticate( username = lv_user password = lv_pass ). diff --git a/src/zabapgit_page_commit.prog.abap b/src/zabapgit_page_commit.prog.abap index 97b972e3b..1e04d19ee 100644 --- a/src/zabapgit_page_commit.prog.abap +++ b/src/zabapgit_page_commit.prog.abap @@ -80,7 +80,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. DATA: lo_user TYPE REF TO lcl_persistence_user, lv_user TYPE string, - lv_key TYPE string, + lv_key TYPE lcl_persistence_db=>ty_value, lv_email TYPE string. * see https://git-scm.com/book/ch5-2.html @@ -88,10 +88,18 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. * body should wrap at 72 characters lo_user = lcl_app=>user( ). - lv_user = lo_user->get_username( ). - lv_email = lo_user->get_email( ). lv_key = mo_repo->get_key( ). + lv_user = lo_user->get_repo_username( mo_repo->get_url( ) ). + IF lv_user IS INITIAL. + lv_user = lo_user->get_username( ). + ENDIF. + + lv_email = lo_user->get_repo_email( mo_repo->get_url( ) ). + IF lv_email IS INITIAL. + lv_email = lo_user->get_email( ). + ENDIF. + CREATE OBJECT ro_html. ro_html->add( '
' ). @@ -245,8 +253,8 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. ls_fields = lcl_html_action_utils=>parse_commit_request( it_postdata ). lo_user = lcl_app=>user( ). - lo_user->set_username( ls_fields-username ). - lo_user->set_email( ls_fields-email ). + lo_user->set_repo_username( iv_url = mo_repo->get_url( ) iv_username = ls_fields-username ). + lo_user->set_repo_email( iv_url = mo_repo->get_url( ) iv_email = ls_fields-email ). IF ls_fields-username IS INITIAL. lcx_exception=>raise( 'empty username' ). diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap index 5914fa801..46a09e151 100644 --- a/src/zabapgit_password_dialog.prog.abap +++ b/src/zabapgit_password_dialog.prog.abap @@ -100,6 +100,10 @@ CLASS lcl_password_dialog IMPLEMENTATION. EXPORTING p_status = sy-pfkey TABLES p_exclude = lt_ucomm. + IF p_user IS NOT INITIAL. + SET CURSOR FIELD 'P_PASS'. + ENDIF. + ENDMETHOD. "on_screen_output METHOD on_screen_event. diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 05fa30cec..981578907 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -706,6 +706,26 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. RETURNING VALUE(rv_key) TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception. + METHODS set_repo_username + IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url + iv_username TYPE string + RAISING lcx_exception. + + METHODS get_repo_username + IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url + RETURNING VALUE(rv_username) TYPE string + RAISING lcx_exception. + + METHODS set_repo_email + IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url + iv_email TYPE string + RAISING lcx_exception. + + METHODS get_repo_email + IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url + RETURNING VALUE(rv_email) TYPE string + RAISING lcx_exception. + PRIVATE SECTION. CONSTANTS c_type_user TYPE lcl_persistence_db=>ty_type VALUE 'USER'. @@ -716,10 +736,18 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. TYPE STANDARD TABLE OF lcl_persistence_repo=>ty_repo-key WITH DEFAULT KEY. - TYPES: BEGIN OF ty_user, + TYPES: BEGIN OF ty_repo_config, + url TYPE lcl_persistence_repo=>ty_repo-url, username TYPE string, email TYPE string, - repo_show TYPE lcl_persistence_repo=>ty_repo-key, + END OF ty_repo_config. + TYPES: ty_repo_config_tt TYPE STANDARD TABLE OF ty_repo_config WITH DEFAULT KEY. + + TYPES: BEGIN OF ty_user, + username TYPE string, + email TYPE string, + repo_show TYPE lcl_persistence_repo=>ty_repo-key, + repo_config TYPE ty_repo_config_tt, END OF ty_user. METHODS constructor @@ -742,6 +770,16 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. IMPORTING is_user TYPE ty_user RAISING lcx_exception. + METHODS read_repo_config + IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url + RETURNING VALUE(rs_repo_config) TYPE ty_repo_config + RAISING lcx_exception. + + METHODS update_repo_config + IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url + is_repo_config TYPE ty_repo_config + RAISING lcx_exception. + ENDCLASS. "lcl_persistence_user DEFINITION *----------------------------------------------------------------------* @@ -1059,6 +1097,67 @@ CLASS lcl_persistence_user IMPLEMENTATION. ENDMETHOD. + METHOD read_repo_config. + DATA: lt_repo_config TYPE ty_repo_config_tt, + lv_key TYPE string. + + lv_key = to_lower( iv_url ). + lt_repo_config = read( )-repo_config. + READ TABLE lt_repo_config INTO rs_repo_config WITH KEY url = lv_key. + + ENDMETHOD. "read_repo_config + + METHOD update_repo_config. + DATA: ls_user TYPE ty_user, + lv_key TYPE string. + FIELD-SYMBOLS TYPE ty_repo_config. + + ls_user = read( ). + lv_key = to_lower( iv_url ). + + READ TABLE ls_user-repo_config ASSIGNING WITH KEY url = lv_key. + IF sy-subrc IS NOT INITIAL. + APPEND INITIAL LINE TO ls_user-repo_config ASSIGNING . + ENDIF. + = is_repo_config. + -url = lv_key. + + update( ls_user ). + + ENDMETHOD. "update_repo_config + + METHOD set_repo_username. + + DATA: ls_repo_config TYPE ty_repo_config. + + ls_repo_config = read_repo_config( iv_url ). + ls_repo_config-username = iv_username. + update_repo_config( iv_url = iv_url is_repo_config = ls_repo_config ). + + ENDMETHOD. "set_repo_username + + METHOD get_repo_username. + + rv_username = read_repo_config( iv_url )-username. + + ENDMETHOD. "get_repo_username + + METHOD set_repo_email. + + DATA: ls_repo_config TYPE ty_repo_config. + + ls_repo_config = read_repo_config( iv_url ). + ls_repo_config-email = iv_email. + update_repo_config( iv_url = iv_url is_repo_config = ls_repo_config ). + + ENDMETHOD. "set_repo_email + + METHOD get_repo_email. + + rv_email = read_repo_config( iv_url )-email. + + ENDMETHOD. "get_repo_email + ENDCLASS. CLASS lcl_persistence_db IMPLEMENTATION.