| 136 | } |
| 137 | |
| 138 | func (s *Session) CreatePATToken(ctx context.Context, deviceCode string) (string, error) { |
| 139 | reqBody := CreateCliTokenJSONRequestBody{ |
| 140 | DeviceCode: deviceCode, |
| 141 | } |
| 142 | |
| 143 | var buf bytes.Buffer |
| 144 | if err := json.NewEncoder(&buf).Encode(reqBody); err != nil { |
| 145 | return "", err |
| 146 | } |
| 147 | |
| 148 | req, err := http.NewRequestWithContext(ctx, "POST", "/cli/pat-tokens", &buf) |
| 149 | if err != nil { |
| 150 | return "", err |
| 151 | } |
| 152 | req.Header.Set("Content-Type", "application/json") |
| 153 | |
| 154 | res, err := s.Do(req) |
| 155 | if err != nil { |
| 156 | return "", err |
| 157 | } |
| 158 | |
| 159 | requestId := res.Header.Get("X-Request-Id") |
| 160 | |
| 161 | switch res.StatusCode { |
| 162 | case http.StatusOK: |
| 163 | var patTokens *AuthCliPatTokensResponse |
| 164 | if err = json.NewDecoder(res.Body).Decode(&patTokens); err != nil { |
| 165 | return "", err |
| 166 | } |
| 167 | return patTokens.PatToken, nil |
| 168 | case http.StatusServiceUnavailable: |
| 169 | return "", ErrTransient |
| 170 | case http.StatusBadRequest: |
| 171 | var errorsRes *Error |
| 172 | if err = json.NewDecoder(res.Body).Decode(&errorsRes); err != nil { |
| 173 | return "", err |
| 174 | } |
| 175 | switch errorsRes.Type { |
| 176 | case "urn:anchordev:api:cli-auth:authorization-pending": |
| 177 | return "", ErrTransient |
| 178 | case "urn:anchordev:api:cli-auth:expired-device-code": |
| 179 | return "", fmt.Errorf("Your authorization request has expired, please try again.") |
| 180 | case "urn:anchordev:api:cli-auth:incorrect-device-code": |
| 181 | return "", fmt.Errorf("Your authorization request was not found, please try again.") |
| 182 | default: |
| 183 | return "", fmt.Errorf("request [%s]: unexpected error: %s", requestId, errorsRes.Detail) |
| 184 | } |
| 185 | default: |
| 186 | return "", fmt.Errorf("request [%s]: unexpected response code: %d", requestId, res.StatusCode) |
| 187 | } |
| 188 | } |
| 189 | |
| 190 | func (s *Session) CreateEAB(ctx context.Context, chainSlug, orgSlug, realmSlug, serviceSlug, subCASlug string) (*Eab, error) { |
| 191 | var eabInput CreateEabTokenJSONRequestBody |