Skip to content
This repository was archived by the owner on May 15, 2024. It is now read-only.
This repository was archived by the owner on May 15, 2024. It is now read-only.

Unauthorized 401 responses throw unnecessary JSONDecodeError #12

@lmarkscp

Description

@lmarkscp

Description

If the account or token is invalid, an expected response with status_code 401 is returned, but the reponse._content is a string Unauthorized, not the expected string {error: <message>}. Thus line 114 content = json.loads(response._content) in jupiterone/client.py will cause json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Reproduction

  • Set the account or token in the header to be an invalid value
  • Use a breakpoint to verify the response has status_code = 401 and ._content = "Unauthorized"
  • Or wrap the call to the client with try-except and verify the Exception has a doc attribute with "Unauthorized"
  • Verify that the exception trace stack looks like this:
|   File "/usr/local/lib/python3.9/site-packages/jupiterone/client.py", line 203, in query_v1
|     return self._cursor_query(
|   File "/usr/local/lib/python3.9/site-packages/jupiterone/client.py", line 135, in _cursor_query
|     response = self._execute_query(query=CURSOR_QUERY_V1, variables=variables)
|   File "/usr/local/lib/python3.9/site-packages/retrying.py", line 49, in wrapped_f
|     return Retrying(*dargs, **dkw).call(f, *args, **kw)
|   File "/usr/local/lib/python3.9/site-packages/retrying.py", line 206, in call
|     return attempt.get(self._wrap_exception)
|   File "/usr/local/lib/python3.9/site-packages/retrying.py", line 247, in get
|     six.reraise(self.value[0], self.value[1], self.value[2])
|   File "/usr/local/lib/python3.9/site-packages/six.py", line 719, in reraise
|     raise value
|   File "/usr/local/lib/python3.9/site-packages/retrying.py", line 200, in call
|     attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
|   File "/usr/local/lib/python3.9/site-packages/jupiterone/client.py", line 114, in _execute_query
|     content = json.loads(response._content)
|   File "/usr/local/lib/python3.9/json/__init__.py", line 346, in loads
|     return _default_decoder.decode(s)
|   File "/usr/local/lib/python3.9/json/decoder.py", line 337, in decode
|     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
|   File "/usr/local/lib/python3.9/json/decoder.py", line 355, in raw_decode
|     raise JSONDecodeError("Expecting value", s, err.value) from None
| json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Environment

  • Version: jupiterone 0.2.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions