All files / src/http zcl_abapgit_login_manager.clas.abap

38.69% Statements 89/230
40% Branches 2/5
50% Functions 1/2
38.69% Lines 89/230

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 2311x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x                       4x 4x 4x                                                                                                                                                                                                                                                                      
CLASS zcl_abapgit_login_manager DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .
 
  PUBLIC SECTION.
 
    CLASS-METHODS load
      IMPORTING
        !iv_uri                 TYPE string
      RETURNING
        VALUE(rv_authorization) TYPE string
      RAISING
        zcx_abapgit_exception .
    CLASS-METHODS save
      IMPORTING
        !iv_uri           TYPE string
        !iv_authorization TYPE string
      RAISING
        zcx_abapgit_exception .
    CLASS-METHODS clear .
    CLASS-METHODS set_basic
      IMPORTING
        !iv_uri        TYPE string
        !iv_username   TYPE string
        !iv_password   TYPE string
      RETURNING
        VALUE(rv_auth) TYPE string
      RAISING
        zcx_abapgit_exception .
    CLASS-METHODS set_bearer
      IMPORTING
        !iv_uri        TYPE string
        !iv_token      TYPE string
      RETURNING
        VALUE(rv_auth) TYPE string
      RAISING
        zcx_abapgit_exception .
    CLASS-METHODS get
      IMPORTING
        !iv_uri        TYPE string
      RETURNING
        VALUE(rv_auth) TYPE string
      RAISING
        zcx_abapgit_exception .
    CLASS-METHODS get_username
      IMPORTING
        !iv_uri            TYPE string
      RETURNING
        VALUE(rv_username) TYPE string
      RAISING
        zcx_abapgit_exception .
    CLASS-METHODS get_password
      IMPORTING
        !iv_uri            TYPE string
      RETURNING
        VALUE(rv_password) TYPE string
      RAISING
        zcx_abapgit_exception .
    CLASS-METHODS remove
      IMPORTING
        !iv_uri TYPE string
      RAISING
        zcx_abapgit_exception .
  PROTECTED SECTION.
  PRIVATE SECTION.
 
    TYPES:
      BEGIN OF ty_auth,
        uri           TYPE string,
        authorization TYPE string,
      END OF ty_auth .
 
    CLASS-DATA:
      gt_auth TYPE TABLE OF ty_auth WITH DEFAULT KEY .
 
    CLASS-METHODS append
      IMPORTING
        !iv_uri  TYPE string
        !iv_auth TYPE string
      RAISING
        zcx_abapgit_exception .
ENDCLASS.
 
 
 
CLASS zcl_abapgit_login_manager IMPLEMENTATION.


  METHOD append.

    FIELD-SYMBOLS: <ls_auth> LIKE LINE OF gt_auth.

    " Overwrite any existing entry, the caller is the authority on the credentials
    " to be used for the host from now on
    READ TABLE gt_auth ASSIGNING <ls_auth> WITH KEY uri = zcl_abapgit_url=>host( iv_uri ).
    IF sy-subrc <> 0.
      APPEND INITIAL LINE TO gt_auth ASSIGNING <ls_auth>.
      <ls_auth>-uri = zcl_abapgit_url=>host( iv_uri ).
    ENDIF.

    <ls_auth>-authorization = iv_auth.

  ENDMETHOD.


  METHOD clear.

    CLEAR gt_auth.

  ENDMETHOD.


  METHOD get.

    DATA ls_auth LIKE LINE OF gt_auth.

    READ TABLE gt_auth INTO ls_auth WITH KEY uri = zcl_abapgit_url=>host( iv_uri ).
    IF sy-subrc = 0.
      rv_auth = ls_auth-authorization.
    ENDIF.

  ENDMETHOD.


  METHOD get_username.

    DATA lv_auth    TYPE string.
    DATA lv_decoded TYPE string.

    lv_auth = get( iv_uri ).
    IF lv_auth IS INITIAL.
      RETURN.
    ENDIF.

    IF lv_auth CP 'Basic *'.
      lv_auth = lv_auth+6.
      lv_decoded = cl_http_utility=>decode_base64( lv_auth ).
      SPLIT lv_decoded AT ':' INTO rv_username lv_decoded.
    ENDIF.

  ENDMETHOD.


  METHOD get_password.

    DATA lv_auth     TYPE string.
    DATA lv_username TYPE string.

    lv_auth = get( iv_uri ).
    IF lv_auth IS INITIAL.
      RETURN.
    ENDIF.

    IF lv_auth CP 'Basic *'.
      lv_auth = lv_auth+6.
      lv_auth = cl_http_utility=>decode_base64( lv_auth ).
      " Keep everything after the first colon, passwords/tokens may contain colons
      SPLIT lv_auth AT ':' INTO lv_username rv_password.
    ENDIF.

  ENDMETHOD.


  METHOD remove.

    DELETE gt_auth WHERE uri = zcl_abapgit_url=>host( iv_uri ).

  ENDMETHOD.


  METHOD load.

    DATA ls_auth LIKE LINE OF gt_auth.

    READ TABLE gt_auth INTO ls_auth WITH KEY uri = zcl_abapgit_url=>host( iv_uri ).
    IF sy-subrc = 0.
      rv_authorization = ls_auth-authorization.
    ENDIF.

  ENDMETHOD.


  METHOD save.

    IF NOT iv_authorization IS INITIAL.
      append( iv_uri  = iv_uri
              iv_auth = iv_authorization ).
    ENDIF.

  ENDMETHOD.


  METHOD set_basic.

    DATA: lv_concat TYPE string.

    ASSERT NOT iv_uri IS INITIAL.

    IF iv_username IS INITIAL OR iv_password IS INITIAL.
      RETURN.
    ENDIF.

    CONCATENATE iv_username ':' iv_password INTO lv_concat.

    rv_auth = cl_http_utility=>encode_base64( lv_concat ).

    CONCATENATE 'Basic' rv_auth INTO rv_auth SEPARATED BY space.

    append( iv_uri  = iv_uri
            iv_auth = rv_auth ).

  ENDMETHOD.


  METHOD set_bearer.

    ASSERT NOT iv_uri IS INITIAL.

    IF iv_token IS INITIAL.
      RETURN.
    ENDIF.

    CONCATENATE 'Bearer' iv_token INTO rv_auth SEPARATED BY space.

    append( iv_uri  = iv_uri
            iv_auth = rv_auth ).

  ENDMETHOD.
ENDCLASS.