process_rep_certset

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


  METHOD process_rep_certset.
    DATA lo_content TYPE REF TO data.
    DATA lv_pversion  TYPE string ##NEEDED.
    DATA lv_cdata     TYPE string.
    DATA lv_active    TYPE c LENGTH 1.
    DATA lv_line      TYPE string.
    DATA lv_key       TYPE string.
    DATA lv_value     TYPE string.
    DATA ls_racl      TYPE crep_racl.
    DATA lt_racls     TYPE STANDARD TABLE OF crep_racl.

    FIELD-SYMBOLS <lv_contentrep> TYPE c.

    DATA: BEGIN OF ls_info,
            subject     TYPE string,
            issuer      TYPE string,
            serialno    TYPE string,
            valid_from  TYPE string,
            valid_until TYPE string,
            fingerprint TYPE string,
          END OF ls_info.

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

    ASSIGN lo_content->* TO <lv_contentrep>.

    lv_pversion = get_parameter( iv_name      = 'pVersion'
                                 iv_mandatory = 'X' ).
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    check_authority( iv_write = 1 ).
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

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

    lv_cdata = go_server->request->get_cdata( ).

    lv_active = 'X'.
    WHILE lv_cdata <> space.
      SPLIT lv_cdata AT gv_nl INTO lv_line lv_cdata.
      IF lv_line IS INITIAL.
        IF lv_active IS INITIAL.
          IF lv_cdata IS INITIAL.
            EXIT.
          ENDIF.
          gs_error-status_code = 400.
        ENDIF.
        lv_active = space.
      ENDIF.
      CLEAR ls_info.
      WHILE lv_line <> space.
        SPLIT lv_line AT '="' INTO lv_key lv_line.
        SPLIT lv_line AT '";' INTO lv_value lv_line.
        CASE lv_key.
          WHEN 'subject'.
            ls_info-subject = lv_value.
          WHEN 'issuer'.
            ls_info-issuer = lv_value.
          WHEN 'serialNumber'.
            ls_info-serialno = lv_value.
          WHEN 'notBefore'.
            ls_info-valid_from = lv_value.
          WHEN 'notAfter'.
            ls_info-valid_until = lv_value.
          WHEN 'keyInfo'.
            ls_info-fingerprint = lv_value.
          WHEN OTHERS.
            gs_error-status_code = 400.
        ENDCASE.
      ENDWHILE.
      IF ls_info-fingerprint IS INITIAL.
*      gs_error-status_code = 400.
      ENDIF.
      ls_racl-crep_id = <lv_contentrep>.
      ls_racl-fingerp = ls_info-fingerprint.
      ls_racl-active  = lv_active.
      APPEND ls_racl TO lt_racls.

    ENDWHILE.
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    CALL FUNCTION 'SCMS_RACL_SET'
      EXPORTING
        contrep           = <lv_contentrep>
      TABLES
        fingerprints      = lt_racls
      EXCEPTIONS
        authority_missing = 1
        OTHERS            = 2.
    IF sy-subrc <> 0.
      IF sy-subrc = 1.
        sys_error_set( ).
        gs_error-status_code      = 401.
        gs_error-set_authenticate = 'X'.
      ELSE.
        sys_error_set( ).
      ENDIF.
    ENDIF.

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