get_sas_token

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


  METHOD get_sas_token.
    DATA : body_xstring    TYPE xstring,
           sign            TYPE string,
           final_token     TYPE string,
           lv_decoded_xstr TYPE xstring,
           conv            TYPE REF TO cl_abap_conv_out_ce,
           lv_sas_key      TYPE string,
           lv_format       TYPE i.
    conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
    conv->convert( EXPORTING data = gv_string_to_sign IMPORTING buffer = body_xstring ).
    DEFINE encrypt_key.
      decode_sign( RECEIVING rv_secret = lv_sas_key ).
      CALL FUNCTION 'SSFC_BASE64_DECODE'
        EXPORTING
          b64data                  = lv_sas_key
        IMPORTING
          bindata                  = lv_decoded_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.
* Implement suitable error handling here
        RAISE EXCEPTION TYPE zcx_adf_service
          EXPORTING
            textid       = zcx_adf_service=>error_in_sas_key_encryption
            interface_id = gv_interface_id.
      ENDIF.
      CALL METHOD cl_abap_hmac=>calculate_hmac_for_raw
        EXPORTING
          if_algorithm     = 'sha-256'
          if_key           = lv_decoded_xstr "decoded
          if_data          = body_xstring
          if_length        = 0
        IMPORTING
          ef_hmacb64string = sign.
      CLEAR : lv_sas_key,lv_decoded_xstr.
    END-OF-DEFINITION.
    encrypt_key.
    IF NOT sign IS INITIAL.
      lv_format = 18.
      sign = escape( val = sign format = lv_format ).
      gv_start_utc_time = escape( val = gv_start_utc_time format = lv_format ).
      gv_expiry_utc_time = escape( val = gv_expiry_utc_time format = lv_format ).
      IF NOT gv_expiry_utc_time IS INITIAL.
        CONCATENATE '?sv=' gv_service_version '&sr=c' '&sig=' sign '&st=' gv_start_utc_time
        '&se=' gv_expiry_utc_time '&sp=' gv_permisson INTO final_token.
        CONCATENATE '/' gv_container_name '/' gv_blob_name INTO rv_sas_token.
        CONCATENATE rv_sas_token final_token INTO rv_sas_token.
      ENDIF.
    ELSE.
      RAISE EXCEPTION TYPE zcx_adf_service
        EXPORTING
          textid       = zcx_adf_service=>sas_key_not_generated
          interface_id = gv_interface_id.
    ENDIF.