get_sas_token

in src/zadf/zcl_adf_service_cosmosdb.clas.abap [0:0]


  METHOD get_sas_token.
    DATA :lv_sign_utf       TYPE xstring,
          lv_string_to_sign TYPE string,
          lv_hash_sig       TYPE string,
          lv_authstring     TYPE string,
          lv_key            TYPE string,
          lv_key_xstr       TYPE xstring,
          lo_conv           TYPE REF TO cl_abap_conv_out_ce.
** generate String To Sign
    me->generate_string_to_sign( RECEIVING rv_string_to_sign = lv_string_to_sign ).
** Convert string to UTF-8 format
    lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
    lo_conv->convert( EXPORTING data = lv_string_to_sign IMPORTING buffer = lv_sign_utf ).
    DEFINE encrypt_signature.
      decode_sign( receiving rv_secret = lv_key ).
** Decode Key from base64
      call function 'SSFC_BASE64_DECODE'
        exporting
          b64data                  = lv_key
        importing
          bindata                  = lv_key_xstr
        exceptions
          ssf_krn_error            = 1
          ssf_krn_noop             = 2
          ssf_krn_nomemory         = 3
          ssf_krn_opinv            = 4
          ssf_krn_input_data_error = 5
          ssf_krn_invalid_par      = 6
          ssf_krn_invalid_parlen   = 7
          others                   = 8.
      if sy-subrc <> 0.
        raise exception type zcx_adf_service
         exporting
          textid       = zcx_adf_service=>key_decoding_failed
          interface_id = gv_interface_id.
      endif.
** Encode the signature with the Key in SHA 256 format
      call method cl_abap_hmac=>calculate_hmac_for_raw
        exporting
          if_algorithm     = 'SHA-256'
          if_key           = lv_key_xstr
          if_data          = lv_sign_utf
          if_length        = 0
        importing
          ef_hmacb64string = lv_hash_sig.
      clear: lv_key_xstr, lv_key.
    END-OF-DEFINITION.
** call macro
    encrypt_signature.
    IF NOT lv_hash_sig IS INITIAL.
** Construct AuthString
      CONCATENATE gc_type gc_separator gc_version gc_separator gc_sig lv_hash_sig INTO lv_authstring.
** Generate AuthToken
      rv_sas_token = cl_http_utility=>escape_url( lv_authstring ).
    ELSE.
      RAISE EXCEPTION TYPE zcx_adf_service
        EXPORTING
          textid       = zcx_adf_service=>auth_token_not_generated
          interface_id = gv_interface_id.
    ENDIF.