mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Improved validation of URLs (#3486)
* Limit URLs to http and https * Validate URLs * Raise error only for validation (not for get_name) Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
6e12e1e0f4
commit
38099501b8
|
@ -1128,6 +1128,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION.
|
||||||
lv_finished = abap_true.
|
lv_finished = abap_true.
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
|
zcl_abapgit_url=>validate( rs_popup-url ).
|
||||||
zcl_abapgit_repo_srv=>get_instance( )->validate_package( rs_popup-package ).
|
zcl_abapgit_repo_srv=>get_instance( )->validate_package( rs_popup-package ).
|
||||||
validate_folder_logic( rs_popup-folder_logic ).
|
validate_folder_logic( rs_popup-folder_logic ).
|
||||||
|
|
||||||
|
@ -1276,7 +1277,9 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION.
|
||||||
lv_finished = abap_true.
|
lv_finished = abap_true.
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
zcl_abapgit_url=>validate( |{ lv_url }| ).
|
IF iv_freeze_url = abap_false.
|
||||||
|
zcl_abapgit_url=>validate( |{ lv_url }| ).
|
||||||
|
ENDIF.
|
||||||
IF iv_freeze_package = abap_false.
|
IF iv_freeze_package = abap_false.
|
||||||
zcl_abapgit_repo_srv=>get_instance( )->validate_package( iv_package = lv_package
|
zcl_abapgit_repo_srv=>get_instance( )->validate_package( iv_package = lv_package
|
||||||
iv_ign_subpkg = lv_ign_subpkg ).
|
iv_ign_subpkg = lv_ign_subpkg ).
|
||||||
|
|
|
@ -20,6 +20,7 @@ CLASS zcl_abapgit_url DEFINITION
|
||||||
CLASS-METHODS name
|
CLASS-METHODS name
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_url TYPE string
|
!iv_url TYPE string
|
||||||
|
!iv_validate TYPE abap_bool DEFAULT abap_false
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_name) TYPE string
|
VALUE(rv_name) TYPE string
|
||||||
RAISING
|
RAISING
|
||||||
|
@ -47,7 +48,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS zcl_abapgit_url IMPLEMENTATION.
|
CLASS ZCL_ABAPGIT_URL IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD host.
|
METHOD host.
|
||||||
|
@ -62,16 +63,25 @@ CLASS zcl_abapgit_url IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: lv_path TYPE string.
|
DATA: lv_path TYPE string.
|
||||||
|
|
||||||
regex( EXPORTING iv_url = iv_url
|
TRY.
|
||||||
IMPORTING ev_name = rv_name
|
regex( EXPORTING iv_url = iv_url
|
||||||
ev_path = lv_path ).
|
IMPORTING ev_name = rv_name
|
||||||
|
ev_path = lv_path ).
|
||||||
|
|
||||||
IF rv_name IS INITIAL.
|
IF rv_name IS INITIAL.
|
||||||
FIND REGEX '([\w-]+)/$' IN lv_path SUBMATCHES rv_name.
|
FIND REGEX '([\w-]+)/$' IN lv_path SUBMATCHES rv_name.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0.
|
||||||
zcx_abapgit_exception=>raise( 'Malformed URL' ).
|
zcx_abapgit_exception=>raise( 'Malformed URL' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
CATCH zcx_abapgit_exception.
|
||||||
|
IF iv_validate = abap_true.
|
||||||
|
zcx_abapgit_exception=>raise( 'Malformed URL' ).
|
||||||
|
ELSE.
|
||||||
|
rv_name = 'URL error (fix repo with "Advanced > Change Remote")'.
|
||||||
|
ENDIF.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -88,7 +98,7 @@ CLASS zcl_abapgit_url IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD regex.
|
METHOD regex.
|
||||||
|
|
||||||
FIND REGEX '(.*://[^/]*)(.*/)([^\.]*)[\.git]?' IN iv_url
|
FIND REGEX '(https?://[^/]*)(.*/)([^\.]*)[\.git]?' IN iv_url
|
||||||
SUBMATCHES ev_host ev_path ev_name.
|
SUBMATCHES ev_host ev_path ev_name.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0.
|
||||||
zcx_abapgit_exception=>raise( 'Malformed URL' ).
|
zcx_abapgit_exception=>raise( 'Malformed URL' ).
|
||||||
|
@ -99,7 +109,8 @@ CLASS zcl_abapgit_url IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD validate.
|
METHOD validate.
|
||||||
|
|
||||||
name( iv_url ).
|
name( iv_url = iv_url
|
||||||
|
iv_validate = abap_true ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -9,7 +9,10 @@ CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||||
repo_name3 FOR TESTING RAISING zcx_abapgit_exception,
|
repo_name3 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
repo_name4 FOR TESTING RAISING zcx_abapgit_exception,
|
repo_name4 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
repo_name5 FOR TESTING RAISING zcx_abapgit_exception,
|
repo_name5 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
repo_error FOR TESTING.
|
repo_error FOR TESTING,
|
||||||
|
url_validate1 FOR TESTING,
|
||||||
|
url_validate2 FOR TESTING,
|
||||||
|
url_validate3 FOR TESTING.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
@ -98,4 +101,35 @@ CLASS ltcl_test IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD url_validate1.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
zcl_abapgit_url=>validate( 'http://github.com/larshp/Foobar.git' ). "#EC NOTEXT
|
||||||
|
CATCH zcx_abapgit_exception. "#EC NO_HANDLER
|
||||||
|
cl_abap_unit_assert=>fail( ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD url_validate2.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
zcl_abapgit_url=>validate( 'https://github.com/larshp/Foobar.git' ). "#EC NOTEXT
|
||||||
|
CATCH zcx_abapgit_exception. "#EC NO_HANDLER
|
||||||
|
cl_abap_unit_assert=>fail( ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD url_validate3.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
zcl_abapgit_url=>validate( 'XYZ://github.com/larshp/Foobar.git' ). "#EC NOTEXT
|
||||||
|
cl_abap_unit_assert=>fail( ).
|
||||||
|
CATCH zcx_abapgit_exception. "#EC NO_HANDLER
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -111,7 +111,6 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD get_name.
|
METHOD get_name.
|
||||||
rv_name = zcl_abapgit_url=>name( ms_data-url ).
|
|
||||||
rv_name = super->get_name( ).
|
rv_name = super->get_name( ).
|
||||||
IF rv_name IS INITIAL.
|
IF rv_name IS INITIAL.
|
||||||
rv_name = zcl_abapgit_url=>name( ms_data-url ).
|
rv_name = zcl_abapgit_url=>name( ms_data-url ).
|
||||||
|
|
Loading…
Reference in New Issue
Block a user