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.
|
||||
|
||||
TRY.
|
||||
zcl_abapgit_url=>validate( rs_popup-url ).
|
||||
zcl_abapgit_repo_srv=>get_instance( )->validate_package( rs_popup-package ).
|
||||
validate_folder_logic( rs_popup-folder_logic ).
|
||||
|
||||
|
@ -1276,7 +1277,9 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION.
|
|||
lv_finished = abap_true.
|
||||
|
||||
TRY.
|
||||
IF iv_freeze_url = abap_false.
|
||||
zcl_abapgit_url=>validate( |{ lv_url }| ).
|
||||
ENDIF.
|
||||
IF iv_freeze_package = abap_false.
|
||||
zcl_abapgit_repo_srv=>get_instance( )->validate_package( iv_package = lv_package
|
||||
iv_ign_subpkg = lv_ign_subpkg ).
|
||||
|
|
|
@ -20,6 +20,7 @@ CLASS zcl_abapgit_url DEFINITION
|
|||
CLASS-METHODS name
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
!iv_validate TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(rv_name) TYPE string
|
||||
RAISING
|
||||
|
@ -47,7 +48,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_url IMPLEMENTATION.
|
||||
CLASS ZCL_ABAPGIT_URL IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD host.
|
||||
|
@ -62,6 +63,7 @@ CLASS zcl_abapgit_url IMPLEMENTATION.
|
|||
|
||||
DATA: lv_path TYPE string.
|
||||
|
||||
TRY.
|
||||
regex( EXPORTING iv_url = iv_url
|
||||
IMPORTING ev_name = rv_name
|
||||
ev_path = lv_path ).
|
||||
|
@ -73,6 +75,14 @@ CLASS zcl_abapgit_url IMPLEMENTATION.
|
|||
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.
|
||||
|
||||
|
||||
|
@ -88,7 +98,7 @@ CLASS zcl_abapgit_url IMPLEMENTATION.
|
|||
|
||||
METHOD regex.
|
||||
|
||||
FIND REGEX '(.*://[^/]*)(.*/)([^\.]*)[\.git]?' IN iv_url
|
||||
FIND REGEX '(https?://[^/]*)(.*/)([^\.]*)[\.git]?' IN iv_url
|
||||
SUBMATCHES ev_host ev_path ev_name.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( 'Malformed URL' ).
|
||||
|
@ -99,7 +109,8 @@ CLASS zcl_abapgit_url IMPLEMENTATION.
|
|||
|
||||
METHOD validate.
|
||||
|
||||
name( iv_url ).
|
||||
name( iv_url = iv_url
|
||||
iv_validate = abap_true ).
|
||||
|
||||
ENDMETHOD.
|
||||
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_name4 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.
|
||||
|
||||
|
@ -98,4 +101,35 @@ CLASS ltcl_test IMPLEMENTATION.
|
|||
|
||||
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.
|
||||
|
|
|
@ -111,7 +111,6 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD get_name.
|
||||
rv_name = zcl_abapgit_url=>name( ms_data-url ).
|
||||
rv_name = super->get_name( ).
|
||||
IF rv_name IS INITIAL.
|
||||
rv_name = zcl_abapgit_url=>name( ms_data-url ).
|
||||
|
|
Loading…
Reference in New Issue
Block a user