process_rep_certget

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


  METHOD process_rep_certget.
    DATA lo_contrep   TYPE REF TO data.
    DATA lv_pversion    TYPE string ##NEEDED.
    DATA lv_newcerts    TYPE c LENGTH 1.
    DATA lt_racls       TYPE STANDARD TABLE OF crep_racl.
    DATA ls_crep_http   TYPE crep_http.
    DATA lv_security    TYPE string.
    DATA ls_racl        TYPE crep_racl.
    DATA lv_fingerprint TYPE string.
    DATA lv_subject     TYPE string.
    DATA lv_issuer      TYPE string.
    DATA lv_serialno    TYPE string.
    DATA lv_valid_since TYPE string.
    DATA lv_valid_until TYPE string.
    DATA lv_certificate TYPE xstring.
    DATA lv_cert64      TYPE string.

    FIELD-SYMBOLS <lv_contentrep> TYPE c.

    get_parameter_c( EXPORTING iv_name      = 'contRep '
                               iv_mandatory = 's'
                     IMPORTING er_value     = lo_contrep ).

    ASSIGN lo_contrep->* TO <lv_contentrep>.

    lv_pversion = get_parameter( iv_name      = 'pVersion'
                                 iv_mandatory = 'X' ).
    IF gv_command = 'getCert'.
      lv_newcerts = space.
    ELSE.
      check_authority( iv_read = 1 ).
      IF gs_error IS NOT INITIAL.
        RETURN.
      ENDIF.
      lv_newcerts = get_parameter_b( iv_name      = 'newCerts'
                                     iv_mandatory = 'X' ).
    ENDIF.

    check_parameter_consistence( ).
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    CALL FUNCTION 'SCMS_RACL_GET'
      EXPORTING
        contrep      = <lv_contentrep>
      TABLES
        fingerprints = lt_racls.

    go_server->response->set_header_field( name  = 'Content-Type'
                                           value = 'text/plain' ) ##NO_TEXT.

    IF gv_command = 'getCert'.
      PERFORM crep_select IN PROGRAM saplscms_url USING    gv_mandt
                                                           <lv_contentrep>
                                                  CHANGING ls_crep_http.

      IF ls_crep_http-http_nosig = 'X'.
        lv_security = '0'.
      ELSE.
        lv_security = '1'.
      ENDIF.
      body_add_field( iv_name  = 'security'
                      iv_value = lv_security ).
      CONCATENATE gv_body gv_nl INTO gv_body.
    ENDIF.

    LOOP AT lt_racls INTO ls_racl WHERE active <> lv_newcerts. "#EC CI_STDSEQ
      lv_fingerprint = ls_racl-fingerp.
      CALL FUNCTION 'SCMS_RACL_INFO'
        EXPORTING
          fingerprint = lv_fingerprint
        IMPORTING
          subject     = lv_subject
          issuer      = lv_issuer
          serialno    = lv_serialno
          valid_since = lv_valid_since
          valid_until = lv_valid_until
        EXCEPTIONS
          not_found   = 1
          OTHERS      = 2.
      IF sy-subrc <> 0.
        CONTINUE.
      ENDIF.
      body_add_field( iv_name  = 'subject'
                      iv_value = lv_subject ).
      body_add_field( iv_name  = 'issuer'
                      iv_value = lv_issuer ).
      body_add_field( iv_name  = 'serialNumber'
                      iv_value = lv_serialno ).
      body_add_field( iv_name  = 'notBefore'
                      iv_value = lv_valid_since ).
      body_add_field( iv_name  = 'notAfter'
                      iv_value = lv_valid_until ).
      body_add_field( iv_name  = 'keyInfo'
                      iv_value = lv_fingerprint ).

      IF gv_command = 'getCert'.
        CALL FUNCTION 'SCMS_CERT_GET'
          EXPORTING
            fingerprint = lv_fingerprint
          IMPORTING
            data        = lv_certificate
          EXCEPTIONS
            not_found   = 1
            OTHERS      = 2.
        IF sy-subrc = 0.
          lv_cert64 = lv_certificate.
          body_add_field( iv_name  = 'certificate'
                          iv_value = lv_cert64 ).
        ENDIF.
      ENDIF.
      CONCATENATE gv_body gv_nl INTO gv_body.

    ENDLOOP.

    go_server->response->set_status( code   = 200
                                     reason = 'OK' ).