Improve repository URL validation (#5927)

This commit is contained in:
Marc Bernard 2022-12-12 10:22:18 -05:00 committed by GitHub
parent b7c1ac907c
commit 533c9fbdaf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 63 additions and 22 deletions

View File

@ -12,6 +12,13 @@ CLASS zcl_abapgit_git_url DEFINITION
VALUE(rv_url) TYPE string VALUE(rv_url) TYPE string
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS validate_url
IMPORTING
!iv_url TYPE string
RAISING
zcx_abapgit_exception.
PROTECTED SECTION. PROTECTED SECTION.
METHODS get_default_commit_display_url METHODS get_default_commit_display_url
@ -27,7 +34,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_URL IMPLEMENTATION. CLASS zcl_abapgit_git_url IMPLEMENTATION.
METHOD get_commit_display_url. METHOD get_commit_display_url.
@ -81,4 +88,26 @@ CLASS ZCL_ABAPGIT_GIT_URL IMPLEMENTATION.
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
METHOD validate_url.
DATA lv_provider TYPE string.
lv_provider = zcl_abapgit_url=>host( to_lower( iv_url ) ).
" Provider-specific check for URLs that don't work
IF lv_provider CS 'gitlab.com'.
FIND REGEX '\.git$' IN iv_url IGNORING CASE.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Repo URL for GitLab must end in ".git"' ).
ENDIF.
ELSEIF lv_provider CS 'dev.azure.com'.
FIND REGEX '\.git$' IN iv_url IGNORING CASE.
IF sy-subrc = 0.
zcx_abapgit_exception=>raise( 'Repo URL for Azure DevOps must not end in ".git"' ).
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -72,6 +72,23 @@ ENDCLASS.
CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION.
METHOD choose_labels.
DATA:
lv_old_labels TYPE string,
lv_new_labels TYPE string.
lv_old_labels = mo_form_data->get( c_id-labels ).
lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ).
mo_form_data->set(
iv_key = c_id-labels
iv_val = lv_new_labels ).
ENDMETHOD.
METHOD constructor. METHOD constructor.
super->constructor( ). super->constructor( ).
CREATE OBJECT mo_validation_log. CREATE OBJECT mo_validation_log.
@ -168,13 +185,21 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION.
METHOD validate_form. METHOD validate_form.
DATA lx_err TYPE REF TO zcx_abapgit_exception. DATA:
lv_url TYPE string,
lo_url TYPE REF TO zcl_abapgit_git_url,
lx_err TYPE REF TO zcx_abapgit_exception.
ro_validation_log = mo_form_util->validate( io_form_data ). ro_validation_log = mo_form_util->validate( io_form_data ).
IF io_form_data->get( c_id-url ) IS NOT INITIAL. lv_url = io_form_data->get( c_id-url ).
IF lv_url IS NOT INITIAL.
TRY. TRY.
zcl_abapgit_repo_srv=>get_instance( )->validate_url( io_form_data->get( c_id-url ) ). zcl_abapgit_repo_srv=>get_instance( )->validate_url( lv_url ).
" Provider-specific URL check
CREATE OBJECT lo_url.
lo_url->validate_url( lv_url ).
CATCH zcx_abapgit_exception INTO lx_err. CATCH zcx_abapgit_exception INTO lx_err.
ro_validation_log->set( ro_validation_log->set(
iv_key = c_id-url iv_key = c_id-url
@ -312,22 +337,4 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION.
io_validation_log = mo_validation_log ) ). io_validation_log = mo_validation_log ) ).
ri_html->add( '</div>' ). ri_html->add( '</div>' ).
ENDMETHOD. ENDMETHOD.
METHOD choose_labels.
DATA:
lv_old_labels TYPE string,
lv_new_labels TYPE string.
lv_old_labels = mo_form_data->get( c_id-labels ).
lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ).
mo_form_data->set(
iv_key = c_id-labels
iv_val = lv_new_labels ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -796,6 +796,7 @@ CLASS zcl_abapgit_gui_page_sett_remo IMPLEMENTATION.
DATA: DATA:
lx_error TYPE REF TO zcx_abapgit_exception, lx_error TYPE REF TO zcx_abapgit_exception,
lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list, lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list,
lo_url TYPE REF TO zcl_abapgit_git_url,
lv_offline TYPE abap_bool, lv_offline TYPE abap_bool,
lv_head_type TYPE ty_head_type, lv_head_type TYPE ty_head_type,
lv_branch TYPE ty_remote_settings-branch, lv_branch TYPE ty_remote_settings-branch,
@ -823,6 +824,10 @@ CLASS zcl_abapgit_gui_page_sett_remo IMPLEMENTATION.
zcl_abapgit_url=>name( zcl_abapgit_url=>name(
iv_url = lv_url iv_url = lv_url
iv_validate = abap_true ). iv_validate = abap_true ).
" Provider-specific URL check
CREATE OBJECT lo_url.
lo_url->validate_url( lv_url ).
CATCH zcx_abapgit_exception INTO lx_error. CATCH zcx_abapgit_exception INTO lx_error.
ro_validation_log->set( ro_validation_log->set(
iv_key = c_id-url iv_key = c_id-url