diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index 5a2883313..523da65c1 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -690,6 +690,10 @@ CLASS lcl_2fa_authenticator_registry DEFINITION WITH UNIQUE KEY table_line READ-ONLY. PROTECTED SECTION. PRIVATE SECTION. + CLASS-METHODS: + popup_token + RETURNING VALUE(rv_token) TYPE string + RAISING lcx_exception. ENDCLASS. CLASS lcl_2fa_authenticator_registry IMPLEMENTATION. @@ -731,7 +735,6 @@ CLASS lcl_2fa_authenticator_registry IMPLEMENTATION. METHOD use_2fa_if_required. DATA: li_authenticator TYPE REF TO lif_2fa_authenticator, lv_2fa_token TYPE string, - lv_use_2fa TYPE abap_bool, lv_access_token TYPE string, lx_ex TYPE REF TO cx_root. @@ -748,16 +751,7 @@ CLASS lcl_2fa_authenticator_registry IMPLEMENTATION. iv_username = cv_username iv_password = cv_password ) = abap_true. - " Get a 2FA token (app/sms) - CALL FUNCTION 'POPUP_GET_STRING' - EXPORTING - label = 'Two factor auth. token' - IMPORTING - value = lv_2fa_token - okay = lv_use_2fa. - IF lv_use_2fa = abap_false. - lcx_exception=>raise( 'Authentication cancelled' ). - ENDIF. + lv_2fa_token = popup_token( ). " Delete an old access token if it exists li_authenticator->delete_access_tokens( iv_url = iv_url @@ -789,4 +783,43 @@ CLASS lcl_2fa_authenticator_registry IMPLEMENTATION. ix_previous = lx_ex. ENDTRY. ENDMETHOD. + + METHOD popup_token. + + DATA: lv_returncode TYPE c, + lt_fields TYPE TABLE OF sval. + + FIELD-SYMBOLS: LIKE LINE OF lt_fields. + + + APPEND INITIAL LINE TO lt_fields ASSIGNING . + -tabname = 'TADIR'. + -fieldname = 'OBJ_NAME'. + -fieldtext = 'Two factor auth. token'. + + CALL FUNCTION 'POPUP_GET_VALUES' + EXPORTING + no_value_check = abap_true + popup_title = 'Two factor auth. token' + IMPORTING + returncode = lv_returncode + TABLES + fields = lt_fields + EXCEPTIONS + error_in_fields = 1 + OTHERS = 2. "#EC NOTEXT + IF sy-subrc <> 0. + lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). + ENDIF. + + IF lv_returncode = 'A'. + lcx_exception=>raise( 'Authentication cancelled' ). + ENDIF. + + READ TABLE lt_fields INDEX 1 ASSIGNING . + ASSERT sy-subrc = 0. + rv_token = -value. + + ENDMETHOD. + ENDCLASS.