report_error

in src/zgoog_cl_content_repo_gcs.clas.abap [0:0]


  METHOD report_error.
    DATA lv_mandt         TYPE string.
    DATA lv_realm         TYPE string.
    DATA lv_error_message TYPE string.

    IF gs_error-status_code IS INITIAL.
      gs_error-status_code = 500.
    ENDIF.

    IF gs_error-status_text IS INITIAL.
      CASE gs_error-status_code.
        WHEN 200. gs_error-status_text = 'ok' ##NO_TEXT.
        WHEN 201. gs_error-status_text = 'created' ##NO_TEXT.
        WHEN 250. gs_error-status_text = 'missing documents created' ##NO_TEXT.
        WHEN 400. gs_error-status_text = 'bad request' ##NO_TEXT.
        WHEN 401. gs_error-status_text = 'unauthorized' ##NO_TEXT.
        WHEN 403. gs_error-status_text = 'forbidden' ##NO_TEXT.
        WHEN 404. gs_error-status_text = 'not found'  ##NO_TEXT.
        WHEN 406. gs_error-status_text = 'not acceptable' ##NO_TEXT.
        WHEN 409. gs_error-status_text = 'conflict'     ##NO_TEXT.
        WHEN 500. gs_error-status_text = 'internal server error' ##NO_TEXT.
        WHEN OTHERS.
          gs_error-status_text = gs_error-status_code.
          CONCATENATE
            'http error:' gv_sp gs_error-status_text
            INTO gs_error-status_text ##NO_TEXT.
      ENDCASE.
    ENDIF.

    IF gs_error-set_authenticate = 'X'.
      lv_mandt = gv_mandt.

      CONCATENATE 'Basic realm="SAP R/3 [' sy-sysid ']"' INTO lv_realm ##NO_TEXT.

      go_server->response->set_header_field( name  = 'WWW-Authenticate' ##NO_TEXT
                                             value = lv_realm ) ##NO_TEXT.

      go_server->response->set_header_field( name  = 'SAP-Client' ##NO_TEXT
                                             value = lv_mandt ) ##NO_TEXT.
    ENDIF.

    IF gs_error-msgid IS NOT INITIAL.
      MESSAGE ID gs_error-msgid TYPE gs_error-msgty NUMBER gs_error-msgno
              WITH gs_error-msgv1 gs_error-msgv2 gs_error-msgv3 gs_error-msgv4
              INTO lv_error_message.
    ENDIF.

    IF lv_error_message IS INITIAL.
      lv_error_message = gs_error-status_text.
    ENDIF.

    go_server->response->set_status( code   = gs_error-status_code
                                     reason = gs_error-status_text ).

    " Avoid control characters in output
    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN lv_error_message WITH '<CRLF>'.
    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN lv_error_message WITH '<LF>'.
    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>form_feed IN lv_error_message WITH '<FF>'.
    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>backspace IN lv_error_message WITH '<BS>'.
    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN lv_error_message WITH '<TAB>'.
    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>vertical_tab IN lv_error_message WITH '<VT>'.

    " Set X-ErrorDescription
    go_server->response->set_header_field( name  = 'X-ErrorDescription'
                                           value = lv_error_message ) ##NO_TEXT.
    " New XSS handling
    lv_error_message = escape( val    = lv_error_message
                               format = cl_abap_format=>e_xss_ml ).

    " Set body
    go_server->response->set_cdata( data = lv_error_message ).

    " Set content type
    go_server->response->set_header_field( name  = 'Content-Type'
                                           value = 'text/html' ) ##NO_TEXT.