in src/zadf/zcl_adf_service_keyvault.clas.abap [0:0]
METHOD get_key_from_kv.
DATA : rest_handler TYPE REF TO zcl_rest_framework,
go_response TYPE REF TO if_rest_entity,
go_request TYPE REF TO if_rest_entity,
lv_key TYPE string,
lv_content_type TYPE string,
lo_http_client TYPE REF TO if_http_client,
lcx_interface TYPE REF TO zcx_interace_config_missing,
lcx_http TYPE REF TO zcx_http_client_failed,
lv_response_data TYPE string,
lt_response_fields TYPE tihttpnvp,
lv_token TYPE string,
ls_response_fields TYPE ihttpnvp,
lv_http_status TYPE i.
CREATE OBJECT lcx_interface.
CREATE OBJECT lcx_http.
TRY .
CREATE OBJECT rest_handler
EXPORTING
interface_name = gv_kv_interface "Mandatory
business_identifier = 'KeyVaultAuth'
method = 'GET'. "For troubleshooting
CATCH zcx_interace_config_missing INTO lcx_interface.
RAISE EXCEPTION lcx_interface.
CATCH zcx_http_client_failed INTO lcx_http .
RAISE EXCEPTION lcx_http.
ENDTRY.
*Optional - To help developer understand the origin of call
rest_handler->set_callingmethod( 'GET_KEY_FROM_KV' ).
*Optional - To help developer understand the origin of call
rest_handler->set_callingprogram( 'ZCL_ADF_SERVICE_KEYVAULT' ).
rest_handler->zif_rest_framework~set_uri( '?api-version=2016-10-01' ).
************************************************************************
CONCATENATE 'Bearer' gv_token INTO lv_token SEPARATED BY space.
rest_handler->zif_rest_framework~set_request_header( iv_name = 'Authorization' iv_value = lv_token ).
************************************************************************
go_response = rest_handler->zif_rest_framework~execute( io_entity = go_request async = abap_false is_retry = abap_false ).
lv_http_status = rest_handler->get_status( ).
************************************************************************
IF go_response IS BOUND.
lv_response_data = go_response->get_string_data( ).
gv_response = lv_response_data.
lo_http_client = rest_handler->get_http_client( ).
IF lo_http_client IS BOUND.
lv_content_type = lo_http_client->response->get_content_type( ).
go_rest_api->close( ).
ENDIF.
IF lv_http_status EQ '201' OR lv_http_status EQ '200'.
IF lv_content_type CP `text/plain*` OR
lv_content_type CP `text/javascript*` OR
lv_content_type CP `application/x-www-form-urlencoded*`.
lt_response_fields = urlencoded_to_http_fields( iv_response_data = lv_response_data ).
ELSE.
lt_response_fields = json_to_http_fields( iv_response_data = lv_response_data ).
ENDIF.
CLEAR ls_response_fields.
READ TABLE lt_response_fields INTO ls_response_fields
WITH KEY name = 'value'.
IF sy-subrc EQ 0.
lv_key = ls_response_fields-value.
ELSE.
RAISE EXCEPTION TYPE zcx_adf_service
EXPORTING
textid = zcx_adf_service=>kv_secret_not_found
interface_id = gv_kv_interface.
ENDIF.
ELSE.
RAISE EXCEPTION TYPE zcx_adf_service
EXPORTING
textid = zcx_adf_service=>error_restapi_response
interface_id = gv_kv_interface.
ENDIF.
ELSE.
RAISE EXCEPTION TYPE zcx_adf_service
EXPORTING
textid = zcx_adf_service=>restapi_response_not_found
interface_id = gv_kv_interface.
ENDIF.
rv_kv_key = lv_key.