示例#1
0
文件: utils.py 项目: JiriKr/pycsob
def validate_response(response: Response, key: str) -> Response:
    response.raise_for_status()

    data = response.json()
    signature = data.pop("signature")
    payload = OrderedDict(
        (k, data[k]) for k in conf.RESPONSE_KEYS if k in data)

    if not verify(payload, signature, key):
        raise CsobVerifyError("Cannot verify response")

    if "dttm" in payload:
        payload["dttime"] = dttm_decode(payload["dttm"])

    response.extensions = []
    response.payload = payload

    # extensions
    if "extensions" in data:
        maskclnrp_keys = "extension", "dttm", "maskedCln", "expiration", "longMaskedCln"
        for one in data["extensions"]:
            if one["extension"] == "maskClnRP":
                o = OrderedDict(
                    (k, one[k]) for k in maskclnrp_keys if k in one)
                if verify(o, one["signature"], key):
                    response.extensions.append(o)
                else:
                    raise CsobVerifyError(
                        "Cannot verify masked card extension response")

    return response