get_key_from_kv

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.